2013-09-04 5 views
7

procエントリを作成しようとしています。 私はinit_module関数は、以下のdmesgがprintk文を表示していません

int init_module() 
{ 
printk(KERN_INFO "proc2:Module Loaded\n"); 
proc_entry=proc_create_data(proc_name,0644,NULL,&fops,NULL); 
if(proc_entry==NULL) 
{ 
    printk(KERN_INFO "proc2:Error registering proc entry"); 
} 
else 
{ 
    printk(KERN_INFO "proc2:Proc Entry Created"); 
} 
return 0; 
} 

以下のようなプログラムの

void cleanup_module() 
{ 
printk(KERN_INFO "proc2:module unloaded"); 
remove_proc_entry(proc_name,proc_entry); 
} 

残りは変数の定義とコールバック関数を含むクリーンアップ方法です。

このプログラムをコンパイルすると、コンパイルがうまくいきます。 insmodを使用している場合は、私に返信しません。 lsmodは、私のモジュールとそのモジュールが使用しているものをリストしています(何が分かっていないか)。 dmesgには上記のprintkメッセージは表示されません。

ここで何が間違っているのか教えていただけますか?

答えて

15

すべてのコンソールログレベルを有効にするには、echo "7" > /proc/sys/kernel/printkを試してください。

番号は以下に対応している:

#define KERN_EMERG "<0>" /* system is unusable*/ 
#define KERN_ALERT "<1>" /* action must be taken immediately*/ 
#define KERN_CRIT "<2>" /* critical conditions*/ 
#define KERN_ERR "<3>" /* error conditions*/ 
#define KERN_WARNING "<4>" /* warning conditions*/ 
#define KERN_NOTICE "<5>" /* normal but significant condition*/ 
#define KERN_INFO "<6>" /* informational*/ 
#define KERN_DEBUG "<7>" /* debug-level messages*/ 

デフォルト数は、コンソールのみ少なくともKERN_WARNINGでメッセージを表示することを可能にする、4です。 そのため、ログはKERN_INFOレベルには表示されません。

+0

驚くべきことに、KERN_INFOメッセージだけでなく、 echo "7">/proc/sys/kernel/printk –

+1

"7"はKERN_DEBUGからKERN_EMERGまでのすべての種類のログを表示することができるので、KERN_INFOに特有のものではありません。 – Wayne

+1

私は、ユーザーがrootの場合にのみ成功すると付け加えたいと思います。そうでない場合、リダイレクトは失敗します。リダイレクションは '|それを動作させるためにsudo tee ' – russoue

0

echo "7" > /proc/sys/kernel/printkを使用しても、printkは私のために働いていません。

https://lwn.net/Articles/487437/pr_**のAPI(pr_infopr_emerg)と呼ばれるprintkの修正以上の拡張バージョンについて述べています。

printkの代わりにpr_infoを使用しましたが、私の問題を解決しました。