2013-09-04 7 views
7

Ich versuche, ein proc Eintrag zu erstellen. My init_module Funktion ist, wie untendmesg zeigt nicht printk Aussage

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; 
} 

finden Bereinigungsmethode

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

Rest Programmvariablen Definition und Rückruffunktionen umfassen.

wenn ich dieses Programm kompiliere kompiliert es gut. Wenn ich insmod benutze antwortet es mir nicht prompt. lsmod Listen mein Modul und von einem verwendeten zeigt (nicht wissen, was). dmesg zeigt keine der oben genannten printk-Nachrichten.

Können Sie mir sagen, was hier nicht stimmt?

Antwort

15

Versuchen Sie echo "7" > /proc/sys/kernel/printk, um alle Konsolenprotokollstufen zu aktivieren.

Die Zahlen werden entsprechend unten:

#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*/ 

Die Standardanzahl 4 ist, die Konsolnachrichten in KERN_WARNING nur zumindest zeigen ermöglicht. Deshalb kann man nicht in KERN_INFO Ebene sehen loggt sein.

+0

überraschenderweise nicht nur Nachricht KERN_INFO. aber ganzer Modul gestartet durch Arbeiten mit echo „7“>/proc/sys/kernel/printk –

+1

Denn „7“ kann alle Arten von Log von KERN_DEBUG bis KERN_EMERG gezeigt, nicht nur KERN_INFO spezifisch. – Wayne

+1

Ich möchte nur hinzufügen, dass es nur erfolgreich ist, wenn der Benutzer root ist. Die Umleitung würde sonst fehlschlagen. Die Umleitung kann durch ein '| ersetzt werden sudo tee', damit es funktioniert. – russoue

0

Auch nach der Verwendung echo "7" > /proc/sys/kernel/printk, printk hat nicht für mich gearbeitet.

https://lwn.net/Articles/487437/ sagt über geänderte oder erweiterte Version printk genannt pr_** der api (pr_info, pr_emerg).

Ich benutzte pr_info anstelle von printk und es löste mein Problem.