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

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

在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 &

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

six2me

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值