カーネルモジュール:コンソール出力を取得するにはどうすればよいですか?
-
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は非常に優れており、これを行う方法の例がマニュアルに記載されています。