dmesg не показывает оператор printk
Я пытаюсь создать запись Proc. Моя функция init_module, как показано ниже
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.
Вы можете сказать мне, что здесь не так?
3 ответа
Пытаться 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
уровень.
Даже после использования echo "7" > /proc/sys/kernel/printk
, printk
не работал для меня.
https://lwn.net/Articles/487437/ говорит об модифицированной или более расширенной версии printk
называется pr_**
API (pr_info
,pr_emerg
).
я использовал pr_info
вместо printk
и это решило мою проблему.
В дополнении к Ответу Уэйн , то исходный код ядра говорит
Этот макрос расширяется до dynamic_pr_debug(), если установлен CONFIG_DYNAMIC_DEBUG. В противном случае, если определена DEBUG, она эквивалентна printk с уровнем логирования KERN_DEBUG. Если DEBUG не определен, он ничего не делает.
Это означает, что вам нужно будет определить
DEBUG
или используйте динамическую отладку . Мне удалось успешно загрузить модуль с помощью debug printk через
$ sudo insmod module-name.ko dyndbg