dmesg
отображает то, что находится в буфере ядра, тогда logger
как для syslogd
. Я думаю, что если вы хотите распечатать вещи в буфере ядра, вам нужно будет создать драйвер, который использует printk()
функцию ядра. Если вы просто хотите это сделать /var/log/messages
, то при «нормальной» настройке, я думаю, то, что вы сделали, logger
уже в порядке.
Самый простой пример драйвера с printk()
:
Привет:
#include <linux/module.h>
#include <linux/kernel.h>
int init_module(void)
{
printk(KERN_INFO "Hello world\n");
return 0;
}
void cleanup_module(void)
{
printk(KERN_INFO "Goodbye world\n");
}
Makefile:
obj-m += hello.o
all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
Затем:
$ make
$ sudo insmod hello.ko
$ dmesg | tail -n1
[7089996.746366] Hello world
http://tldp.org/LDP/lkmpg/2.6/html/lkmpg.html#AEN121 для получения дополнительной информации ...
make -C ...
файлом Makefile вместо вкладки, поэтому копирование содержимого Makefile выше не работает - подробнее здесь . Кажется, я не могу добавить это в редактирование ... Спасибо, кстати, отличный ответ.В качестве пользователя root вы можете написать
/dev/kmsg
для печати в буфер сообщений ядра:Я проверил это на своем сервере и на встроенном устройстве Linux, и оно работает на обоих, поэтому я просто собираюсь предположить, что оно работает практически везде.
источник
echo Some message | sudo tee /dev/kmesg
полномочий root.kmsg
нет,kmesg
но я также путаю с тем,dmesg
что имеет е!Основываясь на модуле Кайла выше:
Чтобы сделать printk из пространства пользователя:
источник
Ответ @ Calandoa больше не работает для Ядра +3.10. Сочетал его код и пример кода, который я нашел здесь . Затем улучшилось качество кода ...
Код сохранен в printk_user.c
Сделать с помощью этого Makefile
источник
Основываясь на ответе Кайла, вот краткое руководство, показывающее, как это сделать.
источник
Думаю, я бы пошел вперед и включил полный пример того, что люди могут просто скомпилировать и запустить для тех, кто не настолько квалифицирован с C, основываясь на ответе @BuvinJ
Для запуска сохраните вышеприведенное как kmsg.c и gcc kmsg.c -o kmsg; sudo ./kmsg "строка, которую вы хотите добавить в / dev / kmsg"
источник
Я просто хотел, чтобы в демоне, написанном кем-то другим в кросс-совместимом ядре, было несколько быстрых сообщений отладки. Я столкнулся с ошибкой компиляции, пытаясь использовать
printk
, поскольку<linux/module.h>
не может быть включен. Вместо того, чтобы бороться с этим чрезмерно (чтобы сделать это правильно), я обманул и использовал следующий ленивый, но функциональный 5-минутный обходной путь:источник