加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入
  • 正文
  • 推荐器件
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

Linux内核模块加载顺序(一)

04/18 09:56
7930
阅读需 4 分钟
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

哈喽,大家好,我是LittleG。

​在Linux系统中,无论是ko形式的动态加载模块还是buildin形式的静态编译模块,加载顺序的控制都是相当重要的。虽然Linux内核本身并不直接控制模块的加载顺序,但是可以通过一些方法和策略来间接地实现。

对于以ko形式动态加载模块,加载顺序主要由用户空间的应用程序或脚本来控制。通常,在系统启动过程中,初始化脚本(如init 进程或rc脚本或init.d脚本或systemd进程)会负责按顺序加载所需的模块。这些脚本可以包含依赖关系,以确保在加载某个模块之前,其他必要的模块已经被加载到。此外,还可以通过insmod或modprobe命令在运行时手动加载模块,并根据需要指定加载顺序。

对于buildin形式的静态编译模块,加载顺序则由内核的链接顺序决定。在内核编译过程中,模块会被链接到内核映像中,并按照它们在链接脚本中定义的顺序进行初始化。通常,内核的链接脚本会考虑模块之间的依赖关系,以确保在初始化某个模块之前,其他必要的模块已经被初始化。然而,这种依赖关系的处理更多地依赖于开发者良好的编程习惯和内核的构建系统。

下面举例看下如何使用脚本动态控制模块加载顺序。

正文

ko形式(动态加载模块)

假设我们有两个动态加载模块:module_a.ko 和 module_b.ko,其中 module_b 依赖于 module_a。

在系统启动时,我们可以编写一个初始化脚本(比如放在 /etc/init.d/ 或使用 systemd 服务)来控制模块的加载顺序。

这个脚本可以包含以下命令:

说明:在上面的脚本中,start 部分首先使用 modprobe 命令加载 module_a,然后再加载 module_b。modprobe 命令还会处理模块的依赖关系,如果 module_a 是 module_b 的依赖,modprobe module_b 会自动先加载 module_a。

需要注意的是,模块的加载顺序可能受到多种因素的影响,包括硬件平台的特性、内核版本和配置、以及其他系统组件的依赖关系等。因此,在设计和实现模块时,应该尽量减少对其他模块的依赖,并考虑在模块初始化过程中处理潜在的依赖关系问题。

总的来说,虽然Linux内核本身并不直接控制模块的加载顺序,但是通过合理的编程习惯和内核构建配置,以及用户空间的脚本和命令,我们可以间接地实现模块加载顺序的控制。

关于静载buidin编译的模块加载顺序,下期见~

推荐器件

更多器件
器件型号 数量 器件厂商 器件描述 数据手册 ECAD模型 风险等级 参考价格 更多信息
SN74LVC1G97DCKT 1 Texas Instruments Configurable Multiple-Function Gate 6-SC70 -40 to 125

ECAD模型

下载ECAD模型
$1.19 查看
KSZ8895FQXI 1 Microchip Technology Inc DATACOM, ETHERNET TRANSCEIVER
$13.59 查看
CPC1918J 1 IXYS Integrated Circuits Division Solid State Relay, TRANSISTOR OUTPUT SOLID STATE RELAY, 2500 V ISOLATION-MAX, ROHS COMPLIANT, ISOPLUS264, 4 PIN
$10.07 查看

相关推荐

电子产业图谱

记录和分享C/C++、Linux、ARM、Android、IoT相关知识。技术相伴于生活和成长,愿你我永为少年,心中有火,眼中有光,始保热情。