驅動載入順序

2021-06-23 09:26:12 字數 1399 閱讀 2221

在系統初始化的時候,決定驅動程式在什麼時候被載入的資訊儲存在登錄檔中。

最早的一批驅動是由ntldr載入記憶體的(僅僅是載入)

第二批是由io管理器載入記憶體的

第三批是由 scm(service control manager) 載入的

乙個驅動在第幾批中被載入是由 hklm/system/currentcontrolset/services/驅動名/start 的值來決定。該值為0,第一批被載入。該值為1,第二批被載入。該值為2,第三批被載入。對於同一批驅動中的驅動,按驅動所在組的先後載入。組的先後順序由 hklm/system/currentcontrolset/control/servicegrouporderlist 決定。每個驅動的 hklm/system/currentcontrolset/services/驅動名/group 決定了驅動所屬的組,如果沒有這個 services驅動名group ,那麼就在所有組之後。對於同乙個組中的驅動,按驅動的tag的先後載入。tag的先後順序由 hklm/system/currentcontrolset/control/grouporderlist組名 決定。每個驅動的 hklm/systemcurrent/controlset/services/驅動名/tag 決定了驅動在組中的tag。 這個tag值的大小由驅動安裝的先後順序決定,先安裝的tag值小,後安裝的tag值大。

系統啟動過程:

第一階段:系統加電自檢post過程。post是power on self test的縮寫,也就是加電自檢的意思,微機執行記憶體ffff0h處的程式(這裡是一段固化的rom程式),對系統的硬體(包括記憶體)進行檢查。 

第二階段:讀取dpt和mbr。當微機檢查到硬體正常並與cmos設定相符後,按照cmos設定從相應裝置啟動(我們這裡假設從硬碟啟動),讀取硬碟的分割槽表(dpt)和主引導記錄(mbr)。 

第三階段:讀取obr。微機正確讀取dpt和mbr,如果mbr和dpt校驗正確,則執行mbr並進一步讀取obr(位於每乙個主分割槽的第乙個扇區),然後執行obr。 

第四階段:裝載系統隱含檔案。將dos系統的隱含檔案io.sys入記憶體,載入基本的檔案系統fat,io.sys將ms.sys讀入記憶體,並處理system.dat和user.dat檔案,載入磁碟壓縮程式。 

第五階段:系統配置。系統隱含檔案裝載完成,微機將執行系統隱含檔案,並執行系統配置檔案(config.sys),載入config.sys中定義的各種驅動程式。 

第六階段:調入命令解釋程式(command.com)。系統裝載命令管理程式,以便對系統的各種操作命令進行協調管理(我們所使用的dir、copy等內部命令就是由command.com提供的)。 

第七階段:執行批處理檔案(autoexec.bat)。微機將一步一步地執行批處理檔案中的各條命令。 

第八階段:載入win.com。win.com負責將windows下的各種驅動程式和啟動執行檔案加以執行,至此啟動完畢。

linux驅動載入順序

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

linux驅動載入順序

linux核心為不同驅動的載入順序對應不同的優先順序,在 include linux init.h 中定義了一些巨集 define pure initcall fn define initcall 0 fn,1 define core initcall fn define initcall 1 fn...

Linux核心驅動載入順序

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