2013-09-04 5 views
7

Sto provando a creare una voce proc. mia funzione init_module è come sottodmesg non mostra l'istruzione printk

int init_module() 
{ 
printk(KERN_INFO "proc2:Module Loaded\n"); 
proc_entry=proc_create_data(proc_name,0644,NULL,&fops,NULL); 
if(proc_entry==NULL) 
{ 
    printk(KERN_INFO "proc2:Error registering proc entry"); 
} 
else 
{ 
    printk(KERN_INFO "proc2:Proc Entry Created"); 
} 
return 0; 
} 

seguente è il metodo di pulitura

void cleanup_module() 
{ 
printk(KERN_INFO "proc2:module unloaded"); 
remove_proc_entry(proc_name,proc_entry); 
} 

resto del programma comprendono funzioni di definizione e di callback variabili.

quando compilo questo programma lo compila bene. quando uso insmod non mi risponde prompt. lsmod elenca il mio modulo e gli spettacoli usati da uno (non so cosa). dmesg non mostra nessuno dei messaggi di stampa precedenti.

puoi dirmi cosa c'è che non va qui?

risposta

15

Provare echo "7" > /proc/sys/kernel/printk per abilitare tutti i livelli di registro della console.

I numeri sono corrispondenti a seguito:

#define KERN_EMERG "<0>" /* system is unusable*/ 
#define KERN_ALERT "<1>" /* action must be taken immediately*/ 
#define KERN_CRIT "<2>" /* critical conditions*/ 
#define KERN_ERR "<3>" /* error conditions*/ 
#define KERN_WARNING "<4>" /* warning conditions*/ 
#define KERN_NOTICE "<5>" /* normal but significant condition*/ 
#define KERN_INFO "<6>" /* informational*/ 
#define KERN_DEBUG "<7>" /* debug-level messages*/ 

Il numero predefinito è 4, che permette di mostrare console messaggi solo almeno in KERN_WARNING. Ecco perché non riesci a vedere il registro nel livello KERN_INFO.

+0

sorprendentemente non solo il messaggio KERN_INFO. ma l'intero modulo ha iniziato a funzionare usando echo "7">/proc/sys/kernel/printk –

+1

Poiché "7" consente di visualizzare tutti i tipi di log da KERN_DEBUG a KERN_EMERG, non solo KERN_INFO specifico. – Wayne

+1

Voglio solo aggiungere che ha successo solo se l'utente è root. Il reindirizzamento fallirebbe altrimenti. Il reindirizzamento può essere sostituito con un '| sudo tee' per farlo funzionare. – russoue

0

Anche dopo aver utilizzato echo "7" > /proc/sys/kernel/printk, printk non ha funzionato per me.

https://lwn.net/Articles/487437/ dice circa le modifiche o la versione più avanzata del printk chiamato pr_** API (pr_info, pr_emerg).

Ho usato pr_info anziché printk e ha risolto il mio problema.