每当我在if-else块中放入任何printk语句时,它只会破坏Linux中的内核。
下面给出了一个示例代码:
if (device-> Some condition) {
s = 0;
e = 0;
printk(KERN_INFO "I am 0 and 0 part n");
printk(KERN_ALERT "KERN_INFO Successfully registered module n");
} else {
s = 1;
e = 2;
printk(KERN_INFO "I am in 1 and 1 part n");
}
当我完成上面的代码时,它会被成功编译。但在insmod
期间,内核停止响应并最终崩溃。相反,如果我注释掉那些printk
语句,那么我可以很容易地执行insmod
。
我想知道这种行为的可能原因,以及我如何才能去除这些东西。
有些情况下不应该调用printk,请参阅
http://lkml.iu.edu/hypermail/linux/kernel/0606.1/2198.html
和
printk在一个中断处理程序中,它真的那么糟糕吗?
因此,如果您的整个代码都在这种情况下,那么请避免使用printK()
,尝试使用其他备选选项dev_dbg()
或trace_printk()