我正在尝试创建一个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消息。
你能告诉我这里出了什么问题吗?
发布于 2013-09-04 15:10:31
尝试使用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级别的日志。
发布于 2017-05-02 22:08:20
即使在使用echo "7" > /proc/sys/kernel/printk之后,printk对我来说也不起作用。
https://lwn.net/Articles/487437/谈到了printk的修改或更多增强版本,称为pr_** api (pr_info,pr_emerg)。
我用pr_info代替了printk,它解决了我的问题。
发布于 2021-05-12 03:52:56
除了Wayne's Answer之外,kernel source还表示
如果设置了CONFIG_DYNAMIC_DEBUG,则
此宏将扩展为dynamic_pr_debug()。否则,如果定义了DEBUG,它就等同于具有KERN_DEBUG日志级别的printk。如果未定义DEBUG,则不执行任何操作。
这意味着您需要定义DEBUG或使用dynamic debug。我可以通过以下方式使用debug printk成功加载模块
$ sudo insmod module-name.ko dyndbghttps://stackoverflow.com/questions/18607184
复制相似问题