実行時にシリアルシステムコンソールを有効にする


4

システムコンソールを有効にするためのLinuxカーネルブートオプションがあります。 console=、 例えば、 console=ttyS0,115200 または console=ttyS0,115200n8 http://www.linuxtopia.org/online_books/linux_kernel/kernel_configuration/re01.html

このオプションを渡した後、Linuxカーネルはすべて(または一部)のカーネルメッセージをコンソールに表示します。これはデバッグに役立ちます。

再起動せずに、実行時にLinuxのシステムコンソールを変更する方法はありますか(いくつかの特別なsysctls / ioctls /または /proc または /sys ファイルシステム)

最初のケース:私は持っていなかった console= 現在の起動(/ proc / cmdlineでチェックイン)のオプションと私は状況をデバッグするために/ dev / ttyS0シリアルポートへのdmesg印刷を有効にしたいです。

2番目のケース:自分の設定が間違っていた console=ttyS0,9600 そして、再起動せずに速度を変更したい(古いコンソール設定を削除するか、良い115200設定で新しいコンソールを追加するか、単に速度を変更する)。

(どこで console= オプションが解析されます。 /sys または /proc 現在の設定は保存されていますか?)


あなたはこれを理解したことがありますか?答えが欲しいのですが。
jdizzle

@jdizzle、私はコンソールの特別なファイルを検索するいくつかのアイデアを持っていました /sys fs(そしてLinuxカーネルソースで検索するため)ですが、私はまだこの質問を完全な答えにはしていません。チェックすべき kernel.org/doc/Documentation/console/console.txt kernel.org/doc/Documentation/fb/fbcon.txt そして kernel.org/doc/Documentation/networking/netconsole.txt 。 netconsoleは実行時に有効になります - wiki.archlinux.org/index.php/Netconsole
osgx

回答:


0

完全な実際のハードウェアコンソールがランタイムに追加されたわけではありませんが、場合によってはより良いものがあります。一方向で、カーネルログを収集するためだけの、イーサネットネットワークにおける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]

すべて指定する必要があります:source udp port、source ipv4 address、 "eth0"のようなネットワークインターフェース名(eth0を位置関連のものにリネームしますか?) 6バイト00:13:32:20:r9:a5

受信機は 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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.