Linux 系統要啟動一定需要一個 bootloader
, 當晶片上電後會先運行這一段 bootloader 程式
, 這段bootloader 會先初始化 DDR(RAM)等等的外部設備 , 之後會將 Linux Kernel 從 Flash ( 也就是ROM ) [ NAND , NOR Flash , EMMC , 等等 ] 複製到 DDR (RAM) 當中 , 最後才會啟動 Kernel。
BootLoader 與 Linux Kernel 的關係 像是 BIOS 與 Windows之間的關係
有 uboot 原碼後需要編譯後才可以用
在uboot 的arm架構資料夾當中(./arch/arm) 有非常多的 mach-xxx資料夾 , 原因是因為有很多廠商會有自己的改動 ,所以有非常多的 mach-xxx 去符合這些板子。
想要看有哪些板子被支援 , 我們可以透過 configs 資料夾底下的各種 xxx_degconfig 來看。
之前爬文的時候再CSDN上看到一個挺清楚的圖片如下
類型 | 名字 | 描述 | 備註 |
---|---|---|---|
資料夾 | api | API 函數 | uboot 自帶 |
資料夾 | arch | 與架構有關的程式 | uboot 自帶 |
資料夾 | board | 不同開發版的自訂程式 | uboot 自帶 |
資料夾 | cmd | 命令相關 | uboot 自帶 |
資料夾 | common | 通用代碼 | uboot 自帶 |
資料夾 | configs | 配置文件 | uboot 自帶 |
資料夾 | disk | 磁碟分區相關程式 | uboot 自帶 |
資料夾 | doc | 文檔 | uboot 自帶 |
資料夾 | drivers | 驅動代碼 | uboot 自帶 |
資料夾 | dts | 設備樹 | uboot 自帶 |
資料夾 | examples | 範例 | uboot 自帶 |
資料夾 | fs | 文件系統 | uboot 自帶 |
資料夾 | include | Header 檔 | uboot 自帶 |
資料夾 | lib | Lib 檔 | uboot 自帶 |
資料夾 | Licenses | 許可證 | uboot 自帶 |
資料夾 | net | 網路相關程式 | uboot 自帶 |
資料夾 | post | 上電自檢程式 | uboot 自帶 |
資料夾 | scripts | 腳本相關文件 | uboot 自帶 |
資料夾 | test | 測試程式 | uboot 自帶 |
資料夾 | tools | 工具文件夾 | uboot 自帶 |
檔案 | . config | 配置文件 | 編譯所產生的 |
檔案 | .gitignore | git 文件 | 編譯所產生的 |
檔案 | . uboot . xxx . dmd (一系列的) | 用於保存一些指令 | 編譯所產生的 |
檔案 | config . mk | MakeFile 的調用文件 | 編譯所產生的 |
檔案 | Makefile | 主要 MakeFile | uboot 自帶 |
檔案 | MAKEALL | 用於編譯 uboot的腳本 | uboot 自帶 |
檔案 | System.map | 系統 mapping 文件 | 編譯出來的 |
檔案 | u-boot | 編譯出來的 uboot 文件 | 編譯出來的 |
檔案 | u-boot.xxx | 生成的uboot 相關文件 | |
包括 u-boot.bin , u-boot.imx | 編譯出來的 |
成功編譯之後,就會在U-Boot 原始碼的根目錄下產生多個可執行二進位檔案以及編譯過程文件,這些檔案都是u-boot.xxx 的命名方式。這些檔案由一些列名為.xxx.cmd 的檔案生成,.xxx.cmd 這些檔案都是由編譯系統產生的用於處理最終的可執行程式的。