【问题标题】:Printk not printing in spite of properly set loglevel尽管正确设置了日志级别,Printk 仍不打印
【发布时间】:2012-06-30 08:17:47
【问题描述】:

我的问题是,我正在尝试将驱动程序构建到内核中。我决定用一个简单的 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' 可以构建模块,但启动后 dmesg 或 /var/log/ 下没有出现 printk 输出。

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

谢谢, D.

【问题讨论】:

    标签: linux printk


    【解决方案1】:

    你可以使用

    lsmod command
        OR
    cat /proc/modules
    

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-08-05
        • 2015-08-08
        • 2012-02-17
        • 1970-01-01
        • 2018-07-16
        • 1970-01-01
        • 1970-01-01
        • 2020-06-07
        相关资源
        最近更新 更多