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?

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top