
システムコンソールを有効にするLinuxカーネルブートオプションがあります。console=
たとえば、console=ttyS0,115200
またはconsole=ttyS0,115200n8
http://www.linuxtopia.org/online_books/linux_kernel/kernel_configuration/re01.html
このオプションを渡すと、Linux カーネルはすべての (または一部の) カーネル メッセージをコンソールに出力します。これはデバッグに役立ちます。
再起動せずに実行時に Linux のシステム コンソールを変更する方法はありますか (特別な sysctl/ioctl/またはファイルシステムを使用/proc
) /sys
?
最初のケース: 現在のブートにはオプションがなかったためconsole=
(/proc/cmdline で確認済み)、状況をデバッグするために /dev/ttyS0 シリアル ポートへの dmesg 印刷を有効にしたいと考えています。
2 番目のケース: 設定が間違っていたためconsole=ttyS0,9600
、再起動せずに速度を変更したい (古いコンソール設定を削除し、適切な 115200 設定の新しいコンソールを追加するか、速度を変更するだけです)。
(console=
オプションはどこで解析され、現在の設定はどこに/sys
保存/proc
されますか?)
答え1
これは私にとってはうまくいきました:
sudo agetty ttyUSB0 115200
sudo password:
ctrl+z
bg
disown
disown を使用しない場合、ターミナルは閉じられ、agetty も終了します (ターミナルを閉じるときに SIGHUP 信号が送信されます)。
別の PC からは を使用してログインできますscreen /dev/ttyUSB0 115200
。ログイン/パスワード プロンプトが表示されます。
答え2
実行時に追加された完全なハードウェア コンソールではありませんが、いくつかのケースではより優れたもの、「netconsole」を紹介します。これは、イーサネット ネットワークの UDP 経由のカーネル コンソール エミュレーションであり、カーネル ログの収集のみを目的としています。USB-UART アダプタやヌル モデム ケーブル、高価な com-over-ethernet はもう必要ありません。「コンソールサーバー」デバイス。送信は不要です(送信には従来のカーネルコンソールを使用することをお勧めします)マジックSysRqただし、netconsole ではそうではありません)。
ドキュメンテーション:https://www.kernel.org/doc/Documentation/networking/netconsole.txt
例:
Netconsole が動作するには、カーネル構成で有効にするか、モジュールとしてビルドする必要があります。(場合によっては、カーネルを実行するために netconsole モジュールをビルドし、再起動せずに Linux に modprobe できることがあります)。
Linux コマンドライン (再起動あり) で有効にするには、次を追加します。
netconsole=[src-port]@[src-ip]/[<dev>],[tgt-port]@<tgt-ip>/[tgt-macaddr]
すべて指定する必要があります: ソース UDP ポート、ソース IPv4 アドレス、「eth0」のようなネットワーク インターフェイス名 (eth0 を位置に関連した名前に変更する udev で動作しますか?)、ターゲット UDP ポートと IPv4、および 6 バイト 00:13:32:20:r9:a5 形式のターゲット MAC アドレス。
受信者は ですnc -u -l $tgt_port
。
Arch wikiからのランタイム設定の例 -https://wiki.archlinux.org/index.php/Netconsole
# set log level for kernel messages dmesg -n 8 modprobe configfs modprobe netconsole mount none -t configfs /sys/kernel/config # 'netconsole' dir is auto created if the module is loaded mkdir /sys/kernel/config/netconsole/target1 cd /sys/kernel/config/netconsole/target1 # set local IP address echo 192.168.0.111 > local_ip # set destination IP address echo 192.168.0.17 > remote_ip # set local network device name (find it trough ifconfig, examples: eth0, eno1, wlan0) echo eno1 > dev_name # find destination MAC address arping -I $(cat dev_name) $(cat remote_ip) -f | grep -o ..:..:..:..:..:.. > remote_mac echo 1 > enabled