Сообщения 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. Это решит вашу проблему.

Другие вопросы по тегам