2013-05-09 9 views
8

My OS Ubuntu 12.04。私はこのカーネルモジュールを書いて、insmodとrmmodコマンドを使用しますが、/ var/logメッセージには何もありません。どうすればこの問題を解決できますか?printk()は/ var/log/messagesには表示されません。

/* 
* hello-1.c - The simplest kernel module. 
*/ 
#include <linux/module.h> /* Needed by all modules */ 
#include <linux/kernel.h> /* Needed for KERN_INFO */ 

int init_module(void) 
{ 
    printk(KERN_INFO "Hello world 1.\n"); 

    /* 
    * A non 0 return means init_module failed; module can't be loaded. 
    */ 
    return 0; 
} 

void cleanup_module(void) 
{ 
    printk(KERN_INFO "Goodbye world 1.\n"); 
} 
+2

KERN_INFOの代わりにKERN_ALERTを試して、ログレベルが高く設定されているかどうかを確認してください。ログレベルを変更することもできます。 –

+0

ログレベルを変更するにはどうすればよいですか? – woody

+1

klogd -c n、nはレベルです。それを設定する他の方法もあります。 –

答えて

1

これは私が正しいだ場合の/ var/log/messagesににメッセージバッファをログに記録し、カーネルのリングからのコピーのprintkメッセージを/プロセスであるため、のsyslogデーモンプロセスは、実行されているかどうかを確認します。 printkメッセージはdmesgユーティリティ/コマンドを使って見ることができます。メッセージは/ var/log/messagesにあります。正しいログレベルが設定されている場合、printkメッセージはすぐにコンソールに表示され、dmesgを使う必要はなく、/ var/log/messagesをチェックインする必要はありません。 printkデバッグメッセージは、/var/log/syslogの一部でもかまいません。

0

最近のLinuxディストリビューションでは、もはやrsyslog(または他のsyslogデーモン)を使用しません。彼らはsystemdの一部であるjournaldに依存しているので、/ var/log/messagesファイルがないので、システムログを読むためにはjournalctlコマンドを使用する必要があります。

0

まず、あなたは、いくつかのメッセージを出力し、カーネルモジュールを、書いたので、このコマンドに

lsmod | grep "hello-1" //hello-1 is the name of your module 

を使用することによって、あなたのモジュールが正常にロードされているかどうかということを確認する必要があります。カーネルとそのモジュールからのメッセージは/ var/log/syslogにあり、dmesgコマンドを使ってこれらのメッセージを見ることができます。 あなたのモジュールが "Hello World 1."を出力するので、あなたのモジュールからのメッセージを見るには、次のコマンドを使うべきです。

dmesg | grep "Hello World 1." 
0

これは/etc/syslog.conf、* .info ...行で探します。これらはprintkを介して記録されるものを制御するようです。

*.=info;*.=notice;*.=warn;\ 
auth,authpriv.none;\ 
cron,daemon.none;\ 
mail,news.none   -/var/log/messages 

は、私が発見したは、/ proc/sys/kernel /のprintkだけは本当にコンソールログレベル、ファイルにないのロギングを制御しました。そして、私はsyslogもチェックしていると思います;)私たちはまったく同じ問題を抱えていました.KERN_INFOはログファイルに記録されず、これが修正されました。 hth

関連する問題