【发布时间】:2016-01-06 11:38:25
【问题描述】:
每当我将任何 printk 语句放入 if-else 块中时,它都会使 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通话有关。您可能在其他地方遇到了一些访问冲突 (UB),当您调用printk时就会出现这种情况。 -
是的,我不确定是否会发生崩溃,因为我正在使用 putty 将 RDP 用于远程服务器。因此,每当我在某个 if-else 块(不是全部)中使用 printk 时,它在我执行 insmod 时根本不会响应。另外,在 printk 中我只是打印一个字符串,我什至没有尝试打印变量的值。所以我认为这与 printk 语句有关
-
内核崩溃通常会在控制台上打印确切的错误和堆栈跟踪。
-
你确定
device不能是NULL?没有内核堆栈跟踪很难说。 -
所有 3 个 printk 你看到问题了吗?或者只有这 3 个中的任何一个,你会看到这个问题?尝试缩小导致陈述的范围...
标签: c linux linux-kernel