Я написал модуль hello word, который выполняет printk при загрузке на уровне ALERT и еще один printk при освобождении на уровне INFO:
#include <linux/module.h>
#include <linux/kernel.h>
MODULE_LICENSE("GPL");
static int init_hello(void)
{
printk(KERN_ALERT "init called in hello\n");
return 0;
}
static void cleanup_hello(void)
{
printk(KERN_INFO "cleanup called in hello\n");
}
module_init(init_hello);
module_exit(cleanup_hello);
Затем я попытался отфильтровать сообщения ядра по его уровню, я сделал это с помощью dmesg -l, но я хочу видеть сообщения по мере их появления, поэтому я использовал
tail -f /var/log/kern.log
С помощью этой команды я могу видеть сообщения, но как мне отфильтровать сообщения по уровню?
Я использую Ubuntu 14.04 с ядром 3.16.4.
Затем я попытался вывести сообщения на консоль с помощью:
echo 7 7 7 7 > /proc/sys/kernel/printk
Но он не выводит никаких сообщений на консоль. Я пробовал установить уровень консоли с помощью dmesg -n alert, но это тоже не работает, поэтому я не уверен, что делает установка уровня консоли с помощью dmesg или /proc/sys/kernel/printk.
Как можно эффективно использовать эти уровни?
Спасибо за вашу помощь
решение1
В Ubuntu 16.04, util-linux 2.27.1, вы можете сделать:
dmesg --level err,warn --raw -w
где:
-w
следит за сообщениями по мере их поступления--level
ограничивает, какие уровни будут отображаться--raw
показывает уровень в начале сообщения, например, как<3>