0

我的问题是,我正在尝试将驱动程序构建到内核中。我决定用一个简单的 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。

4

2 回答 2

1

I solved the problem. I found out that the printk statements were actually getting printed on the console, but got wiped out from dmesg due to the large number of other messages getting printed. I increased the size of dmesg, and now it stores the printk statements.

于 2012-07-02T19:29:33.660 回答
1

您可以使用

lsmod command
    OR
cat /proc/modules

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

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

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

于 2012-07-02T06:18:01.567 回答