Par*_*rsa 3 c linux kernel kernel-module linux-kernel
我正在 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);
Run Code Online (Sandbox Code Playgroud)
我运行命令make
,然后当我运行时insmod test.ko mystring="blahblahblah"
,模块将被正确插入,但是当我运行时dmesg
它不显示blahblahblah
.
在我运行之后rmmod test.ko
,dmseg
该表达式blahblahblah
将出现在终端中。当我运行insmod test.ko mystring="blahblahblah"
一次,然后dmesg
在blahblahblah
将被打印出来。
究竟是什么问题?是我的问题还是系统的问题?
有时printk
可能会延迟输出(即消息存储在内部缓冲区中,但不在内核日志中)。为避免此类行为,请始终\n
在打印的字符串末尾添加换行符 ( ):
printk(KERN_ALERT "%s\n" ,mystring);
Run Code Online (Sandbox Code Playgroud)