dmesg
zeigt an, was sich im Kernelpuffer befindet, wohingegen logger
für syslogd
. Ich denke, wenn Sie Dinge in den Kernel-Puffer drucken möchten, müssen Sie einen Treiber erstellen, der die printk()
Kernel-Funktion verwendet. Wenn Sie es nur wollen /var/log/messages
, dann mit einem "normalen" Setup denke ich, was Sie getan haben, logger
ist bereits in Ordnung.
Das grundlegendste Beispiel für einen Fahrer mit printk()
wäre:
Hallo 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
Dann:
$ make
$ sudo insmod hello.ko
$ dmesg | tail -n1
[7089996.746366] Hello world
http://tldp.org/LDP/lkmpg/2.6/html/lkmpg.html#AEN121 für mehr ...
make -C ...
im Makefile anstelle eines Tabulators Leerzeichen vor dem eingefügt haben . Daher funktioniert das Kopieren der obigen Inhalte des Makefiles nicht - mehr hier . Ich scheine nicht in der Lage zu sein, dies in einer Bearbeitung hinzuzufügen ... Danke übrigens, tolle Antwort.Sie können als Root schreiben
/dev/kmsg
, um in den Kernel-Nachrichtenpuffer zu drucken:Ich habe dies auf meinem Server und einem eingebetteten Linux-Gerät getestet und es funktioniert auf beiden, also gehe ich davon aus, dass es so ziemlich überall funktioniert.
quelle
echo Some message | sudo tee /dev/kmesg
als Nicht-Root-Benutzer zu arbeiten.kmsg
nicht,kmesg
aber ich verwechsle auch mit dem,dmesg
was das e hat!Basierend auf Kyles Modul oben:
So drucken Sie aus dem Benutzerbereich:
quelle
@ Calandoas Antwort funktioniert nicht mehr für Kernel +3.10. Kombiniert seinen Code und den Beispielcode, den ich hier gefunden habe . Dann verbesserte sich die Codequalität ...
In printk_user.c gespeicherter Code
Machen Sie mit diesem Makefile
quelle
Basierend auf Kyles Antwort finden Sie hier ein kurzes Tutorial, das zeigt, wie Sie genau das tun können.
quelle
Ich habe mir vorgenommen, ein vollständiges Beispiel für etwas beizufügen, das die Leute nur für diejenigen kompilieren und ausführen können, die auf der Grundlage von @BuvinJs Antwort nicht so gut mit C umgehen können
Um es auszuführen, speichere es als kmsg.c und gcc kmsg.c -o kmsg; sudo ./kmsg "String, den du zu / dev / kmsg hinzufügen willst"
quelle
Ich wollte nur ein paar schnelle Debugging-Meldungen in einem Daemon, der von jemand anderem in einem cross-konformen Kernel geschrieben wurde. Ich bin auf einen Kompilierungsfehler gestoßen, der versucht zu verwenden
printk
, da dieser<linux/module.h>
nicht enthalten sein konnte. Statt übermäßig damit umzugehen (um das richtig zu machen), habe ich betrogen und die folgende faule, aber funktionierende 5-minütige Problemumgehung verwendet:quelle