CN104102482A - 一种嵌入式系统的控制台串口与应用串口复用方法及应用 - Google Patents

一种嵌入式系统的控制台串口与应用串口复用方法及应用 Download PDF

Info

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
Application number
CN201310129390.8A
Other languages
English (en)
Other versions
CN104102482B (zh
Inventor
郑福弟
许宁
任赋
黄杭星
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Xiamen Yaxon Networks Co Ltd
Original Assignee
Xiamen Yaxon Networks Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Xiamen Yaxon Networks Co Ltd filed Critical Xiamen Yaxon Networks Co Ltd
Priority to CN201310129390.8A priority Critical patent/CN104102482B/zh
Publication of CN104102482A publication Critical patent/CN104102482A/zh
Application granted granted Critical
Publication of CN104102482B publication Critical patent/CN104102482B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

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的嵌入式系统的串口扩展方法,其特征在于,控制台连接物理串口。
CN201310129390.8A 2013-04-12 2013-04-12 一种嵌入式系统的控制台串口与应用串口复用方法及应用 Active CN104102482B (zh)

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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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 山东神戎电子股份有限公司 一种嵌入式系统中串口分时复用方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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