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
(隨身碟,網路,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
。啟動核心