尽管正确设置了日志级别,但打印仍无法打印



我的问题是,我正在尝试在内核中构建驱动程序。我决定用一个简单的Hello World程序测试我的代码。代码如下所示:

#include <linux/kernel.h>
#include <linux/err.h>
#include <linux/module.h>
#include <linux/init.h>
#include <linux/printk.h>
int __init my_init(void)
{
    printk(KERN_ALERT "Hello worldn");
    return 0;
}
device_initcall(my_init);
//subsys_initcall(my_init);

此外,cat/proc/sys/kernel/printk 显示 7 4 1 7从 .config 文件中,我找到"CONFIG_DEFAULT_MESSAGE_LOGLEVEL=4"

我正在使用 Makefile 中的 obj-y += 制作文件。我发现"make"可以构建模块,但是启动后没有 printk 输出出现在 dmesg 或/var/log/下。

我想知道驱动程序是否根本没有内置到内核中。有什么办法可以检查吗?

谢谢D.

您可以使用

lsmod command
    OR
cat /proc/modules

命令以检查驱动程序是否已加载。

看着你的代码,我觉得__init应该用module_init或__initcall替换。这些内核签名可确保在插入时调用模块 init。

您可以使用 insmod 测试您的驱动程序,并通过调用 dmesg 来检查它是否记录了消息。

我解决了这个问题。我发现printk语句实际上是在控制台上打印的,但由于打印了大量其他消息,因此从dmesg中消失了。我增加了 dmesg 的大小,现在它存储了 printk 语句。

相关内容

  • 没有找到相关文章

最新更新