1

組み込み Linux (Angstrom ディストリビューション、Atmel 用) を実行しています。シャットダウン中にカーネルメッセージログを読みたいと思います.dmesgで取得するのと同じものです。基本的に、カーネルコードに printk() を挿入することでいくつかの問題を調査していますが、その出力を確認したいと思います。

システムの電源を入れたときにログが自動的に開始されず (どうすればよいですか?)、klogd コマンドで何も取得できません。

4

3 に答える 3

0

klogdの開始が遅すぎたり、停止が早すぎてメッセージが表示されない場合は、Netconsoleを試してみてください。

もちろん、組み込みボードへのネットワークアクセスがある場合。このモジュールは設定が簡単で、過去に数回使用しました。ブートプロセスの非常に早い段階/遅い段階で送信されるメッセージを表示できるようにする場合は、モジュールとしてではなく、カーネル内で(イーサネットドライバーを使用して)コンパイルする必要があることに注意してください。

また、デフォルトのログレベルを確認して、printk()を表示できるようにします(loglevel =カーネルブートパラメータ)

于 2012-10-03T07:59:47.483 に答える
0

信頼できる RS232 シリアル コンソールは、このような状況ではおそらくあなたの味方です。

無効にするための措置を講じていない限り、カーネルログメッセージはほぼ確実にそこに到達します。

于 2012-10-06T18:47:31.273 に答える
0

異なるディストリビューションでは、/proc/kmsg の出力を任意の物理ログ ファイルまたは仮想デバイス (/dev/xxx) にリダイレクトできます。ただし、カーネルは実際には fs/proc/kmsg.c 内でリング バッファー操作を実装しているため、「/proc/kmsg」はカーネル ログの元の最終的なソースです。

static const struct file_operations proc_kmsg_operations = {
        .read           = kmsg_read,
        .poll           = kmsg_poll,
        .open           = kmsg_open,
        .release        = kmsg_release,
        .llseek         = generic_file_llseek,
};

そして、ここに詳細があります:

Linuxカーネル空間内でリングバッファを読み取る方法は?

したがって、出力は次のようになります。

sudo テール -f /proc/kmsg

また、このコマンドを発行した後に生成されたすべてのメッセージのみを表示できます。リング バッファー内の以前のメッセージはすべて出力されません。したがって、物理ファイルの出力を表示するには、「/proc/kmsg」のユーザーを検索できます。

sudo lsof |grep proc.kmsg

そして、私のマシンはこれを示しました:

rsyslogd  1743               syslog    3r      REG                0,3          0 4026532041 /proc/kmsg
in:imuxso 1743 1755          syslog    3r      REG                0,3          0 4026532041 /proc/kmsg
in:imklog 1743 1756          syslog    3r      REG                0,3          0 4026532041 /proc/kmsg
rs:main   1743 1757          syslog    3r      REG                0,3          0 4026532041 /proc/kmsg

これで pid 1743 になりました。1743 によって開かれたファイル fd を見てみましょう。

sudo ls -al /proc/1743/fd

lrwx------ 1 root   root   64 Dec 11 08:36 0 -> socket:[14472]
l-wx------ 1 root   root   64 Dec 11 08:36 1 -> /var/log/syslog
l-wx------ 1 root   root   64 Dec 11 08:36 2 -> /var/log/kern.log
lr-x------ 1 root   root   64 Dec 11 08:36 3 -> /proc/kmsg
l-wx------ 1 root   root   64 Dec 11 08:36 4 -> /var/log/auth.log

pid 1743 は rsyslogd であり、/proc/kmsg の出力を /var/log/syslog や /var/log/kern.log などのファイルにリダイレクトします。

于 2015-12-11T00:41:56.637 に答える