2013-09-04 2 views
7

Я пытаюсь создать запись proc. Моя init_module функция, как показано нижеdmesg не показывает инструкцию printk

int init_module() 
{ 
printk(KERN_INFO "proc2:Module Loaded\n"); 
proc_entry=proc_create_data(proc_name,0644,NULL,&fops,NULL); 
if(proc_entry==NULL) 
{ 
    printk(KERN_INFO "proc2:Error registering proc entry"); 
} 
else 
{ 
    printk(KERN_INFO "proc2:Proc Entry Created"); 
} 
return 0; 
} 

Ниже приводится метод очистки

void cleanup_module() 
{ 
printk(KERN_INFO "proc2:module unloaded"); 
remove_proc_entry(proc_name,proc_entry); 
} 

остальные программы включают в себя функции определения переменной и обратного вызова.

Когда я скомпилирую эту программу, она хорошо компилируется. когда я использую insmod не отвечает. lsmod перечисляет мой модуль и показывает, используемые одним (не знаю, что). dmesg не отображается ни одного из вышеуказанных сообщений printk.

Не могли бы вы рассказать мне, что здесь не так?

ответ

15

Попробуйте echo "7" > /proc/sys/kernel/printk, чтобы включить все уровни журнала консоли.

Числа, соответствующие ниже:

#define KERN_EMERG "<0>" /* system is unusable*/ 
#define KERN_ALERT "<1>" /* action must be taken immediately*/ 
#define KERN_CRIT "<2>" /* critical conditions*/ 
#define KERN_ERR "<3>" /* error conditions*/ 
#define KERN_WARNING "<4>" /* warning conditions*/ 
#define KERN_NOTICE "<5>" /* normal but significant condition*/ 
#define KERN_INFO "<6>" /* informational*/ 
#define KERN_DEBUG "<7>" /* debug-level messages*/ 

номер по умолчанию 4, что позволяет консоли показывать только сообщения, по крайней мере в KERN_WARNING. Вот почему вы не можете видеть вход в KERN_INFO.

+0

удивительно не только сообщение KERN_INFO. но весь модуль начал работать с использованием эха «7»>/proc/sys/kernel/printk –

+1

Поскольку «7» позволяет показывать все виды журналов из KERN_DEBUG в KERN_EMERG, не только конкретный KERN_INFO. – Wayne

+1

Я просто хочу добавить, что он преуспевает только в том случае, если пользователь является root. Перенаправление не получилось бы иначе. Перенаправление можно заменить на '| sudo tee', чтобы заставить его работать. – russoue

0

Даже после использования echo "7" > /proc/sys/kernel/printk, printk не работал для меня.

https://lwn.net/Articles/487437/ говорит о модифицирована или более расширенной версии printk называется pr_** API-интерфейсов (pr_info, pr_emerg).

Я использовал pr_info вместо printk, и он решил мою проблему.

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