17

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 メッセージは表示されません。

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

4

3 に答える 3

25

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_WARNINGKERN_INFOそのため、ログインレベルが表示されません。

于 2013-09-04T07:10:31.343 に答える
1

使用した後でもecho "7" > /proc/sys/kernel/printkprintkうまくいきませんでした。

https://lwn.net/Articles/487437/printkは、呼び出されたpr_**api の変更または強化されたバージョンについて述べています ( pr_infopr_emerg)。

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

于 2017-05-02T14:08:19.907 に答える