当前位置: 首页 > 工具软件 > debugConsole > 使用案例 >

将linux的debug串口用于console和应用串口复用的方法

水飞掣
2023-12-01

我们在研发一个硬件设备的时候,经常会出现应用矛盾的情况,如下面的场景:

在linux的嵌入式系统中,为了在设备出现故障的时候,可以更好的监听设备的运行状态,需要设置一个串口为console口,用于输出运行信息,但是这样设备启动后,这个debug口不可以用作应用串口来使用了,会出现资源的浪费,那么能不能让这2个功能复用呢?比如说,启动的时候按下某个按键启动console ,如果不按任何键,那么启动后就作为普通串口使用能不能实现呢?
ok,需求弄清楚了,下面是实现方法,注意不同的linux系统或者设备在小的方面如文件的未知的,硬件设备的名称等可能有所不同。

1,  在内核驱动里,不要将串口初始化为console, 如我的:
uclinux-l200v40/linux-2.4.x/drivers/char/tty_io.c
// #ifdef CONFIG_SERIAL_WINBOND_CONSOLE 
#if 0 
        winbond_console_init();
#endif
或者在make menuconfig的时候配置,不要将ttyS0设置为console;

2, 在内核启动,进入busybox时,在/etc/inittab中不要设置串口登录:
# Activate watchdog and logging
#ttyS0::respawn:/sbin/getty -L ttyS0 115200 linux

3, 设置启动脚本/etc/init.d/S02Cmd.sh
#!/bin/sh

/usr/sbin/cmd -D 3
exit 0

其中/usr/sbin/cmd为我们从串口接收数据的C程序,这个程序在启动时监听串口,在1s内,如用户按了回车键,那么就作console,这个可以使用下面的方法来实现; 否则就做普通串口用了。

在cmd这个程序中,如果接收到回车键,可以使用system()执行脚本:/usr/sbin/cmd_getty.sh 来重新启用console,内容如下:
#!/bin/sh
/sbin/getty -L ttyS0 115200 linux &
exit 0

如果使用ssh登录上去,想开启console,也可以直接使用下面命令来开启:
/sbin/getty -L ttyS0 115200 linux &

 

 类似资料: