web-dev-qa-db-ja.com

dmesgはprintkステートメントを表示していません

Procエントリを作成しようとしています。私のinit_module関数は次のとおりです

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メッセージのいずれも表示しません。

ここで何が問題なのか教えてもらえますか?

12
Kumar Gaurav

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*/

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

17
Wayne

echo "7" > /proc/sys/kernel/printkを使用した後でも、printkは機能しませんでした。

https://lwn.net/Articles/487437/pr_** api(pr_infopr_emerg)と呼ばれるprintkの修正バージョンまたはより拡張されたバージョンについて説明しています。

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

0
Vijay Kumar