每当我在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
。
我想知道这种行为的可能原因,我怎么能删除这些东西。
答案 0 :(得分:0)
在某些情况下,不应该调用printk参见
http://lkml.iu.edu/hypermail/linux/kernel/0606.1/2198.html
和
printk inside an interrupt handler , is it really that bad?
因此,如果您的整个代码都是这种情况,请避免printK()
尝试使用其他备用选项dev_dbg()
或trace_printk()