Da dove viene l'uscita di stampa in kernel andare?
-
12-10-2019 - |
Domanda
Io sono il debug di un driver per Linux (in particolare server di Ubuntu 9.04), e ci sono diverse dichiarazioni printf nel codice.
Dove posso visualizzare l'output di queste affermazioni?
Edit1: Quello che sto cercando di fare è scrivere al kernel utilizzando il file system proc. Il codice di stampa è
static int proc_fractel_config_write(struct file *file, const char *argbuf, unsigned long count, void *data)
{
printk(KERN_DEBUG "writing fractel config\n");
...
In kern.log, vedo il seguente messaggio quando si tenta di sovrascrivere il file / proc / net / madwifi / ATH1 / fractel_config (con il tempo di ciclo di studi).
[ 8671.924873] proc write
[ 8671.924919]
Le eventuali spiegazioni?
Soluzione
E 'dipende dalla distribuzione, ma l'uso molti klogd(8)
per ottenere i messaggi dal kernel e sarà o li registro in un file (a volte /var/log/dmesg
o /var/log/kernel
) o al registro di sistema tramite syslog(3)
. In quest'ultimo caso, in cui le voci di registro finiscono dipende dalla configurazione del syslogd(8)
.
Una nota sul comando dmesg
:. Messaggi kernel vengono memorizzati in un buffer circolare, così grandi quantità di output sarà sovrascritto
Altri suggerimenti
Molte volte i messaggi di livello KERN_DEBUG
vengono filtrati ed è necessario aumentare il livello di registrazione in modo esplicito. Si può vedere quali sono le impostazioni predefinite del sistema sono esaminando /proc/sys/kernel/printk
. Per esempio, sul mio sistema:
# cat /proc/sys/kernel/printk
4 4 1 7
Il primo numero indica il livello del log della console è KERN_WARNING
(vedi noreferrer proc (5) pagine man per maggiori informazioni). Questo mezzo KERN_NOTICE
, KERN_INFO
, e messaggi KERN_DEBUG
verranno filtrati dalla console. Per aumentare il livello di registrazione o di dettaglio, l'uso dmesg
$ sudo dmesg -n 7
$ cat /proc/sys/kernel/printk
7 4 1 7
Qui, impostare il livello a 7 (KERN_DEBUG
) consentirà a tutti i livelli di messaggi di apparire sulla console. Per automatizzare questo, add loglevel=
N per i parametri di boot del kernel, dove N è il livello di registro che si desidera andare alla console o ignore_loglevel
per stampare tutti i messaggi del kernel alla console.
Si otterrà l'output con il comando dmesg
dmesg in uscita tutti i messaggi dal kernel. Trovare i messaggi desiderati sarebbe difficile. Migliore utilizzo dmesg e grep di combinazione e utilizzare un'etichetta driver specifico in tutti i vostri messaggi printk
. Che la facilità ad eliminare tutti i messaggi indesiderati.
printk("test: hello world")
dmesg | grep test
Ho avuto questo problema su Ubuntu 11.10 e 10.04 LTS, sul primo ho modificato /etc/rsyslog.d/50-default.conf, quindi riavviato rsyslog usando "sudo servizio rsyslog restart" per riavviare rsyslogd. Poi ha funzionato.
Si noti che usi Ubuntu * r * syslogd, non syslogd.
Si potrebbe provare un livello superiore rispetto KERN_DEBUG, per esempio KERN_INFO. A seconda della configurazione dei messaggi di priorità più bassi potrebbero non essere visualizzati.
In CentOS (almeno in CentOS 6.6) l'uscita sarà in / var / log / messages