尽管正确设置了loglevel,但Printk仍无法打印

时间:2012-06-30 08:17:47

标签: linux printk

我的问题是,我正在尝试在内核中构建驱动程序。我决定使用简单的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 world\n");
    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。

2 个答案:

答案 0 :(得分:1)

您可以使用

lsmod command
    OR
cat /proc/modules

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

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

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

答案 1 :(得分:1)

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