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

时间:2013-03-21 07:00:26

标签: linux-kernel linux-device-driver

初始化驱动程序时module_initsubsys_initcall之间有什么区别?

1 个答案:

答案 0 :(得分:21)

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

每个的实际宏定义取决于是否为(可加载)模块配置了内核。可以在include/linux/init.h

中找到这些宏(和其他init宏)的定义

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