2013-05-09 10 views
8

Il mio sistema operativo Ubuntu 12.04. Ho scritto questo modulo del kernel e uso il comando insmod e rmmod ma non c'è nulla nei messaggi/var/log. come posso risolvere questo problema?printk() non stampa in/var/log/messages

/* 
* hello-1.c - The simplest kernel module. 
*/ 
#include <linux/module.h> /* Needed by all modules */ 
#include <linux/kernel.h> /* Needed for KERN_INFO */ 

int init_module(void) 
{ 
    printk(KERN_INFO "Hello world 1.\n"); 

    /* 
    * A non 0 return means init_module failed; module can't be loaded. 
    */ 
    return 0; 
} 

void cleanup_module(void) 
{ 
    printk(KERN_INFO "Goodbye world 1.\n"); 
} 
+2

Prova KERN_ALERT invece di KERN_INFO per verificare se il livello di registro è troppo alto. Puoi anche modificare il tuo livello di registro. –

+0

come posso cambiare il livello di registro? – woody

+1

klogd -c n, dove n è il livello. Ci sono anche altri modi per impostarlo. –

risposta

1

Verificare se syslog processo demone è in esecuzione, dal momento che questo è il processo che copia i messaggi printk dal kernel buffer dei messaggi anello/log a /var/log/messages se non sbaglio. i messaggi di stampa possono essere visti usando l'utilità dmesg oi messaggi saranno in/var/log/messages. Se è impostato correttamente loglevel, i messaggi di stampa verranno visualizzati subito sulla console, non è necessario utilizzare dmesg o non è necessario effettuare il check in di/var/log/messages. i messaggi di debug di printk possono anche essere parte di /var/log/syslog.

0

Le moderne distribuzioni Linux non utilizzano più rsyslog (o qualsiasi altro daemon syslog). Si basano su journald che fa parte di systemd, quindi manca il file/var/log/messages e devi usare il comando journalctl per leggere il log di sistema.

0

In primo luogo, si dovrebbe verificare che se il modulo è caricato correttamente o meno, utilizzando questo comando

lsmod | grep "hello-1" //hello-1 is the name of your module 

Dal momento che hai scritto un modulo del kernel, che stampa qualche messaggio. I messaggi dal kernel e dal suo modulo possono essere trovati in/var/log/syslog oppure puoi visualizzare questo tipo di messaggi usando il comando dmesg. Mentre il modulo stampa "Hello World 1.", è necessario utilizzare il seguente comando per visualizzare il messaggio dal modulo.

dmesg | grep "Hello World 1." 
0

Cercare in /etc/syslog.conf, le righe * .info .... Questi sembrano controllare ciò che viene registrato tramite printk.

*.=info;*.=notice;*.=warn;\ 
auth,authpriv.none;\ 
cron,daemon.none;\ 
mail,news.none   -/var/log/messages 

ho scoperto che/proc/sys/kernel/printk veramente solo controllato i livelli di registrazione della console, non la registrazione al file. E suppongo che anche il controllo syslog sia in esecuzione;) Abbiamo avuto esattamente lo stesso problema, KERN_INFO non sta andando a registrare i file e questo l'ha risolto. hth