Jeg skriver en enhetsdriver som skriver ut feilmeldinger i ring buffer dmesg-utdata.
Jeg ønsker å se utskriften av dmesg
etter hvert som den endres.
Hvordan kan jeg gjøre dette?
du kan ikke overvåke utdataene fra dmesg
direkte.
Det er imidlertid stor sjanse for at modulen din ikke skriver direkte inn i ringbufferen til dmesg, men i stedet bruker kjernens loggfunksjoner (som deretter vises av dmesg
). Hvis syslog
har fornuftige innstillinger (f.eks. standard), vil disse meldingene sannsynligvis også vises i loggfilen kern.log
.
så du kan gjøre noe sånt som
tail -f /var/log/kern.log
Du bruker dmesg
til å hente loggmeldinger fra kjernen.
Kjernen selv logger i en ringbuffer, dvs. bare i minnet.
Det eneste dmesg
gjør er å sende ut innholdet i denne ringbufferen.
Hvis du kjører dmesg -c
, vil den også slette ringbufferen etterpå.
Derfor kan du gjøre noe sånt som while true; do dmesg -c; sleep 1; done
for å få noe som tilsvarer en dmesg|tail
som ikke fungerer. Men dette sletter ringbufferen og krever derfor root-rettigheter.
Den andre måten er å bruke filen /proc/kmsg
som gir innsyn i ringbufferen. Du kan gjøre tail -f /proc/kmsg
, men dette er bare tillatt for én prosess, og det er vanligvis loggingsdemonen. - Dens oppgave er å lese meldingene og skrive dem til virkelige filer (vanligvis i /var/log) der de kan leses. Den kan konfigureres til å sende alle meldinger til én enkelt fil, eller til å sende ulike deler til ulike filer. (Men konfigurasjonen avhenger av loggingsdemonen i systemet ditt).
Ta derfor en titt på /var/log
hvis det finnes en fil som passer dine behov, og konfigurer loggingsdemonen ellers.