Linux kernel 内置内核模块的module_init宏与init_module函数

Linux kernel 内置内核模块的module_init宏与init_module函数,linux-kernel,kernel,kernel-module,Linux Kernel,Kernel,Kernel Module,我一直在尝试在Android上进行一些轻量级的内核开发 我有点困惑于如何内置,内置使用 obj-y+=模块名称.o 内核模块使用module\u init()宏而不是init\u module()函数 我有以下两个简单模块,第一个一个: #包括 #包括 int init_模块(void){ printk(KERN_ALERT“这是我们的第一个程序”); 返回0; } 空洞清理_模块(空洞){ printk(KERN_ALERT“我们的第一个程序结束”); } 和第二个一个 #包括 #包括 #

我一直在尝试在Android上进行一些轻量级的内核开发

我有点困惑于如何内置,内置使用

obj-y+=模块名称.o
内核模块使用
module\u init()
宏而不是
init\u module()
函数

我有以下两个简单模块,第一个一个:

#包括
#包括
int init_模块(void){
printk(KERN_ALERT“这是我们的第一个程序”);
返回0;
}
空洞清理_模块(空洞){
printk(KERN_ALERT“我们的第一个程序结束”);
}
第二个一个

#包括
#包括
#包括
静态整数初始化测试模块初始化(无效)
{
pr_warn(“你好,世界”);
返回0;
}
模块初始化(测试模块初始化);
静态无效\退出测试\模块\退出(无效)
{
pr_warn(“再见”);
}
模块退出(测试模块退出);
当我使用内置的两个模块编译内核时,第二个模块是在
dmesg
中显示消息的模块。但是,第一个模块没有

但是,如果单独编译第一个模块并使用
insmod./module_name.ko
加载*.ko文件,则第一个模块会将消息打印到
dmesg


这是因为需要
module_init()
宏来在引导期间使用内核模块的加载ELF吗?当
insmod
从*.ko文件中动态加载ELF时,我们不需要使用
module_init()
宏来“注册”它?

第一个模块忽略了内置时的行为。这是一个不同的故事,但您可以查看include/linux/initcall.h(IIRC)并检查在那里做了什么。对于作为模块构建的情况,我认为在这些宏存在之前,如何创建模块是一种(非常)古老的方法。不要将它与现代内核一起使用。