我是初学者,写了一个hello world模块(其实是从o'Reilly书上抄下来的),代码如下:
#include <linux/init.h>
#include <linux/module.h>
MODULE_LICENSE("Dual BSD/GPL");
static int hello_init(void)
{
printk(KERN_ALERT "\nHello World");
return 0;
}
static void hello_exit(void)
{
printk(KERN_ALERT "\nGood bye");
}
module_init(hello_init);
module_exit(hello_exit);
因此,当我插入模块时,dmesg 不会出现任何内容。但是当我将其移除,然后 dmesg 时,我可以看到
Hello World
Good Bye
答案1
这是因为当您打印“\nHello world”时缓冲区不会被清除,而当您最终删除模块时缓冲区才会被清除。
要故意清除缓冲区,请打印
Hello world\n
同样地,
Good bye\n
\n
注意每个语句末尾的换行符printk
。
请参阅此 SO 问题以了解为什么需要换行符: