U-boot開發學習筆記

weixin_34253539發表於2017-10-29

U-Boot 的原始碼頂層目錄說明

目錄 特性 解 釋 說 明
board 平臺依賴 存放電路板相關的目錄檔案,例如:RPXlite(mpc8xx)、smdk2410(arm920t)、sc520_cdp(x86) 等目錄
cpu 平臺依賴 存放 CPU 相關的目錄檔案, 例如: mpc8xx、 ppc4xx、 arm720t、 arm920t、 xscale、i386 等目錄
lib_ppc 平臺依賴 存放對 PowerPC 體系結構通用的檔案, 主要用於實現 PowerPC 平臺通用的函式
lib_arm 平臺依賴 存放對 ARM 體系結構通用的檔案,主要用於實現 ARM 平臺通用的函式
lib_i386 平臺依賴 存放對 X86 體系結構通用的檔案,主要用於實現 X86 平臺通用的函式
include 通用 標頭檔案和開發板配置檔案,所有開發板的配置檔案都在 configs 目錄下
common 通用 通用的多功能函式實現
lib_generic 通用 通用庫函式的實現
Net 通用 存放網路的程式
Fs 通用 存放檔案系統的程式
Post 通用 存放上電自檢程式
drivers 通用 通用的裝置驅動程式,主要有乙太網介面的驅動
Disk 通用 硬碟介面程式
Rtc 通用 RTC 的驅動程式
Dtt 通用 數字溫度測量器或者感測器的驅動
examples 應用例程 一些獨立執行的應用程式的例子,例如 helloworld
tools 工具 存放製作 S-Record 或者 U-Boot 格式的映像等工具,例如 mkimage Doc 文件 開發使用文件

嵌入式學院—《嵌入式 Linux 系統開發標準教程》——第 6 章、Bootloader

U-Boot 的編譯

U-Boot 的原始碼是通過 GCC 和 Makefile 組織編譯的。 頂層目錄下的 Makefile 首先可以設定開發板的定義,然後遞迴地呼叫各級子目錄下的 Makefile,最後把編譯過的程式連結成 U-Boot 映像。

1.頂層目錄下的 Makefile

它負責 U-Boot 整體配置編譯。按照配置的順序閱讀其中關鍵的幾行。
每一種開發板在 Makefile 都需要有板子配置的定義。
例如 smdk2410 開發板的定義如下

smdk2410_config :unconfig
@./mkconfig $(@:_config=) arm arm920t smdk2410 NULL s3c24x0

執行配置 U-Boot 的命令 make smdk2410_config,通過./mkconfig 指令碼生成
include/config.mk 的配置檔案。檔案內容正是根據 Makefile 對開發板的配置生成的。

ARCH = arm
CPU = arm920t
BOARD = smdk2410
SOC = s3c24x0
2.開發板配置標頭檔案

除了編譯過程 Makefile 以外,還要在程式中為開發板定義配置選項或者引數。這個標頭檔案是 include/configs/<board_name>.h。 <board_name>用相應的 BOARD 定義代替。
這個標頭檔案中主要定義了兩類變數。
一類是選項,字首是 CONFIG_,用來選擇處理器、裝置介面、命令、屬性等。
例如:

#define CONFIG_ARM920T       1
#define CONFIG_DRIVER_CS8900 1

另一類是引數,字首是 CFG_,用來定義匯流排頻率、串列埠波特率、Flash 地址等引數。
例如:

#define   CFG_FLASH_BASE   0x00000000
#define   CFG_PROMPT       "=>"
3.編譯結果

根據對 Makefile 的分析,
編譯分為 2 步。
第 1 步配置,
例如: make smdk2410_config
第 2 步編譯,執行 make 就可以了。
編譯完成後,可以得到 U-Boot 各種格式的映像檔案和符號表

文 件 名 稱 說明
System.map U-Boot 映像的符號表
u-boot.bin U-Boot 映像原始的二進位制格式
u-boot U-Boot 映像的 ELF 格式
u-boot.srec U-Boot 映像的 S-Record 格式

一般 u-boot.bin 最為常用,直接按照二進位制格式下載,並且按照絕對地址燒寫到Flash 中就可以了。

U-Boot移植

(1)在頂層 Makefile 中為開發板新增新的配置選項
(2)建立一個新目錄存放開發板相關的程式碼,並且新增檔案
(3)為開發板新增新的配置檔案
(4)配置開發板
(5)編譯 U-Boot
(6)新增驅動或者功能選項
(7)除錯 U-Boot 原始碼,直到 U-Boot 在開發板上能夠正常啟動

相關文章