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

时间:2019-09-10 09:58:44

标签: linux-kernel linux-device-driver centos7

由于我仍在学习内核模块编程,因此无法找出问题背后的原因。当我运行insmod hello.ko时,dmesg or /var/logs/message不显示/打印消息,而当我运行rmmod hello.ko时,dmesg or /var/logs/message显示/打印来自hello_init(void) and hello_exit(void)的字符串。 / p>

#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);

1 个答案:

答案 0 :(得分:1)

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

就这样:

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