1. 程式人生 > >嵌入式BootLoader分析:U-Boot簡介(二)

嵌入式BootLoader分析:U-Boot簡介(二)

概述

ARM處理器的晶片商很多,所以每種晶片的開發板都有自己相應的BootLoader。其中,U-Boot(Universal BootLoader)稱為通用BootLoader,是目前開發嵌入式系統引導程式碼使用最廣泛的,如今已成為ARM平臺事實上額標準BootLoader。

U-Boot是德國DENX小組開發的用於多種嵌入式CPU的BootLoader程式,可以執行在基於PowerPC、ARM、MIPS等多種嵌入式開發板。其本質還是微控制器程式。

U-Boot原始碼的目錄結構

從http://u-boot.sourceforge.net/或ftp://ftp.denx.de/pub/u-boot/站點都可以下載U-Boot的原始碼,其主要目錄結構如下:

  • boad: 平臺依賴;存放與開發板相關的目錄檔案和原始碼,與具體開發板的硬體和地址分配有關。
  • cpu:平臺依賴;存放與CPU相關的目錄檔案和原始碼,所有的子目錄都是以U-Boot所支援的CPU命名。
  • lib_arm:平臺依賴;存放對ARM體系結構通用的檔案,主要用於實現ARM平臺通用的函式。
  • common平臺通用;與體系結構無關的程式碼檔案,實現了U-Boot的所有命令,其中內建了一個shell指令碼直譯器,busybox中也使用了它。
  • drivers:平臺通用;通用裝置驅動程式,如網絡卡、Flash、串列埠和USB匯流排等。
  • Doc:文件;U-Boot開發相關文件。
  • examples:應用例程;一些可以獨立執行的應用程式例子,如helloword。
  • include:平臺通用;U-Boot與硬體平臺相關的標頭檔案和開發板配置檔案。config子目錄下與目標板相關的配置標頭檔案是移植過程中經常需要修改的檔案。
  • net:平臺通用;存放網路相關原始碼,BOOTP協議,TFTP協議,RARP協議程式碼,無需移植。
  • Post:平臺通用;存放上電自檢程式。
  • rtc:平臺通用;RTC驅動程式。
  • tools:工具;用於建立U-Boot S-RECORD和BIN映象檔案的工具。

對於定製的開發板,配置編譯過程中只需要其中的部分程式。在board目錄下找到與自己的開發板相近的配置,然後在此基礎上做些修改,就可以實現相應的功能。

U-Boot支援的主要功能

  • 系統引導:支援NFS掛載、RAMDISK(壓縮或非壓縮)形式的根檔案系統。支援NFS掛載,從Flash中引導壓縮或非壓縮系統核心。
  • 基本輔助功能:強大的作業系統介面功能,可靈活設定、傳遞多個關鍵引數給作業系統,對Linux支援好。
  • 支援目標板環境引數多種儲存方式:如Flash、NVRAM、EEPROM。
  • CRC32校驗:可校驗Flash中核心、RAMDISK映象檔案是否完好。
  • 裝置驅動:串列埠、SDRAM、Flash、乙太網、LCD、NVRAM、EEPROM、鍵盤、USB、PCMCIA、PCI、RTC等驅動支援。
  • 上電自檢:SDRAM、Flash大小自動檢測,SDRAM故障檢測;CPU型號。
  • 特殊功能:XIP核心引導。

U-Boot基本命令及環境變數

  • ?:得到所有命令列表
  • Help:如help usb,列出USB的功能使用說明
  • ping:只能從開發板ping別的機器
  • setenv:設定環境變數,如:
    -setenv serverip 192.168.1.110
    -setenv ipaddr 192.168.1.177
    -setenv bootcmd ‘tftp 32000000 vmlinux; kgo 32000000’
  • saveenv:儲存環境變數到記憶體。設定好環境變數後,儲存變數值。
  • tftp:通過網路下載檔案
  • bootp:通過網路用Boot/TFTP協議來啟動映象
  • protect:對Flash進行防寫或取消防寫
  • erase:刪除Flash的扇區
  • cp:在記憶體中複製內容,cp 32000000 40000(把記憶體中0x32000000開始的0x40000位元組複製到0x0處)
  • mw:對RAM中內容做寫操作,mw 32000000 ff 10000(把記憶體0x32000000開始的0x10000位元組設定為0xFF
  • md:修改RAM中的內容,md 32000000(記憶體的起始地址)
  • flinfo:列出Flash的資訊
  • kgo:啟動沒有壓縮的Linux核心,kgo 32000000
  • go:在地址‘addr’處開始程式執行
  • run:執行一個環境變數所定義的命令
  • bootm:啟動U-Boot Tools製作的壓縮Linux核心,從記憶體中執行經過mkimage加工的程式映像,boot 32000000
  • loadb:通過串列埠線(kermit mode)裝載二進位制檔案
  • printenv:列印環境變數

UBoot中的簡單環境變數如下:

  • baudrate:波特率
  • bootdelay:Boot延遲
  • bootcmd:Boot命令
  • bootargs:Boot引數
  • bootfile:預設下載啟動的核心
  • ipaddr:客戶機IP地址
  • serverip:伺服器地址
  • loadaddr:裝載地址
  • ethaddr:網絡卡MAC地址

對於U-Boot程式碼級啟動過程及原始碼分析在下一篇文章中詳細介紹。