uboot如何啟動核心

大雄45發表於2020-08-08
導讀 ARM裝置如何透過uboot啟動 核心
uboot和核心就是一個裸機程式

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

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

(3)直觀上來看,uboot的映象是u-boot.bin, 的映象是zImage,這兩個東西其實都是兩個裸機程式映象。從系統的啟動角度來講,核心其實就是一個大的複雜點的裸機程式。
uboot如何啟動核心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還要給核心提供啟動引數。

本文原創地址: https://www.linuxprobe.com/uboot-image.html

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2710258/,如需轉載,請註明出處,否則將追究法律責任。

相關文章