一 芯片上電與Boot ROM啟動
1.硬件復位:芯片上電,arm系統硬件復位后,CPU會從BootROM(只讀寄存器)中啟動,這個BootROM通常是廠商定制的,負責最初的硬件初始化,如時鐘,內存,外設配置等。這里的硬件初始化是為了BootROM將引導程序加載在內存中做的準備。追求快,簡單(就是只初始化了一部分,這一部分可以讓BootROM工作)。
2.引導程序加載:Boot ROM將引導程序(Bootloader)加載到內存中,
二 Bootloader引導
Bootloader是系統加電運行的第一段代碼,在嵌入式系統中相當于PC機中的BIOS。
Bootloader通常分為兩個階段:第一階段(FSBL)和第二階段(如U-Boot)。1. 第一階段引導(FSBL):
a. 硬件初始化:對硬件進行基本的初始化,包括初始化RAM(內存控制器配置),處理器(CPU,時鐘,外設等)以及設置引導介質(如NAND Flash,eMMC,SD卡等。這里的硬件初始化是從新開始把所有的硬件都初始化了。
b. 加載第二階段引導程序:將第二階段引導程序(如U-Boot)加載到內存。
2.第二階段引導(U-Boot):
c. 進一步硬件初始化:包括更多外設和I/O的初始化。
d. 加載Linux內核映像:從存儲設備(如eMMC,NAND Flash,SD卡)中讀取Linux內核映像,并將其加載到內存。
e. 配置設備樹:為內核提供硬件信息。
f. 配置啟動參數:如根文件系統,內核命令行等。
g. 啟動Linux內核:在配置完成后,啟動Linux內核。
注意:如果不是做系統移植,這個第二階段引導(U-Boot)里面的配置參數步驟,就可以不用配置。使用默認的即可。
三 內核加載與初始化
1.內核加載:Bootloader將Linux內核映像加載到內存,并傳遞必要的啟動參數。
2.內核初始化:Linux內核啟動后,進行硬件檢測和初始化,包括內存,CPU,設備樹等。內核會設置系統環境,為后續的用戶空間程序運行做準備。
四 用戶空間啟動
1.啟動init進程:內核初始化完成后,會啟動init進程,init進程是系統的第一個用戶空間進程,負責初始化系統環境,啟動必要的服務和應用程序。
2.服務和應用程序運行:在init進程啟動后,用戶空間的所有服務和應用程序開始運行,這些程序可以是系統自帶的,也可以是用戶自行安裝的。例如:自己在arm開發板上寫了亮燈程序,就可以運行了。