我正在玩linux内核,尝试编写一些模块。我将它们添加到 Linux 源代码中的 /drivers/my_module/my_module.c 下。 (我使用的是内核 4.9,在 debian 9 上,make 4.1)
这里是:
#include <linux/module.h>
__init static int my_module_init(void)
{
pr_info("Hello World!\n");
return 0;
}
__exit static void my_module_exit(void)
{
return;
}
module_init(my_module_init);
module_exit(my_module_exit);
我写了一个简单的Kconfig和Makefile:Makefile:
obj-$(CONFIG_MY_MODULE) += my_module.o
Kconfig:
menu "My first module"
config MY_MODULE
bool "My module"
help
The dumbest kernel module you could find on the market !
endmenu
我将其添加到 /drivers 中的 Kconfig 和 Makefile 中:
内核配置:source "drivers/my_module/Kconfig"
生成文件:obj-$(CONFIG_MY_MODULE) += my_module/
我以为,到目前为止一切都很好,但是,当我CONFIG_MY_MODULE=y
在 linux 的 .config 文件中添加我的时,运行 make 时它没有被编译(它没有出现在编译输出中,启动内核时跟踪中也没有出现任何内容),我不明白为什么。我猜这与未在 drivers/Makefile 中定义的变量有关,但似乎其他模块使用相同的策略,并且它们是与内核一起编译的。
所以我想我错过了一些东西,但我无法真正弄清楚是什么。