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