Comment lire le tampon circulaire dans l'espace noyau Linux?
Je suis en train d'écrire un Linux caractère pilote qui peut imprimer les journaux du système dans l'espace utilisateur. Tout comme la commande 'dmesg' ne.
J'ai appris que tous les journaux que nous imprimons avec "printk" sera envoyée à un espace nommé anneau de la mémoire tampon. Si j'ai des questions:
- Est l'anneau de la mémoire tampon à l'intérieur de l'espace du noyau?
- Si oui, comment puis-je lire l'anneau de la mémoire tampon à l'intérieur de l'espace du noyau? (J'ai essayé de lire le code source de la commande dmesg.c. Mais il n'a pas d'aide).
source d'informationauteur Yingyi Xu | 2012-03-02
Vous devez vous connecter pour publier un commentaire.
Ce que vous cherchez est
/proc/kmsg
. C'est le noyau de l'anneau de la mémoire tampon!Oui, c'est à l'intérieur de l'espace du noyau. Tout processus d'essayer de lire, elle devrait avoir les privilèges de superutilisateur pour le lire!
Comment lire l'anneau de la mémoire tampon? Voici une belle illustration de l'IBM Developerworks
dmesg
serait votre première station! Comment dmesg accomplir sa tâche? Par un appel àsyslog()
! Comment syslog faire son travail? Grâce à l'interface des appels système qui à son tour appeldo_syslog()
.do_syslog()
la finition agir comme cette.Voici quelques ressources pour vous obtenir plus d'informations sur
/proc/kmsg
noyau et la journalisation en général-http://www.makelinux.net/ldd3/chp-4-sect-2
http://www.ibm.com/developerworks/linux/library/l-kernel-logging-apis/index.html
http://oguzhanozmen.blogspot.in/2008/09/kernel-log-buffering-printk-syslog-ng.html
C'est-à-Pavan est très bonne réponse (m'a beaucoup appris):
Différentes distro peut rediriger la sortie de /proc/kmsg physique des fichiers journaux ou des périphériques virtuels (/dev/xxx) ils aiment. Mais "/proc/kmsg" est la source originale de la journalisation du noyau, parce que le noyau de mettre en œuvre son anneau de la mémoire tampon de l'opération à l'intérieur de fs/proc/kmsg.c:
Alors, comment vous voyez la sortie est ceci:
sudo tail-f /proc/kmsg
Mais vous ne pouvez voir tous les messages générés APRÈS avoir émis cette commande tous les messages précédents dans l'anneau de la mémoire tampon ne sera pas imprimé. Et donc de voir le physique de fichier de sortie, vous pouvez le rechercher à l'utilisateur de "/proc/kmsg":
sudo lsof |grep proc.kmsg
Et ma machine a indiqué ceci:
C'est maintenant pid 1743, nous allons voir les fichiers fd ouvert par 1743:
sudo ls -al /proc/1743/fd
Et donc là vous allez, pid 1743 est rsyslogd, et il permet de rediriger la sortie de /proc/kmsg de fichiers comme /var/log/syslog et /var/log/kern.journal etc.