Linuxを実行する古いルーターがあり、シリアルコンソールをオンにしたい。これは以前は正常に機能していましたが、ファームウェアの更新後、コンソールでのみ出力を取得でき、デバイスに入力を返すことができなくなりました。起動中に、以前はなかった「コンソール入力が無効になっています」という行があります。
ファームウェアを変更せずに、シリアルコンソールで入力を再度有効にするにはどうすればよいですか?
...これまでの私の試み...
LAN経由でログインして、任意のファイル(および必要に応じてクロスコンパイルツール)をロードできます。また、小さな不揮発性ユーザーフラッシュパーティションがあるため、ioctlなどを使用して簡単なプログラムを作成する必要があるソリューションであれば問題ありません。組み込みLinuxには、便利な場合に備えて、/sys/bus
や/sys/devices/platform/serial8250.0
などのシステムファイルがあります。ファイル/dev/console
、/dev/ttyS0
、/dev/tty
には、すべて読み取りおよび書き込み権限があります。 getty -L 115200 ttyS0
を実行すると、シリアルコンソールにログインプロンプトが表示されますが、入力を受け入れることができません。行を追加する
::respawn:-/bin/sh
to inittab
はbusyboxにシェルプロンプトを表示させます...しかし、繰り返しになりますが、シリアルコンソールは入力を受け取りません。
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;
(そして、重要ではないように見える設定がたくさんありますが、必要に応じて入力します。)
ここで途方に暮れているので、どのような情報が必要かわかりません。
このパズルを解くためのアイデアはありますか?試してみ忘れたシンプルなものがあるような気がします。
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
これを試していただけませんか?
これは非常に古い投稿だと思いますが、SamsungTVを更新した後に同様の問題が発生したことを思い出します。おそらく、お持ちのルーターモデルは、OpenWRTなどの外部変更を許可しない会社に属しています。たとえば、ターミナルシェルアクセスを無効にする一般的な方法は、カーネルソースで無効にすることです/linux-2.6.35.11/drivers/char/n_tty.c
またはカーネルを次のようにコンパイルします:CONFIG_SERIAL_INPUT_DISABLE_STRING
.。