2013-03-21 105 views

回答

17

不同之处在于时机,或者更确切地说,是执行顺序。也就是说,声明为subsys_initcall的程序保证在声明为module_init的程序之前执行。该顺序确保在设备驱动程序试图利用前者的功能(例如,设备驱动程序注册为子系统设备)之前,子系统和平台驱动程序被初始化。

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

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

+0

非常清楚..谢谢.. – kzs 2013-03-21 12:15:58

+2

对于可加载的'* .ko'模块,'subsys_initcall()'映射到'module_init()',即'device_initcall()参考:http ://lxr.free-electrons.com/source/include/linux/init.h#L298 – TheCodeArtist 2015-01-22 09:54:02

相关问题