您好,登錄后才能下訂單哦!
導讀 | ARM設備如何通過uboot啟動 Linux內核 |
(1)uboot的本質就是就是一個復雜點的裸機程序,和ARM部分寫的裸機程序沒有本質區別。
(2)內核本身也是一個裸機程序,和uboot、裸機程序無本質區別。要說不同的地方,那就是內核運行起來后,在軟件上分為內核層和應用層,分層后兩層的權限不同,內存訪問和設備操作的管理上更加精細(內核可以隨便訪問各種硬件,而應用程序只能被限制地訪問硬件和內存地址)。
(3)直觀上來看,uboot的鏡像是u-boot.bin,
linux系統的鏡像是zImage,這兩個東西其實都是兩個裸機程序鏡像。從系統的啟動角度來講,內核其實就是一個大的復雜點的裸機程序。
(1)一個完整的軟件+硬件的嵌入式系統,靜止時(未上電時)bootloader、kernel、rootfs等必須的軟件都以鏡像的形式存儲在啟動介質中(x210中是iNand/SD卡),運行時都是在DDR內存中運行的,與存儲介質無關。上面兩個狀態都是穩定狀態,第三個狀態是動態過程,即從靜止態到運行態的過程,也就是啟動過程。
(2)動態啟動過程就是一個從SD卡逐步搬移到DDR內存,并且運行啟動代碼進行相關的硬件初始化和軟件架構的建立,最終達到運行時穩定狀態。
(3)靜止時,u-boot.bin、kernel、rootfs都在SD卡中,它們不可能隨意存在SD卡的任意位置,因此需要對SD卡進行一個分區,然后將各種鏡像存在不同的分區,這樣在啟動過程中uboot、內核就知道到哪里去找。(uboot和kernel中的分區表必須一致,同時和SD卡的實際使用分區也要一致)
(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
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。