2017-12-01 22 views
1

리눅스 우분투 17.04에서 간단한 커널 모듈을 코딩하고 있습니다.이 커널 모듈은 문자열을 커널 로그에 출력합니다.내 커널 로그에 최신 출력이 표시되지 않는 이유는 무엇입니까?

#include<linux/module.h> 
#include<linux/init.h> 
#include<linux/moduleparam.h> 
char* mystring = "hello world"; 
module_param(mystring ,charp ,S_IRUSR | S_IWUSR); 

void display(void){ 
printk(KERN_ALERT "%s" ,mystring); 
} 
static int hello(void){ 
//printk(KERN_ALERT "hello module"); 
display(); 
return 0; 
} 
static void bye(void){ 
printk(KERN_ALERT "bye"); 
} 
module_init(hello); 
module_exit(bye); 

나는 명령 make을 실행하고 나는 insmod test.ko mystring="blahblahblah" 실행할 때 다음 모듈이 올바르게 삽입됩니다하지만 dmesg을 실행할 때 그것은 "blahblahblah"를 표시하지 않습니다. rmmod test.kodmseg을 실행 한 후 "blahblahblah"라는 표현이 터미널에 나타납니다. insmod test.ko mystring="blahblahblah"을 다시 실행 한 다음 dmesg을 쓰면 "blahblahblah"가 인쇄됩니다. 정확히 무엇이 문제입니까? 내 문제입니까 아니면 시스템입니까?

답변

2

가끔 printk은 출력을 지연시킬 수 있습니다 (즉, 메시지는 intrenal 버퍼에 저장되지만 커널 로그에는 저장되지 않습니다). 이러한 문제를 피하기 위해 줄 바꿈 끝에 항상 줄 바꿈 문자 (\n)를 추가하십시오.

printk(KERN_ALERT "%s\n" ,mystring);