カーネルモジュール:コンソール出力を取得するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/9394955

  •  29-10-2019
  •  | 
  •  

質問

私はカーネルモジュールを作成していますが、それをロードするときにコンソール出力に何かを出力できるようにしたいと考えています。 insmod module.ko.

使ってみた

printk(KERN_EMERG "test kernel emergency\n");

しかし、コンソールには何も表示されません。ただし、次のように表示されます。 dmesg.

追加情報:
Intel x86 32ビットとlinux-3.0.0を使用しています。

そして cat /proc/sys/kernel/printk 与える4 4 1 7

役に立ちましたか?

解決

1- フルターミナルモードであることを確認します(Alt+Ctrl+f1を押します)。

2- 代わりに printk(KERN_EMERG "test kernel emergency\n");試す

printk(KERN_ALERT "test kernel alert\n");

他のヒント

イェンス、

printk出力はカーネルに送信され、syslogdデーモンによって収集されます。 dmesgは、syslogdデーモンによって収集されたデータをエコーします。

グラフィカルバージョンのLinuxを使用している場合、このメッセージは(insmodを呼び出した場所から)コンソールで出力されない場合があります。私はこれをubuntuで試しましたが、ログレベルがALERTまたはEMERGENCYであってもprintkメッセージを出力しません。

緊急カーネルメッセージをコンソール(または特定のユーザーまたはtty)に出力するには、syslogを変更する必要があります。

多くのsyslogデーモンがあります。使用するデーモンを制御せず、rootでない場合、運が悪いことになります。使用するものを制御する場合、syslog-ngは非常に優れており、これを行う方法の例がマニュアルに記載されています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top