LINUX:静态链接模块加载顺序
如果我有两个静态链接的模块。一个模块的 module_init 函数依赖于另一个模块的 module_init 函数已经运行。有没有办法强制一个模块先于另一个模块加载?
另外,第一个模块的 init 函数是否保证在调用第二个模块之前完成?
最后,如果上述答案是否定的,那么同步两个模块初始化调用以确保我不会遇到问题的推荐方法是什么?
If I have two modules which are being statically linked in. One modules' module_init function depends on another module's module_init function having already run. Is there a way to force one module to load before the other?
Also, is the first module's init function guaranteed to finish before the second one is invoked?
Lastly, if the answer to the above is NO, what is the recommended way of synchronizing the two module init calls to make sure I don't run into issues?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
答案非常简单,确保第一个模块在 Makefile 中位于第一个:
是的,在您的情况下, initcalls (
module_init
hook) 是被一一调用的。请参阅init/main.c,do_one_initcall()
调用者。Answer is surprisingly simple, make sure first module is first in Makefile:
Yes, initcalls (
module_init
hook) in your case are called one-by-one. Seeinit/main.c
,do_one_initcall()
callers.我假设您想修复静态初始化失败
请查看
静态初始化顺序惨败
I'm assuming you want to fix the static initialization fiasco
Have a look at
Static Initialization Order Fiasco