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

发布于 2024-11-01 01:52:13 字数 189 浏览 3 评论 0原文

如果我有两个静态链接的模块。一个模块的 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

匿名的好友 2024-11-08 01:52:13

有没有办法强制一个模块先于另一个模块加载?

答案非常简单,确保第一个模块在 Makefile 中位于第一个:

obj-y += mod1.o
obj-y += mod2.o

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

是的,在您的情况下, initcalls (module_init hook) 是被一一调用的。请参阅init/main.c,
do_one_initcall() 调用者。

Is there a way to force one module to load before the other?

Answer is surprisingly simple, make sure first module is first in Makefile:

obj-y += mod1.o
obj-y += mod2.o

is the first module's init function guaranteed to finish before the second one is invoked?

Yes, initcalls (module_init hook) in your case are called one-by-one. See init/main.c,
do_one_initcall() callers.

小嗲 2024-11-08 01:52:13

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

请查看

静态初始化顺序惨败

I'm assuming you want to fix the static initialization fiasco

Have a look at

Static Initialization Order Fiasco

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文