linux-kernel - 初始化驱动程序时 module_init 和 subsys_initcall 有什么区别?

标签 linux-kernel linux-device-driver

module_init 和有什么区别和 subsys_initcall在初始化驱动程序时?

最佳答案

差异与时间有关,或者更准确地说,与执行顺序有关。即声明为subsys_initcall的过程保证在声明为 module_init 的过程之前执行.这种排序确保子系统和平台驱动程序在设备驱动程序尝试利用前者的功能之前被初始化(例如,设备驱动程序注册为子系统设备)。

每个宏的实际定义取决于内核是否配置为(可加载)模块。这些宏(和其他 init 宏)的定义可以在 include/linux/init.h 中找到。

请注意 subsys_initcall()只能由内置(静态链接)模块使用。module_init可以由内置或可加载模块使用。

关于linux-kernel - 初始化驱动程序时 module_init 和 subsys_initcall 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15541290/

相关文章:

linux - 内核 3.8 或更高版本的 AODV 实现

linux-kernel - 等待队列和竞争条件

c - Linux 驱动程序 : mmap() kernel buffer to userspace without using nopage

linux-kernel - 通过 mmap 提供多个内核缓冲区

c - SPI(串行端口通信)问题,卡在 ioctl() 上

linux - 如何使 bond0/eth0 接口(interface) UP

Linux HZ 和公平调度时间片

linux - 在启动时为多个文件启用动态调试

即使使用 sudo 也无法从/sys/class/net/eth0/carrier 读取

linux - 为 x86 和 ARM 编写平台设备驱动程序的区别