2017-12-01 11 views
1

私はlinux ubuntu 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); 
関連する問題