2013-09-04 14 views
7

Próbuję utworzyć wpis proc. Moja init_module funkcja jest poniżejdmesg nie wyświetla oświadczenia 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; 
} 

następującym jest metoda oczyszczania

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

reszta programu obejmują zmienne funkcje rozdzielczości i zwrotnych.

podczas kompilacji tego programu kompiluje się dobrze. po użyciu insmod nie odpowiada mi monitować. lsmod zawiera listę mojego modułu i programów używanych przez jednego (nie wiem co). dmesg nie wyświetla żadnego z powyższych komunikatów.

czy możesz mi powiedzieć, co jest nie tak?

Odpowiedz

15

Spróbuj echo "7" > /proc/sys/kernel/printk, aby włączyć wszystkie poziomy dziennika konsoli.

Liczby są odpowiadające poniżej:

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

Wartość domyślna wynosi 4, który umożliwia konsola do wyświetlania komunikatów tylko przynajmniej w KERN_WARNING. Dlatego nie można zobaczyć poziomu logowania KERN_INFO.

+0

zaskakująco nie tylko wiadomość KERN_INFO. ale cały moduł zaczął działać, używając echo "7">/proc/sys/kernel/printk –

+1

Ponieważ "7" pozwala na pokazanie wszystkich rodzajów logów od KERN_DEBUG do KERN_EMERG, nie tylko specyficznego dla KERN_INFO. – Wayne

+1

Chcę tylko dodać, że odnosi sukces tylko wtedy, gdy użytkownik jest rootem. Przekierowanie zawiodłoby inaczej. Przekierowanie może być zastąpione przez '| sudo tee', aby działało. – russoue

0

Nawet po użyciu echo "7" > /proc/sys/kernel/printk, printk nie zadziałało dla mnie.

https://lwn.net/Articles/487437/ mówi o modyfikacji lub bardziej udoskonalona wersja printk nazywa pr_** API (pr_info, pr_emerg).

Użyłem pr_info zamiast printk i to rozwiązało mój problem.