Uboot功能 Uboot(Universal bootloader)就是一個裸機程式,用於啟動內核。不過相較於單片機程式更加複雜 相關知識補充 Uboot:Universal bootloader XIP:CPU可以直接發出地址信號讀取Flash/RAM,執行指令(可以看成直接在Flash/RAM ...
Uboot
功能
Uboot(Universal bootloader)
就是一個裸機程式,用於啟動內核。不過相較於單片機程式更加複雜
相關知識補充
Uboot:Universal bootloader
XIP
:CPU
可以直接發出地址信號讀取Flash/RAM
,執行指令(可以看成直接在Flash/RAM
中運行);此類Flash/RAM
稱為XIP
設備
非XIP
:有時程式從SD
卡啟動,CPU
無法直接讀取SD
卡,需要通過emmc
控制器訪問SD
卡。則SD
卡為非XIP
設備
啟動過程
-
運行
Uboot
,目的是啟動內核:讀Flash
,將內核代碼拷貝到RAM
帶來了一個問題,一般單片機的RAM
使用的是SRAM
,比較小,無需初始化即可使用。而嵌入式Linux
的記憶體一般比較大,使用DDR
。那麼就需要初始化記憶體。
Uboot
的工作- 初始化記憶體
- 初始化其他硬體:初始化時鐘,然後是
Flash
- 將內核拷貝到
RAM
- 啟動內核
-
啟動內核:目的是為了啟動應用程式
內核的工作:- 能
R/W
硬體驅動,比如Flash
(U盤,網路,LCD
,輸入輸出設備)驅動程式 - 能
R/W
文件,文件系統 - 找到啟動APP
- 能
-
為了適配所有設備,防止引入許多冗餘的配置文件,在
Uboot
中引入設備樹。文件目錄中有一個dtb
文件夾
Uboot = Uboot.bin + 某個dtb文件
支持非XIP
設備啟動(SD
卡啟動,串口啟動)的過程
由於CPU
無法直接從SD
卡(非XIP
設備)讀到程式(指令),但是當前又需要CPU
從SD
卡啟動程式。出現了矛盾,因此引入了BRom(BootRom)
-CPU
可以直接訪問。
完整啟動過程:
- CPU讀
BootRom
,運行BootRom
代碼 BootRom
工作:Copy
:將SD
卡上的Uboot
拷貝到RAM
運行
總結
Uboot啟動流程
XIP設備
CPU
直接訪問Flash
,讀取Uboot
代碼並執行(相當於直接再FLASH
上運行):初始化記憶體,初始化硬體,將Flash上的內核代碼拷貝到RAM。啟動內核
非XIP設備
- 首先
CPU
執行BootRom
代碼,將SD
卡(非XIP
)上的Uboot
拷貝到RAM
- 執行
Uboot
代碼:初始化硬體(不再初始化記憶體,程式本身就在RAM
中),將Flash
上的內核代碼拷貝到RAM
。啟動內核