dmesg
wyświetla zawartość bufora jądra, podczas gdy logger
jest dla syslogd
. Myślę, że jeśli chcesz wydrukować rzeczy w buforze jądra, musisz stworzyć sterownik, który używa printk()
funkcji jądra. Jeśli chcesz to tylko włączyć /var/log/messages
, to przy „normalnej” konfiguracji myślę, że to, co zrobiłeś, logger
jest już w porządku.
Najbardziej podstawowym przykładem sterownika z printk()
:
cześć, c:
#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
Następnie:
$ make
$ sudo insmod hello.ko
$ dmesg | tail -n1
[7089996.746366] Hello world
http://tldp.org/LDP/lkmpg/2.6/html/lkmpg.html#AEN121, aby uzyskać więcej ...
make -C ...
Makefile zamiast Tab, więc kopiowanie powyższej zawartości Makefile nie działa - więcej tutaj . Wygląda na to, że nie jestem w stanie dodać tego do edycji ... Nawiasem mówiąc, świetna odpowiedź.Możesz jako root napisać do,
/dev/kmsg
aby wydrukować w buforze komunikatów jądra:Przetestowałem to na moim serwerze i na wbudowanym urządzeniu z Linuksem, i działa na obu, więc zakładam, że działa prawie wszędzie.
źródło
echo Some message | sudo tee /dev/kmesg
jako użytkownik inny niż root.kmsg
nie jest,kmesg
ale ja też mylę z tym,dmesg
co ma e!Na podstawie powyższego modułu Kyle'a:
Aby wykonać printk z przestrzeni użytkownika:
źródło
@ Odpowiedź Calandoa nie działa już dla jądra +3.10. Połączyłem jego kod i przykładowy kod, który tu znalazłem . Następnie poprawiono jakość kodu ...
Kod zapisany w printk_user.c
Make za pomocą tego Makefile
źródło
Na podstawie odpowiedzi Kyle'a, oto krótki samouczek pokazujący, jak to zrobić.
źródło
Pomyślałem, że pójdę naprzód i dołączę pełny przykład czegoś, co ludzie mogą po prostu skompilować i uruchomić dla tych, którzy nie są tak biegli w C na podstawie odpowiedzi @BuvinJ
Aby uruchomić, zapisz powyższe jako kmsg.c i gcc kmsg.c -o kmsg; sudo ./kmsg "ciąg, który chcesz dodać do / dev / kmsg"
źródło
Chciałem tylko kilka szybkich komunikatów debugujących w demonie napisanych przez kogoś innego w jądrze zgodnym z konfiguracją krzyżową. Wystąpił błąd kompilacji przy próbie użycia
printk
, ponieważ<linux/module.h>
nie mógł zostać uwzględniony. Zamiast tego walczyć z tym nadmiernie (aby zrobić to we właściwy sposób) oszukałem i zastosowałem następujące leniwe, ale funkcjonalne 5-minutowe obejście:źródło