内核模块打印语句导致内核崩溃

时间:2016-01-06 11:38:26

标签: c linux linux-kernel

每当我在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

我想知道这种行为的可能原因,我怎么能删除这些东西。

1 个答案:

答案 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()