insmod printk 不起作用,但适用于 rmmod

insmod printk doesn't work, but works for rmmod

由于我还在学习内核模块编程,无法弄清楚问题背后的原因。当我 运行 insmod hello.ko, dmesg or /var/logs/message 不 show/print 消息,而当我 运行 rmmod hello.ko, dmesg or /var/logs/message shows/print 来自 hello_init(void) and hello_exit(void).

的字符串
#include <linux/init.h>
#include <linux/module.h>
MODULE_LICENSE("Dual BSD/GPL");


static int hello_init(void)
{
    printk(KERN_ALERT "Hello World!!");
    return 0;
}

static void hello_exit(void)
{
    printk(KERN_ALERT "Bye World!");
}

module_init(hello_init);
module_exit(hello_exit);

printk 非常了解换行符。 printk(KERN_ALERT "Hello World!!"); 不打印任何内容,因为它没有换行符。它等待下一个 printk(KERN_CONT 作为该行的延续,并等待下一个 prinkt(KERN_CONT 换行。它被打印在下一个 printk(KERN_ALERT 上,因为 printk 假设最后一行已经结束并打印它。如果你想立即输出它,请在格式字符串中添加一个换行符。

所以只是:

  printk(KERN_ALERT "Hello World!!\n");