dmesg没有显示printk语句

时间:2013-09-04 06:50:21

标签: linux-kernel procfs

我正在尝试创建一个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消息。

你能告诉我这里有什么不对吗?

3 个答案:

答案 0 :(得分:17)

尝试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级别的原因。

答案 1 :(得分:0)

即使使用echo "7" > /proc/sys/kernel/printk后,printk也无效。

https://lwn.net/Articles/487437/说明了printk pr_** api(pr_infopr_emerg)的修改版或更高版本的pr_info

我使用printk代替const mapDispatchToProps = (dispatch) => { return { buttonClick: (todoText) => dispatch(addTodo(todoText)) } } ,它解决了我的问题。

答案 2 :(得分:0)

除了 Wayne's Answerkernel source 还说

<块引用>

如果 CONFIG_DYNAMIC_DEBUG 为 放。否则,如果定义了 DEBUG,它就相当于一个带有 KERN_DEBUG 日志级别。如果未定义 DEBUG,则它什么也不做。

这意味着您需要定义 DEBUG 或使用 dynamic debug。 我能够通过

使用 debug printk 成功加载模块
$ sudo insmod module-name.ko dyndbg