我正在尝试创建一个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消息。
答案 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_info
,pr_emerg
)的修改版或更高版本的pr_info
。
我使用printk
代替const mapDispatchToProps = (dispatch) => {
return {
buttonClick: (todoText) => dispatch(addTodo(todoText))
}
}
,它解决了我的问题。
答案 2 :(得分:0)
除了 Wayne's Answer,kernel source 还说
<块引用>如果 CONFIG_DYNAMIC_DEBUG 为 放。否则,如果定义了 DEBUG,它就相当于一个带有 KERN_DEBUG 日志级别。如果未定义 DEBUG,则它什么也不做。
这意味着您需要定义 DEBUG
或使用 dynamic debug。
我能够通过
$ sudo insmod module-name.ko dyndbg