Сообщения printk не отображаются в журнале dmesg
Я разрабатываю простой драйвер для удовольствия и пытаюсь отладить его printk
Сообщения. Кажется, что dmesg
не отображается последний printk
сообщение, и единственный способ показать последнее сообщение - это сделать printk
который в свою очередь также проглатывается dmesg
,
Несколько примеров для пояснения: в функции init моего модуля я печатаю следующее утверждение:
printk(KERN_INFO "%s loaded with major: %u, minor: 0", ...);
После insmod
В первый раз после загрузки я вижу сообщение "испорченное ядро" с dmesg
Однако я не вижу сообщение, которое я напечатал.
Затем я запускаю следующую команду:
cat /dev/mymodule
который вызывает мой open
функция, которая печатает:
printk(KERN_DEBUG "%s opened", ...);
а затем вызывает мой read
функция, которая печатает:
printk(KERN_DEBUG "%s reading", current->comm);
а потом идет спать. После запуска dmesg
(в то время как функция чтения спит), я могу внезапно увидеть сообщение инициализации моего модуля, а также я могу увидеть сообщение "кошка открыта", однако сообщение "чтение кота" отсутствует.
Завершение кота с помощью ctrl+c вызывает два отпечатка: "сон прерван", а затем "кот отпущен". Бег dmesg
показывает сообщение "сон прерван", но сообщение "кот освобожден" отсутствует и т. д.
Кто-нибудь знает, в чем может быть проблема?
0 ответов
Вы должны добавить \n в конце каждого сообщения printk, чтобы не пропустить ни одной записи в dmesg. Это решит вашу проблему.