c參考影片:https://video.100ask.net/p/t_pc/course_pc_detail/column/p_63ff16eae4b07b055838a303
Uboot本質上就是一個裸驅
Uboot基本概念:
uboot就是一個bootloader,作用就是用於啟動linux kernel或者其他系統。uboot最主要的工作就是初始化DDR,因為linux是執行在DDR裡面的。對於6ull系列,DDR初始化是由內部的boot rom來完成的,但是用的其他的cortex a晶片,一般都是uboot來初始化DDR的。
一般linux映象zimage(uimage)和裝置樹存在在SD卡、EMMC、NAND、SPI FLASH等外接儲存區域,這裡就涉及到一個問題:需要將linux映象從外接的flash複製到ddr中,然後才能啟動。uboot主要目的就是為系統啟動做準備(複製linux映象到ddr中,配置ddr等資訊)
1、uboot不僅僅可以啟動linux,也可以啟動系統系統,比如vxworks
2、linux不僅僅能透過uboot啟動,其他的bootloader也可以使用
3、uboot是一個通用的bootloader,支援多種架構。
linux系統三要素:uboot、linux驅動、根檔案系統
uboot:啟動核心:
1. 讀emmc,uboot有emmc驅動,讀取emmc,將核心copy進記憶體
1.1 初始化記憶體
1.2 初始化其他硬體,如時鐘
1.3 emmc或flash裡面的核心複製進記憶體
核心:啟動應用程式
1、能讀寫flash/emmc:驅動程式
2、能夠讀寫檔案:檔案系統
3、找到啟動APP
uboot = uboot.bin + 某個dtb
XIP:execute in place 原地執行
內部RAM、flash稱為XIP裝置
SD卡:cpu不能直接訪問SD卡,SD卡為非XIP裝置
為啥晶片可以支援SD卡:
cpu讀取,執行BROM程式碼,BROM copy uboot複製到記憶體裡
uboot啟動流程:
1、XIP裝置,第一硬體初始化,第二把flash上的核心複製到記憶體,第三啟動核心
2、非XIP裝置,BROM將Uboot複製到ram,執行uboot,不再初始化記憶體ram
uboot為什麼要驅動網路卡:uboot可做呼叫功能,也可以網路下載
uboot裡面的裝置樹可理解為簡化版本的kernel裝置樹
Uboot原始碼結構:
資料夾說明:
board:單板相關
arch:系統架構相關,如arm、mips
cmd:命令相關
fs:檔案系統相關
include:標頭檔案
lib:庫檔案
api:與硬體無關的API函式
driver:驅動程式
configs:配置資料夾
。。。