我有一个运行 Linux 的旧路由器,我想打开一个串行控制台。这曾经工作正常,但在固件更新后,我现在只能在控制台上获得输出,而无法将任何输入返回给设备。在启动过程中,有一行显示“控制台输入已禁用”,而以前是不存在的。
在不更改固件的情况下,如何重新启用串行控制台上的输入?
...到目前为止我的尝试...
我可以通过 LAN 登录并加载任何文件(如果需要,还可以使用交叉编译工具),并且有一个小的非易失性用户闪存分区,因此任何需要我使用 ioctl 或其他方式编写快速程序的解决方案都可以。嵌入式Linux有/sys/bus
诸如此类的系统文件,/sys/devices/platform/serial8250.0
以防万一有用。文件/dev/console
、/dev/ttyS0
、/dev/tty
均具有读写权限。运行getty -L 115200 ttyS0
会使串行控制台上出现登录提示,但我无法让它接受任何输入。添加行
::respawn:-/bin/sh
使inittab
busybox 给出 shell 提示...但同样,串行控制台不会接受输入。
dmesg报告
Kernel command line: root=/dev/ram rw init=/init console=ttyS0,115200
并stty
给出
speed 38400 baud; line=0;
以及一堆看起来不重要的设置,
stty -a -F /dev/ttyS0
给出
speed 115200 baud; stty: /dev/ttyS0
line = 0;
(还有一大堆看起来不重要的设置,但如果人们需要它们,我会输入它们。)
我在这里不知所措,所以我不确定需要什么信息。
有解决这个难题的想法吗?我有一种感觉,有一些简单的事情我忘了尝试。
答案1
busybox 示例inittab
看起来有点不一样,
# Example of how to put a getty on a serial line (for a terminal)
#
#::respawn:/sbin/getty -L ttyS0 9600 vt100
#::respawn:/sbin/getty -L ttyS1 9600 vt100
你能尝试一下吗?
答案2
我看到这是一篇非常旧的帖子,但我记得在更新三星电视后也看到过一些类似的问题。可能您拥有的路由器型号属于某些不允许外部修改(如 OpenWRT 等)的公司。例如,禁用终端 shell 访问的常见方法是在内核源中禁用它/linux-2.6.35.11/drivers/char/n_tty.c
或使用以下命令编译内核:CONFIG_SERIAL_INPUT_DISABLE_STRING
...