Uboot功能

wow-發表於2024-03-20

Uboot功能

Uboot(Universal bootloader)就是一個裸機程式,用於啟動核心。不過相較於微控制器程式更加複雜

相關知識補充

  1. Uboot:Universal bootloader
  2. XIPCPU可以直接發出地址訊號讀取Flash/RAM,執行指令(可以看成直接在Flash/RAM中執行);此類Flash/RAM稱為XIP裝置
    XIP:有時程式從SD卡啟動,CPU無法直接讀取SD卡,需要透過emmc控制器訪問SD卡。則SD卡為非XIP裝置

啟動過程

  1. 執行Uboot,目的是啟動核心:讀Flash,將核心程式碼複製到RAM
    帶來了一個問題,一般微控制器的RAM使用的是SRAM,比較小,無需初始化即可使用。而嵌入式Linux的記憶體一般比較大,使用DDR。那麼就需要初始化記憶體。
    Uboot的工作

    1. 初始化記憶體
    2. 初始化其他硬體:初始化時鐘,然後是Flash
    3. 將核心複製到RAM
    4. 啟動核心
  2. 啟動核心:目的是為了啟動應用程式
    核心的工作:

    1. R/W硬體驅動,比如Flash(隨身碟,網路,LCD,輸入輸出裝置)驅動程式
    2. R/W檔案,檔案系統
    3. 找到啟動APP
  3. 為了適配所有裝置,防止引入許多冗餘的配置檔案,在Uboot中引入裝置樹。檔案目錄中有一個dtb資料夾
    Uboot = Uboot.bin + 某個dtb檔案

支援非XIP裝置啟動(SD卡啟動,串列埠啟動)的過程

由於CPU無法直接從SD卡(非XIP裝置)讀到程式(指令),但是當前又需要CPUSD卡啟動程式。出現了矛盾,因此引入了BRom(BootRom)-CPU可以直接訪問。
完整啟動過程:

  1. CPU讀BootRom,執行BootRom程式碼
  2. BootRom工作:Copy:將SD卡上的Uboot複製到RAM執行

總結

Uboot啟動流程

XIP裝置

CPU直接訪問Flash,讀取Uboot程式碼並執行(相當於直接再FLASH上執行):初始化記憶體,初始化硬體,將Flash上的核心程式碼複製到RAM。啟動核心

非XIP裝置

  1. 首先CPU執行BootRom程式碼,將SD卡(非XIP)上的Uboot複製到RAM
  2. 執行Uboot程式碼:初始化硬體(不再初始化記憶體,程式本身就在RAM中),將Flash上的核心程式碼複製到RAM。啟動核心

相關文章