Всякий раз, когда я помещаю какие-либо утверждения 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
.
Я хотел бы знать вероятную причину такого поведения и как я могу удалить такие вещи.
I d oubt авария имеет какое-либо отношение к вызовам 'printk'. Вероятно, у вас есть некоторые нарушения доступа (* UB *) в другом месте, и это проявляется, когда вы вызываете 'printk'. –
Да, я не уверен в аварии, так как я использую шпатлевку для RDP на удаленном сервере. Поэтому всякий раз, когда я использую printk внутри некоторого блока if-else (НЕ ВСЕ), он просто не отвечает, когда я делаю insmod. Кроме того, в printk я просто печатаю строку, и я даже не пытаюсь напечатать значение переменной. Поэтому я думаю, что это связано с утверждениями printk. – user3243499
Сбой ядра обычно печатает точную ошибку и трассировку стека на консоли. – stark