LINUX:静态链接模块加载的顺序

Joh*_*lvr 12 module linux-kernel

如果我有两个静态链接的模块.一个模块的module_init函数依赖于已经运行的另一个模块的module_init函数.有没有办法强制一个模块在另一个模块之前加载?

另外,第一个模块的init函数是否可以在调用第二个模块之前完成?

最后,如果上面的答案为NO,那么同步两个模块init调用的推荐方法是什么,以确保我不会遇到问题?

ado*_*yan 13

有没有办法强制一个模块在另一个模块之前加载?

答案非常简单,请确保第一个模块是Makefile中的第一个:

obj-y += mod1.o
obj-y += mod2.o
Run Code Online (Sandbox Code Playgroud)

是第一个模块的init函数保证在调用第二个之前完成?

是的,module_init你的情况下的initcalls(钩子)是逐个调用的.看init/main.c, do_one_initcall()来电者.


seh*_*ehe 0

我假设你想修复静态初始化失败

看一下

静态初始化顺序惨败