Linux - dmesg 不显示 printk 消息

Cra*_*ild 1 linux linux-device-driver linux-kernel

所以我正在学习编写设备驱动程序并编写了这个简单的驱动程序:

#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/module.h>

static int __init gotemp_init(void)
{
        printk(KERN_DEBUG "Hello world");
        return 0;
}

static void __exit gotemp_exit(void)
{
}

module_init(gotemp_init);
module_exit(gotemp_exit);

MODULE_AUTHOR("Abhinav Jain");
MODULE_DESCRIPTION("Simple driver");
MODULE_LICENSE("GPL");
Run Code Online (Sandbox Code Playgroud)

生成文件是这样的:

obj-m := hello.o

KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD       := $(shell pwd)

all:
        $(MAKE) -C $(KERNELDIR) M=$(PWD)
Run Code Online (Sandbox Code Playgroud)

但是 的输出dmesg不打印"Hello world". 我也尝试过,KERN_INFO但结果仍然相同,尽管lsmod显示hello正在加载模块。

那么为什么没有记录消息呢?

And*_*bis 5

它应该工作得很好。有时,由于缓冲,消息可能会延迟到达。然后需要在字符串末尾添加换行符以刷新缓冲区。尝试做:

printk(KERN_DEBUG "Hello world\n");
Run Code Online (Sandbox Code Playgroud)