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メッセージのいずれも表示しません。
ここで何が問題なのか教えてもらえますか?
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
レベルでログインを表示できません。
echo "7" > /proc/sys/kernel/printk
を使用した後でも、printk
は機能しませんでした。
https://lwn.net/Articles/487437/pr_**
api(pr_info
、pr_emerg
)と呼ばれるprintk
の修正バージョンまたはより拡張されたバージョンについて説明しています。
printk
の代わりにpr_info
を使用しましたが、問題は解決しました。