U-Boot 使用說明
U-Boot 是一個主要用於嵌入式系統(tǒng)的開機(jī)載入程式, 可以支援多種不同的計算機(jī)系統(tǒng)結(jié)構(gòu), 包括ARM、MIPS、x86與 68K. 這也是一套在GNU通用公共許可證之下發(fā)布的自由軟體. 他支援下列功能:
- 網(wǎng)路下載: TFTP, BOOTP, DHCP
- 串口下載: s-record, binary (via Kermit)
- Flash 管理: 抹除, 讀, 寫
- Flash 型別: SPI flash, NAND flash
- 記憶體工具: 讀, 寫, 複製, 比對
- 交互式 shell: 命令, 腳本
NUC970 U-Boot 的版本是 201304RC2. 從下面連結(jié)下載:http://www.denx.de/wiki/U-Boot/SourceCode
U-Boot 官網(wǎng)上對各項功能有更詳盡的介紹:http://www.denx.de/wiki/view/DULG/UBoot
配置
U-Boot 是可配置的, 修改配置檔中的各項定義來產(chǎn)生不同的配置.
NUC970 配置檔位於 include/configs/nuc970_evb.h
以下分段介紹配置檔 nuc970_evb.h 中的各項定義.
CONFIG_SYS_LOAD_ADDR: 影像檔所要下載位址
- CONFIG_EXT_CLK: 外部晶振頻率
- CONFIG_TMR_DIV: timer 除頻倍率
- CONFIG_SYS_HZ: timer 頻率
- CONFIG_SYS_MEMTEST_START: 記憶體測試的起始位址
- CONFIG_SYS_MEMTEST_END: 記憶體測試的結(jié)束位址
- CONFIG_NUC970_HW_CHECKSUM: 使用 SHA-1 計算 Linux 內(nèi)核的 checksum (若屏蔽此定義,則採用 crc32 來計算 checksum),必須與 mkimage 搭配使用,請參考 4.7.2 章節(jié)。
- CONFIG_CMD_TIMER: 使用timer 相關(guān)的命令
- CONFIG_SYS_USE_SPIFLASH: 使用 SPI flash
- CONFIG_SYS_USE_NANDFLASH: 使用 NAND flash
- CONFIG_ENV_IS_IN_NAND: 環(huán)境變數(shù)儲存在 NAND flash 中
- CONFIG_ENV_IS_IN_SPI_FLASH: 環(huán)境變數(shù)儲存在 NAND flash 中
- CONFIG_ENV_IS_IN_MMC: 環(huán)境變數(shù)儲存在 eMMC 中
- CONFIG_NUC970_WATCHDOG: 編譯 NUC970 watchdog timer 驅(qū)動程式
- CONFIG_HW_WATCHDOG: 打開 watchdog timer 功能 (CONFIG_NUC970_WATCHDOG 需同時打開)
- CONFIG_DISPLAY_CPUINFO: 顯示 CPU 相關(guān)資訊
- CONFIG_BOOTDELAY: 開機(jī)時的延遲秒數(shù)
- CONFIG_SYS_INIT_SP_ADDR: 系統(tǒng)初始化時的堆棧指針
- ? CONFIG_BAUDRATE: 串口波特率
- ? CONFIG_NUC970_EMAC0: 使用 NUC970 EMAC0
- ? CONFIG_NUC970_EMAC1: 使用 NUC970 EMAC1
- ? CONFIG_NUC970_ETH: 支援 NUC970 Ethernet
- ? CONFIG_NUC970_PHY_ADDR: PHY 位址
- ? CONFIG_CMD_NET: 支援網(wǎng)路相關(guān)命令
- ? CONFIG_ETHADDR: MAC 位址
- ? CONFIG_SYS_RX_ETH_BUFFER: Rx Frame Descriptors 的個數(shù)
- ? CONFIG_BOOTP_SERVERIP: TFTP 伺服器的 IP 不會被改成 DHCP 伺服器的 IP
- ? CONFIG_CMD_PING: 使用網(wǎng)路的 ping 命令功能
- ? CONFIG_CMD_DHCP: 使用網(wǎng)路的DHCP 命令功能
- ? CONFIG_CMD_DHCP: 支持 JFFS2 命令功能
-
-
- ? CONFIG_NAND_NUC970: 開啟 NUC970 NAND 功能
- ? CONFIG_CMD_NAND: 使用 nand 命令功能
- ? CONFIG_MTD_DEVICE: 啟動 MTD 裝置
- ? CONFIG_MTD_PARTITIONS: 啟動 MTD 分區(qū)
- ? CONFIG_CMD_UBI: 啟動 UBI
- ? CONFIG_CMD_UBIFS: 啟動 UBIFS 文件系統(tǒng)
- ? CONFIG_CMD_MTDPARTS: MTD 分區(qū)命令
- ? CONFIG_RBTREE: 啟動 UBI 需要的配置
- ? CONFIG_LZO: 啟動 UBI 需要的配置
- ? MTDIDS_DEFAULT: 設(shè)定 MTD 名稱, 需要和內(nèi)核中的設(shè)定一致
- ? MTDPARTS_DEFAULT: 分區(qū)配置
- ? CONFIG_CMD_NAND_YAFFS2: 啟動YAFFS2的命令
- ? CONFIG_YAFFS2: 啟動YAFFS2檔案系統(tǒng)
- ? CONFIG_SYS_MAX_NAND_DEVICE: 定義NAND 裝置個數(shù)
- ? CONFIG_SYS_NAND_BASE: 定義NAND controller base 位址
- ? CONFIG_ENV_OFFSET: 環(huán)境變數(shù)在 flash 中的偏移位址
- ? CONFIG_ENV_SIZE: 保留給環(huán)境變數(shù)的空間大小
- ? CONFIG_ENV_SECT_SIZE: 保留給環(huán)境變數(shù)的空間的 sector 大小
- ? CONFIG_ENV_RANGE: 定義環(huán)境變數(shù)的儲存範(fàn)圍,範(fàn)圍是 CONFIG_ENV_OFFSET 到 CONFIG_ENV_OFFSET + CONFIG_ENV_RANGE. (當(dāng)遇到儲存環(huán)境變數(shù)的 block 是壞塊時,U-Boot 會將環(huán)境變數(shù)存到下一個 block)
- ? CONFIG_SYS_NAND_U_BOOT_OFFS: U-Boot 放在 NAND 中的偏移位址
- ? CONFIG_SYS_UBOOT_SIZE: U-Boot 使用的總空間 (code + data + heap)
- ? CONFIG_SYS_PHY_UBOOT_BASE: U-Boot 實際跑起來的位址
- ? CONFIG_SYS_NAND_U_BOOT_SIZE: U-Boot 影像檔大小
- ? CONFIG_SYS_NAND_PAGE_SIZE: NAND flash 一個 page 的大小
- ? CONFIG_SYS_NAND_BLOCK_SIZE: NAND flash 一個 block 的大小
- ? CONFIG_SYS_NAND_PAGE_COUNT: NAND flash 一個 block 有幾個page
- ? CONFIG_CMD_SF: 使用 SPI flash 的 sf 命令功能
- ? CONFIG_SPI_FLASH_MACRONIX: 使用 MACRONIX SPI flash
- ? CONFIG_SPI_FLASH_WINBOND: 使用 Winbond SPI flash
- ? CONFIG_SPI_FLASH_EON: 使用 EON SPI flash
- ? CONFIG_ENV_OFFSET: 環(huán)境變數(shù)在 flash 中的偏移位址
- ? CONFIG_ENV_SIZE: 保留給環(huán)境變數(shù)的空間大小
- ? CONFIG_SYS_PROMPT: 提示列字串
- ? CONFIG_SYS_LONGHELP: 顯示完整幫助選單
- ? CONFIG_CMDLINE_EDITING: 允許編輯命令
- ? CONFIG_LCD: 開啟 LCD 功能
- ? CONFIG_NUC970_LCD: 編譯 NUC970 驅(qū)動程式
- ? LCD_BPP: 輸出到 LCD 上的一個 pixel 用幾個 bit 來表示
- ? CONFIG_LCD_LOGO: 將 LOGO 輸出到 LCD 上
- ? CONFIG_LCD_INFO: 將 U-Boot 版本以及 NUC970 相關(guān)訊息輸出到 LCD 上
- ? CONFIG_LCD_INFO_BELOW_LOGO: 將 NUC970 相關(guān)訊息的輸出位置放在 LOGO 底下
- ? CONFIG_SYS_CONSOLE_IS_IN_ENV: stdin/stdout/stderr 採用環(huán)境變數(shù)的設(shè)定
- ? CONFIG_SYS_CONSOLE_OVERWRITE_ROUTINE: stdin/stdout/stderr 切換到 serial port
- CONFIG_NUC970_MMC: 編譯 NUC970 驅(qū)動程式
- CONFIG_CMD_MMC: 支持 MMC 相關(guān)命令
- CONFIG_CMD_FAT: 支持 FAT 相關(guān)命令
- CONFIG_MMC: 支持 MMC
- CONFIG_GENERIC_MMC: 支持通用的 MMC
- CONFIG_DOS_PARTITION: 支持 DOS 分區(qū)
- CONFIG_NUC970_SD_PORT0: 支持 SD port 0
- CONFIG_NUC970_SD_PORT1: 支持 SD port 1
- CONFIG_NUC970_EMMC: 支持 eMMC
- CONFIG_SYS_MMC_ENV_DEV: 存放環(huán)境變數(shù)的 MMC 設(shè)備編號
- CONFIG_ENV_OFFSET: 環(huán)境變數(shù)存放位址
- CONFIG_ENV_SIZE: 環(huán)境變數(shù)大小
- CONFIG_ENV_SECT_SIZE: 存放環(huán)境變數(shù)的 eMMC 區(qū)塊大小
- CONFIG_CMD_USB: 支持 USB 命令
- CONFIG_CMD_FAT: 支持 FAT 命令
- CONFIG_USB_STORAGE: 支持 USB 儲存系統(tǒng)
- CONFIG_USB_EHCI: 支持 USB 2.0
- CONFIG_USB_EHCI_NUC970: 支持 NUC970 芯片 USB 2.0
- CONFIG_DOS_PARTITION: 支持 DOS 分區(qū)
- CONFIG_NUC970_GPIO: 開啟 GPIO 功能
- CONFIG_SYS_MALLOC_LEN: 設(shè)置動態(tài)配置記憶體大小
- CONFIG_STACKSIZE: 設(shè)置堆棧大小
- CONFIG_KPI_NUC970: 開啟 GPIO 功能
- CONFIG_KPI_PA_PORT: 選擇PORT A為按鍵來源
- CONFIG_KPI_PH_PORT: 選擇PORT H為按鍵來源
- (使用者只能選擇 CONFIG_KPI_PA_PORT 或 CONFIG_KPI_PH_PORT其中之)
- CONFIG_KPI_ROW_NUM: 設(shè)置掃描按鍵列的數(shù)目
- CONFIG_KPI_COL_NUM: 設(shè)置掃描按鍵行的數(shù)目
- CONFIG_KPI_DEBOUNCE: 設(shè)置掃描按鍵de-bounce的長度
目錄架構(gòu)
U-Boot 的目錄結(jié)構(gòu)如下圖
arch: 包含CPU 相關(guān)的源代碼
NUC970 CPU 相關(guān)的源代碼放在 arch/arm/cpu/arm926ejs/nuc900.
board: 包含板子相關(guān)的源代碼
NUC970 板子相關(guān)的源代碼放在 board/nuvoton/nuc970_evb.
common: 包含 U-Boot 命令以及一些各平臺共同的源代碼.
doc: 放置各式各樣的 README 文件.
drivers: 放置驅(qū)動程式源代碼.
NUC970 的驅(qū)動程式源代碼也是放在 drivers 目錄下, 例如 Ethernet 驅(qū)動程式就放在 drivers/net/nuc900_eth.c
examples: 放置一些範(fàn)例. 例如 mips.lds 就是 MIPS 的鏈結(jié)腳本
fs: 存放各種檔案文件系統(tǒng). 例如: FAT, yaffs2.
include: 存放頭文件以及配置檔. NUC970 的配置檔就放在 include/configs/nuc970_evb.h
lib: 放置各種函式庫.
nand_spl: 存放 NAND 開機(jī)源代碼
net: 存放網(wǎng)路相關(guān)的源代碼. 例如: tftp.c, ping.c,
tools: 存放一些工具, 例如 mkimage 就是一個產(chǎn)生影像檔的工具.