CN104102482A - 一种嵌入式系统的控制台串口与应用串口复用方法及应用 - Google Patents
一种嵌入式系统的控制台串口与应用串口复用方法及应用 Download PDFInfo
- Publication number
- CN104102482A CN104102482A CN201310129390.8A CN201310129390A CN104102482A CN 104102482 A CN104102482 A CN 104102482A CN 201310129390 A CN201310129390 A CN 201310129390A CN 104102482 A CN104102482 A CN 104102482A
- Authority
- CN
- China
- Prior art keywords
- serial ports
- serial port
- state
- application
- control desk
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明涉及一种基于1inux的嵌入式系统的控制台串口与应用串口复用方法,及其在基于linux的嵌入式系统的串口扩展上的应用。步骤如下:1)在内核中,将调试信息接口设置为启用或关闭可切换状态,并为应用层提供切换接口;2)在根文件系统中,关闭自动启动控制台的命令;3)当前串口为控制台串口状态,切换为应用串口状态;当前串口为应用串口状态,切换为控制台串口状态。在产品的正常使用中,节省出一个物理串口与外部设备对接;当产品出现问题需要调试时,在不改变硬件和不重启的条件下,通过软件操作即可实现对产品的软件调试;本技术方案不涉及协议层的封装和修改,对外部串口设备软件和PC机上的控制台工具无需进行任何适应性修改。
Description
技术领域
本发明涉及基于linux的嵌入系统优化领域,更具体地说,涉及一种基于linux的嵌入式系统的控制台串口与应用串口复用方法,及其在基于linux的嵌入式系统的串口扩展上的应用。
背景技术
在基于Linux的嵌入式设备当中,设备的调试很大程度上要依赖于控制台(console)的使用,如打印调试信息或者运行某些非自动运行的程序、脚本。而在没有显示屏的嵌入式设备当中,控制台往往都是通过占用系统的物理串口来实现的。
在嵌入式系统中串口是比较重要的资源,按现有的技术,如果某个串口被控制台占用,则不能用来当作应用串口与其它外部设备对接,造成设备使用时串口资源的短缺。本技术要解决的正是这个问题,通过本技术,可实现串口作为控制台串口和应用串口之间的复用。
发明内容
本发明的目的在于克服现有技术的不足,提供一种低成本,易实现的基于linux的嵌入式系统的控制台串口与应用串口复用方法,及其在基于linux的嵌入式系统的串口扩展上的应用。
本发明的技术方案如下:
一种基于linux的嵌入式系统的控制台串口与应用串口复用方法,步骤如下:
1)在内核中,将调试信息接口设置为启用或关闭可切换状态,并为应用层提供切换接口;
2)在根文件系统中,关闭自动启动控制台的命令;
3)如果当前串口为控制台串口状态,并需要切换为应用串口状态时,
3.1.1)关闭调试信息接口的调试信息输出;
3.1.2)关闭控制台守护进程;
3.1.3)将标准输出句柄stdout和标准错误输出句柄stderr定向到“/dev/null”的文件句柄fd_null上:
3.1.4)将当前串口的状态变量标记为应用串口状态,完成切换操作;
如果当前串口为应用串口状态,并需要切换为控制台串口状态时,
3.2.1)将标准输出句柄stdom和标准错误输出句柄stderr定向到原标准输出句柄stdout和原标准错误输出句柄stderr的备份文件;
3.2.2)启动一个指向串口的控制台程序;
3.2.3)开启调试信息接口的调试信息输出;
3.2.4)将当前串口的状态变量标记为控制台串口状态,完成切换操作。
作为优选,步骤1)具体为:修改内核代码中的printk.c,实现内核调试信息接口printk()的启用和关闭可切换。
作为优选,对printk.c进行的修改,为增加如下内容:
设置内核调试信息的初始状态,后续状态由应用层控制;
驱动向位于内核的系统上层提供的切换接口;
是否需要打印调试信息的判断,如果不需要,则在调试信息送往串口前即退出。
作为优选,步骤2)具体为:在根文件系统的文件/etc/inittab中找到行“::respawn:-/bin/sh”,将其删除。
作为优选,步骤3)在对当前串口的状态进行判断前,备份标准输出句柄stdout和标准错误输出句柄stderr。
作为优选,步骤3)在对当前串口的状态进行判断前,打开/dev/null的文件句柄fd_null。
一种基于linux的嵌入式系统的串口扩展方法,对应用串口也控制台串口遵循嵌入式linux系统的控制台串口与应用串口复用方法进行串口切换复用。
作为优选,控制台连接物理串口。
本发明的有益效果如下:
通过上述控制台串口与应用串口复用的实现,可实现:
1、在产品的正常使用中,节省出一个物理串口与外部设备对接;
2、当产品出现问题需要调试时,在不改变硬件和不重启的条件下,通过软件操作即可实现对产品的软件调试;
3、本技术方案不涉及协议层的封装和修改,对外部串口设备软件和PC机上的控制台工具无需进行任何适应性修改。
附图说明
图1是基于linux的嵌入式系统的产品内部框架示意图;
图2是基于linux的嵌入式系统的控制台串口与应用串口复用方法的运行流程图;
图3是应用串口切换为控制台串口的子流程的流程图;
图4是控制台串口切换为应用串口的子流程的流程图。
具体实施方式
以下结合附图及实施例对本发明进行进一步的详细说明。
为解决控制台占用串口导致系统的串口资源短缺问题,实现控制台串口与应用串口的复用,本发明所述的技术方案的实现涉及到Linux操作系统内核、文件系统的配置文件和应用程序编程三个层面的内容需要修改,为方便本技术方案描述,可将基于linux的嵌入式系统的产品内部框架抽象成如图1所示的内核(Linux操作系统内核)、根文件系统(文件系统的配置文件)和应用层(应用程序编程),以及底层硬件。
本发明所述的基于linux的嵌入式系统的控制台串口与应用串口复用方法,步骤如下:
1)在内核中,将调试信息接口设置为启用或关闭可切换状态,并为应用层提供切换接口;在本发明中,具体为:修改内核代码中的printk.c,实现内核调试信息接口printk()的启用和关闭可切换。对printk.c进行的修改,为增加如下内容:设置内核调试信息的初始状态,后续状态由应用层控制;驱动向位于内核的系统上层提供的切换接口;是否需要打印调试信息的判断,如果不需要,则在调试信息送往串口前即退出。
2)在根文件系统中,关闭自动启动控制台的命令;在本发明中,具体为:在根文件系统的文件/etc/inittab中找到行“::respawn:-/bin/sh”,将其删除。
3)如果当前串口为控制台串口状态,并需要切换为应用串口状态时,
3.1.1)关闭调试信息接口的调试信息输出;
3.1.2)关闭控制台守护进程;
3.1.3)将标准输出句柄stdout和标准错误输出句柄stderr定向到“/dev/null”的文件句柄fd_null上:
3.1.4)将当前串口的状态变量标记为应用串口状态,完成切换操作;
如果当前串口为应用串口状态,并需要切换为控制台串口状态时,
3.2.1)将标准输出句柄stdout和标准错误输出句柄stderr定向到原标准输出句柄stdout和原标准错误输出句柄stderr的备份文件;
3.2.2)启动一个指向串口的控制台程序;
3.2.3)开启调试信息接口的调试信息输出;
3.2.4)将当前串口的状态变量标记为控制台串口状态,完成切换操作。
步骤3)在对当前串口的状态进行判断前,备份标准输出句柄stdout和标准错误输出句柄stderr,并打开/dev/null的文件句柄fd_null。
在控制台连接物理串口,占用一个物理串口的情况下,将上述的嵌入式linux系统的控制台串口与应用串口复用方法应用到基于linux的嵌入式系统的串口扩展方法中,对应用串口也控制台串口遵循嵌入式linux系统的控制台串口与应用串口复用方法进行串口切换复用。
实施例
如图2所示,基于linux的嵌入式系统的控制台串口与应用串口复用方法,步骤如下:
S1)系统启动,根文件系统挂载;
S2)应用程序启动,默认处于应用串口状态;
S3)打开/dev/null的文件句柄fd_null;
S4)备份标准输出句柄stdout为stdout_back,备份标准错误输出句柄stderr为stderr_back;
S5)判断当前串口是否为应用串口,如果是应用串口,判断是否需要切换为控制台串口,如果需要切换为控制台串口,则执行应用串口切换为控制台串口的子流程;切换完成后,返回判断当前串口是否为应用串口、是否需要切换为控制台串口;
S6)如果当前串口不是应用串口,或者不需要切换为控制台串口,则判断当前串口是否为控制台串口,如是是否为控制台串口,判断是否需要切换为应用串口,如果需要切换为应用串口,则执行控制台串口切换为应用串口的子流程;切换完成后,返回判断当前串口是否为应用串口、是否需要切换为控制台串口;
S7)如果当前串口不是控制台串口,或者不需要切换为应用串口,则返回判断当前串口是否为应用串口、是否需要切换为控制台串口。
本实施例中,实现内核调试信息接口printk()的启用和关闭可切换,内核默认关闭调试信息输出,并为应用层提供切换接口;
修改prink.c中相关程序的伪代码如下:
如图3所示,应用串口切换为控制台串口的子流程,步骤如下:
S11)将标准输出句柄stdout和标准错误输出句柄stderr分别定向到stdout_back、stderr_back,程序实现的伪代码下:
dup2(stdout_back,1);
dup2(stderr_back,1);
S12)开启控制台守护进程,具体为:使用系统命令“/sbin/getty—LttyAM0115200&”启动一个指向串口的控制台程序;
S13)调用驱动接口,开启调试信息接口printk的调试信息输出,具体为:调用前述的实现的驱动接口set_printk_on(true);开启驱动的调试信息输出;
S14)设置串口状态为控制台串口状态;
S15)退出子流程。
如图4所示,控制台串口切换为应用串口的子流程,步骤如下:
S21)调用驱动接口,关闭调试信息接口printk的调试信息输出,具体为:调用前述的实现的驱动接口set_printk_on(false);关闭驱动的调试信息输出;
S22)关闭控制台守护进程,具体为:使用系统命令“killall—KILL/sbin/getty'’进行关闭;
S23)将标准输出句柄stdout和标准错误输出句柄stderr定向到“/dev/null”的文件句柄fd_null上,程序实现的伪代码如下:
dup2(fd_null,1); //将stdout重定向到fd_null
dup2(fd_null,2); //将stderr重定向到fd_null
S24)设置串口状态为应用串口状态;
S25)退出子流程。
备份标准输出句柄stdout和标准错误输出句柄stderr分别为stdout_back和stderr_back,并打开/dev/null的文件句柄fd_null,程序实现的伪代码如下:
上述实施例仅是用来说明本发明,而并非用作对本发明的限定。只要是依据本发明的技术实质,对上述实施例进行变化、变型等都将落在本发明的权利要求的范围内。
Claims (8)
1.一种基于linux的嵌入式系统的控制台串口与应用串口复用方法,其特征在于,步骤如下:
1)在内核中,将调试信息接口设置为启用或关闭可切换状态,并为应用层提供切换接口;
2)在根文件系统中,关闭自动启动控制台的命令;
3)如果当前串口为控制台串口状态,并需要切换为应用串口状态时,
3.1.1)关闭调试信息接口的调试信息输出;
3.1.2)关闭控制台守护进程;
3.1.3)将标准输出句柄stdout和标准错误输出句柄stderr定向到“/dev/null”的文件句柄fd_null上:
3.1.4)将当前串口的状态变量标记为应用串口状态,完成切换操作;
如果当前串口为应用串口状态,并需要切换为控制台串口状态时,
3.2.1)将标准输出句柄stdout和标准错误输出句柄stderr定向到原标准输出句柄stdout和原标准错误输出句柄stderr的备份文件;
3.2.2)启动一个指向串口的控制台程序;
3.2.3)开启调试信息接口的调试信息输出;
3.2.4)将当前串口的状态变量标记为控制台串口状态,完成切换操作。
2.根据权利要求1所述的基于linux的嵌入式系统的控制台串口与应用串口复用方法,其特征在于,步骤1)具体为:修改内核代码中的printk.c,实现内核调试信息接口printk()的启用和关闭可切换。
3.根据权利要求2所述的基于linux的嵌入式系统的控制台串口与应用串口复用方法,其特征在于,对printk.c进行的修改,为增加如下内容:
设置内核调试信息的初始状态,后续状态由应用层控制;
驱动向位于内核的系统上层提供的切换接口;
是否需要打印调试信息的判断,如果不需要,则在调试信息送往串口前即退出。
4.根据权利要求1所述的基于linux的嵌入式系统的控制台串口与应用串口复用方法,其特征在于,步骤2)具体为:在根文件系统的文件/etc/inittab中找到行“::respawn:-/bin/sh”,将其删除。
5.根据权利要求1所述的基于linux的嵌入式系统的控制台串口与应用串口复用方法,其特征在于,步骤3)在对当前串口的状态进行判断前,备份标准输出句柄stdout和标准错误输出句柄stderr。
6.根据权利要求1所述的基于linux的嵌入式系统的控制台串口与应用串口复用方法,其特征在于,步骤3)在对当前串口的状态进行判断前,打开/dev/null的文件句柄fd_null。
7.一种基于linux的嵌入式系统的串口扩展方法,其特征在于,对应用串口与控制台串口遵循权利要求1至7任一项所述的方法进行串口切换复用。
8.根据权利要求7所述的基于linux的嵌入式系统的串口扩展方法,其特征在于,控制台连接物理串口。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310129390.8A CN104102482B (zh) | 2013-04-12 | 2013-04-12 | 一种嵌入式系统的控制台串口与应用串口复用方法及应用 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310129390.8A CN104102482B (zh) | 2013-04-12 | 2013-04-12 | 一种嵌入式系统的控制台串口与应用串口复用方法及应用 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104102482A true CN104102482A (zh) | 2014-10-15 |
CN104102482B CN104102482B (zh) | 2018-09-07 |
Family
ID=51670662
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310129390.8A Active CN104102482B (zh) | 2013-04-12 | 2013-04-12 | 一种嵌入式系统的控制台串口与应用串口复用方法及应用 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104102482B (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107273129A (zh) * | 2017-06-16 | 2017-10-20 | 深圳市智微智能科技开发有限公司 | 一种支持多串口的方法、装置及终端设备 |
CN111221686A (zh) * | 2018-11-27 | 2020-06-02 | 维谛技术有限公司 | 一种使linux设备支持串口命令行的方法 |
CN111708726A (zh) * | 2020-06-18 | 2020-09-25 | 深圳市信锐网科技术有限公司 | 一种端口共用方法、装置、设备、系统及可读存储介质 |
CN113961495A (zh) * | 2021-10-21 | 2022-01-21 | 青岛海信宽带多媒体技术有限公司 | 一种Linux系统串口功能禁用的方法 |
CN114301619A (zh) * | 2021-11-16 | 2022-04-08 | 北京威努特技术有限公司 | 一种无硬件管理口工控防火墙及其模拟管理口实现方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101339581A (zh) * | 2008-08-29 | 2009-01-07 | 北京中星微电子有限公司 | 基于中断通讯的嵌入式系统的在线调试仿真方法 |
CN101908025A (zh) * | 2009-06-05 | 2010-12-08 | 厦门敏讯信息技术股份有限公司 | 一种串口使用权控制装置及控制方法 |
CN102279835A (zh) * | 2011-06-29 | 2011-12-14 | 厦门雅迅网络股份有限公司 | 一种嵌入式系统中主从设备串行总线通信方法及动态识别过程 |
CN102866976A (zh) * | 2012-09-17 | 2013-01-09 | 山东神戎电子股份有限公司 | 一种嵌入式系统中串口分时复用方法 |
-
2013
- 2013-04-12 CN CN201310129390.8A patent/CN104102482B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101339581A (zh) * | 2008-08-29 | 2009-01-07 | 北京中星微电子有限公司 | 基于中断通讯的嵌入式系统的在线调试仿真方法 |
CN101908025A (zh) * | 2009-06-05 | 2010-12-08 | 厦门敏讯信息技术股份有限公司 | 一种串口使用权控制装置及控制方法 |
CN102279835A (zh) * | 2011-06-29 | 2011-12-14 | 厦门雅迅网络股份有限公司 | 一种嵌入式系统中主从设备串行总线通信方法及动态识别过程 |
CN102866976A (zh) * | 2012-09-17 | 2013-01-09 | 山东神戎电子股份有限公司 | 一种嵌入式系统中串口分时复用方法 |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107273129A (zh) * | 2017-06-16 | 2017-10-20 | 深圳市智微智能科技开发有限公司 | 一种支持多串口的方法、装置及终端设备 |
CN111221686A (zh) * | 2018-11-27 | 2020-06-02 | 维谛技术有限公司 | 一种使linux设备支持串口命令行的方法 |
CN111221686B (zh) * | 2018-11-27 | 2023-08-25 | 维谛技术有限公司 | 一种使linux设备支持串口命令行的方法 |
CN111708726A (zh) * | 2020-06-18 | 2020-09-25 | 深圳市信锐网科技术有限公司 | 一种端口共用方法、装置、设备、系统及可读存储介质 |
CN113961495A (zh) * | 2021-10-21 | 2022-01-21 | 青岛海信宽带多媒体技术有限公司 | 一种Linux系统串口功能禁用的方法 |
CN114301619A (zh) * | 2021-11-16 | 2022-04-08 | 北京威努特技术有限公司 | 一种无硬件管理口工控防火墙及其模拟管理口实现方法 |
CN114301619B (zh) * | 2021-11-16 | 2024-01-30 | 北京威努特技术有限公司 | 一种无硬件管理口工控防火墙及其模拟管理口实现方法 |
Also Published As
Publication number | Publication date |
---|---|
CN104102482B (zh) | 2018-09-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104102482A (zh) | 一种嵌入式系统的控制台串口与应用串口复用方法及应用 | |
KR100532413B1 (ko) | 플래시 메모리 보호 장치 및 방법 | |
CN101714091B (zh) | 用于在操作系统初始化期间显示平台图形的方法和系统 | |
CN105260205B (zh) | 一种嵌入式板上实现双操作系统启动的方法 | |
US20110016299A1 (en) | Multi-environment operating system | |
US20110126216A1 (en) | System and method for switching between environments in a multi-environment operating system | |
CN112764872B (zh) | 计算机设备、虚拟化加速设备、远程控制方法及存储介质 | |
US10606607B2 (en) | Selecting operating systems based on a computing device mode | |
US8893122B2 (en) | Virtual computer system and a method of controlling a virtual computer system on movement of a virtual computer | |
US20120151446A1 (en) | Automatic reconnection of debugger to a reactivated application | |
JP2018519560A (ja) | システム稼働方法およびインテリジェント端末 | |
CN109388473A (zh) | 基于移动操作系统的Android兼容层实现方法和系统 | |
US10572434B2 (en) | Intelligent certificate discovery in physical and virtualized networks | |
US20110219373A1 (en) | Virtual machine management apparatus and virtualization method for virtualization-supporting terminal platform | |
US11954520B2 (en) | Micro kernel scheduling method and apparatus | |
CN105740139A (zh) | 一种基于虚拟环境的嵌入式软件调试方法 | |
WO2020192448A1 (zh) | 虚拟机的迁移方法和系统 | |
CN113722000B (zh) | 一种智能网卡配置方法、装置、电子设备及可读存储介质 | |
JP2007058813A (ja) | 検証装置及び検証方法 | |
CN102141915B (zh) | 一种基于RTLinux的设备实时控制方法 | |
CN106372498A (zh) | 一种软件保护的方法和装置 | |
CN111195919B (zh) | 一种机器人示教平台及其架构方法 | |
US11392504B2 (en) | Memory page fault handling for network interface devices in a virtualized environment | |
CN109669761B (zh) | 一种sdn控制器系统 | |
JP2017162135A (ja) | 情報処理装置、デバッグシステムおよびスタックオーバフロー検出方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |