linux驅動載入順序

2021-09-30 11:49:39 字數 1755 閱讀 9419

linux核心為不同驅動的載入順序對應不同的優先順序,在

include\linux\init.h 中定義了一些巨集:

#define pure_initcall(fn)   __define_initcall("0",fn,1)

#define core_initcall(fn)   __define_initcall("1",fn,1)

#define core_initcall_sync(fn)   __define_initcall("1s",fn,1s)

#define postcore_initcall(fn)   __define_initcall("2",fn,2)

#define postcore_initcall_sync(fn) __define_initcall("2s",fn,2s)

#define arch_initcall(fn)   __define_initcall("3",fn,3)

#define arch_initcall_sync(fn)   __define_initcall("3s",fn,3s)

#define subsys_initcall(fn)   __define_initcall("4",fn,4)

#define subsys_initcall_sync(fn) __define_initcall("4s",fn,4s)

#define fs_initcall(fn)    __define_initcall("5",fn,5)

#define fs_initcall_sync(fn)   __define_initcall("5s",fn,5s)

#define rootfs_initcall(fn)   __define_initcall("rootfs",fn,rootfs)

#define device_initcall(fn)   __define_initcall("6",fn,6)

#define device_initcall_sync(fn) __define_initcall("6s",fn,6s)

#define late_initcall(fn)   __define_initcall("7",fn,7)

#define late_initcall_sync(fn)   __define_initcall("7s",fn,7s)

#define __initcall(fn) device_initcall(fn)

把自己的驅動的函式名用這些巨集去定義之後,

就會對應不同的載入時候的優先順序。

其中,我們寫驅動中所用到的module_init對應的是

#define module_init(x) __initcall(x);

而#define __initcall(fn) device_initcall(fn)

所以,驅動對應的載入的優先順序為6。

在上面的不同的優先順序中,

數字越小,優先順序越高。

注意:同一等級的優先順序的驅動,載入順序是鏈結過程決定的(具體是看makefile檔案中的順序),

結果是不確定的,無法去手動設定誰先誰後。

不同等級的驅動載入的順序是先優先順序高,後優先順序低

,這是確定的。

最後這些驅動載入的順序,可以檢視在根目錄下,生成的system.map。

同一級別的初始化是和編譯順序有關的,並不是和裝置列表一致。

調整驅動載入順序可通過使用不同級別的初始化,如:subsys_initcall()

module_init()

late_initcall()

linux驅動載入順序

研究mx53開發板上sgtl5000的音訊驅動時,發現有sgtl5000 i2c driver和 imx 3stack sgtl5000 audio driver兩個驅動,前面的驅動總是在前面執行,但是好像二者都是用的module init,那麼是什麼地方決定了它的執行順序呢?找到makefile內...

Linux核心驅動載入順序

問題 背光驅動初始化先於lcd驅動初始化,導致lcd驅動初始化時出現閃屏的現象。解決過程 1 mach c中platform devices列表如下 platform devices static struct platform device athena evt platform devices ...

驅動載入順序

在系統初始化的時候,決定驅動程式在什麼時候被載入的資訊儲存在登錄檔中。最早的一批驅動是由ntldr載入記憶體的 僅僅是載入 第二批是由io管理器載入記憶體的 第三批是由 scm service control manager 載入的 乙個驅動在第幾批中被載入是由 hklm system curren...