dmesg
affiche ce qui est dans le tampon du noyau, alors que logger
c'est pour syslogd
. Je pense que si vous souhaitez imprimer des éléments dans la mémoire tampon du noyau, vous devez créer un pilote qui utilise la printk()
fonction du noyau. Si vous le voulez /var/log/messages
, alors avec une configuration "normale", je pense que ce que vous avez fait avec logger
est déjà bien.
L'exemple le plus fondamental d'un pilote avec printk()
serait:
Bonjour 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
Ensuite:
$ make
$ sudo insmod hello.ko
$ dmesg | tail -n1
[7089996.746366] Hello world
http://tldp.org/LDP/lkmpg/2.6/html/lkmpg.html#AEN121 pour plus ...
make -C ...
dans le Makefile au lieu d'un onglet, donc copier le contenu ci-dessus du Makefile ne fonctionne pas - plus ici . Il semble que je ne puisse pas ajouter ceci dans une édition ... Merci au fait, bonne réponse.Vous pouvez, en tant que root, écrire sur
/dev/kmsg
pour imprimer dans le tampon de messages du noyau:J'ai testé cela sur mon serveur et un périphérique Linux intégré, et cela fonctionne sur les deux, donc je vais simplement supposer que cela fonctionne un peu partout.
la source
echo Some message | sudo tee /dev/kmesg
tant que non-root.kmsg
n'est paskmesg
mais je confonds aussi avecdmesg
qui a le e!Basé sur le module de Kyle ci-dessus:
Pour faire un printk à partir de l'espace utilisateur:
la source
La réponse de @ Calandoa ne fonctionne plus pour le noyau +3.10. Combiné son code, et l'exemple de code que j'ai trouvé ici . Puis amélioration de la qualité du code ...
Code enregistré dans printk_user.c
Faire en utilisant ce Makefile
la source
Sur la base de la réponse de Kyle, voici un tutoriel rapide montrant comment faire exactement cela.
la source
Je pensais pouvoir inclure un exemple complet de quelque chose que les gens peuvent simplement compiler et lancer pour ceux qui ne sont pas aussi doués avec C que la réponse de @BuvinJ
Pour exécuter, sauvegardez ce qui précède sous les noms kmsg.c et gcc kmsg.c -o kmsg; sudo ./kmsg "chaîne à ajouter à / dev / kmsg"
la source
Je voulais juste quelques messages de débogage rapides dans un démon écrit par quelqu'un d'autre dans un noyau compatible. Je suis tombé sur une erreur de compilation en essayant d'utiliser
printk
, car<linux/module.h>
il ne pouvait pas être inclus. Plutôt que de me battre avec cela de façon excessive (pour faire ceci correctement), j'ai triché et utilisé la solution de contournement paresseuse, mais fonctionnelle, de 5 minutes suivante:la source