天天看點

uboot怎麼啟動Linux核心,uboot如何啟動核心

導讀

ARM裝置如何通過uboot啟動

核心

uboot和核心就是一個裸機程式

(1)uboot的本質就是就是一個複雜點的裸機程式,和ARM部分寫的裸機程式沒有本質差別。

(2)核心本身也是一個裸機程式,和uboot、裸機程式無本質差別。要說不同的地方,那就是核心運作起來後,在軟體上分為核心層和應用層,分層後兩層的權限不同,記憶體通路和裝置操作的管理上更加精細(核心可以随便通路各種硬體,而應用程式隻能被限制地通路硬體和記憶體位址)。

(3)直覺上來看,uboot的鏡像是u-boot.bin,

的鏡像是zImage,這兩個東西其實都是兩個裸機程式鏡像。從系統的啟動角度來講,核心其實就是一個大的複雜點的裸機程式。

uboot怎麼啟動Linux核心,uboot如何啟動核心

部署在SD卡特定分區内

(1)一個完整的軟體+硬體的嵌入式系統,靜止時(未上電時)bootloader、kernel、rootfs等必須的軟體都以鏡像的形式存儲在啟動媒體中(x210中是iNand/SD卡),運作時都是在DDR記憶體中運作的,與存儲媒體無關。上面兩個狀态都是穩定狀态,第三個狀态是動态過程,即從靜止态到運作态的過程,也就是啟動過程。

(2)動态啟動過程就是一個從SD卡逐漸搬移到DDR記憶體,并且運作啟動代碼進行相關的硬體初始化和軟體架構的建立,最終達到運作時穩定狀态。

(3)靜止時,u-boot.bin、kernel、rootfs都在SD卡中,它們不可能随意存在SD卡的任意位置,是以需要對SD卡進行一個分區,然後将各種鏡像存在不同的分區,這樣在啟動過程中uboot、核心就知道到哪裡去找。(uboot和kernel中的分區表必須一緻,同時和SD卡的實際使用分區也要一緻)

運作時必須先加載到DDR中連結位址處

(1)uboot在第一階段中進行重定位時将第二階段(整個uboot)加載到DDR的0xC3E00000位址處,這個位址就是uboot的連結位址。

(2)核心也有類似要求,uboot啟動核心時,将核心從SD卡讀取放到DDR中(其實就是個重定位的過程),不能随意放置,必須放在核心的連結位址處,否則啟動不起來。例如在x210中使用的核心連結位址是0x30008000。

核心啟動需要必要的參數

(1)uboot是無條件啟動的,從零開始啟動的。

(2)核心是不能開機自動完全從零開始啟動的,核心啟動需要别人幫忙。uboot需幫助核心實作重定位(從SD卡到DDR),uboot還要給核心提供啟動參數。