为什么我的内核日志没有显示最新的输出?

时间:2017-12-01 08:17:36

标签: c linux linux-kernel kernel kernel-module

我在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时,它不会显示&#34; blahblahblah& #34 ;. 在我运行rmmod test.kodmseg表达&#34; blahblahblah&#34;将出现在终端。当我再次运行insmod test.ko mystring="blahblahblah"然后dmesg&#34; blahblahblah&#34;将被打印。 究竟是什么问题? 是我的问题还是系统?

1 个答案:

答案 0 :(得分:3)

有时printk可能会延迟输出(即,消息存储在intrenal缓冲区中,但不会存储在内核日志中)。为避免此类行为,请始终在打印的字符串末尾添加换行符(\n):

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