2012-06-30 3 views
0

моя проблема в том, что я пытаюсь построить драйвер в ядре. Я решил проверить свой код с помощью простой программы Hello World. Код выглядит следующим образом:Printk не печатает, несмотря на правильно установленный loglevel

#include <linux/kernel.h> 
#include <linux/err.h> 
#include <linux/module.h> 
#include <linux/init.h> 
#include <linux/printk.h> 

int __init my_init(void) 
{ 
    printk(KERN_ALERT "Hello world\n"); 
    return 0; 
} 

device_initcall(my_init); 
//subsys_initcall(my_init); 

Кроме того, кошка/Proc/SYS/ядро ​​/ printk показывает из файла .config, я считаю "CONFIG_DEFAULT_MESSAGE_LOGLEVEL = 4"

творю файл с использованием obj-y + = в Makefile. Я нахожу, что «make» может построить модуль, но ни один вывод printk не появляется в dmesg или под/var/log/after boot.

Мне интересно, если драйвер вообще не встроен в ядро. Есть ли способ проверить это?

Спасибо, D.

ответ

1

Вы можете использовать

lsmod command 
    OR 
cat /proc/modules 

команду, чтобы проверить, если загружен драйвер.

Глядя на ваш код, я чувствую, что __init следует заменить module_init или __initcall. Эти сигнатуры ядра гарантируют, что модуль init вызывается во время ввода.

Вы можете протестировать свой драйвер с помощью insmod и проверить, отправляет ли он сообщение, вызвав dmesg.

1

Я решил проблему. Я узнал, что заявления printk действительно печатались на консоли, но были уничтожены из dmesg из-за большого количества других сообщений, печатаемых. Я увеличил размер dmesg, и теперь он хранит инструкции printk.

 Смежные вопросы

  • Нет связанных вопросов^_^