dmesg 后未获得输出

dmesg 后未获得输出

我是初学者,写了一个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 问题以了解为什么需要换行符:

相关内容