在嵌入式開發中,我們常常需要使用uboot對系統進行更新。更新的方式有很多種,如SD卡,U盤、TFTP等等。本文就介紹自己常用燒錄方式————SD卡和U盤。接下來介紹更新過程中常用的幾種uboot指令。以便于以後檢視。
1.SD卡啟動更新
首先在uboot下執行mmc,可得:
mmc info - display info of the current MMC device
mmc read addr blk# cnt
mmc write addr blk# cnt
mmc erase blk# cnt
mmc rescan
mmc part - lists available partition on current mmc device
mmc dev [dev] [part] - show or set current mmc device [partition]
mmc list - lists available devices
mmc setdsr <value> - set DSR register value
(1)mmc info - display info of the current MMC device 顯示儲存設備的資訊
在切換到emmc裝置下(執行mmc dev 1),執行mmcinfo可看到儲存設備各屬性資訊:
gxtvbb_skt_v1#mmcinfo
Device: SDIO Port C
Manufacturer ID: 11
OEM: 100
Name: 008G7
Tran Speed: 52000000
Rd Block Len: 512
MMC version 5.0
High Capacity: Yes
Capacity: 7.3 GiB
Bus Width: 8-bit DDR
(2)mmc read addr blk# cnt 用來将存儲媒體(emmc/sd)中的内容讀取到記憶體中。
其中addr指記憶體中的目标位置起始位址,blk#指被拷貝内容起始存儲塊的塊号,cnt指要被拷貝的塊數。一般每個塊的大小為512byte。
是以blk和cnt參數的機關都是塊,一般為512位元組。化成十六進制就是0x200。在uboot啟動時,可從啟動log上看出各鏡像檔案在儲存設備上的分區表,觀察
得知偏移(offset)和大小(size)都為十六進制數,是以在使用mmc read指令時要注意後面的參數換算,即offset/0x200 = blk,size/200=cnt。
分區表:

讀取emmc中boot分區的所有内容到記憶體中,可執行 mmc dev 1 (切換到emmc裝置才能對其 讀) mmc read 0x1080000 1de000 10000 (使用以上公式offset/0x200 = blk,size/200=cnt)
(3) mmc write addr blk# cnt
将記憶體的位址為addr内容寫到儲存設備中,其中起始位址是blk,大小為cnt (機關都為塊) mmc write 0x1080000 1de000 10000 将記憶體1080000開始的内容,寫到emmc的1de000開始大小為10000 SD卡更新uboot>bin示例: mmc dev 0 mmcinfo fatload mmc 0 0x1080000 uboot.bin(SD卡首目錄下檔案) mmc write 1080000 0 2000
2.從USB啟動更新
usb start USB裝置初始化,若未執行,不能操作usb裝置内容 fatls usb 0 列舉U盤中所有檔案 fatinfo usb 0 U盤屬性等資訊 fatload usb 0:1 1080000 u-boot.bin 将U盤中的u-boot.bin 檔案加載到記憶體位址1080000中去。 示例: usb start fatload usb 0:1 1080000 boot.img bootm 1080000 從記憶體1080000啟動核心,重新開機後無效未寫到emmc或者flash中 fatload interface dev[:part] addr filename interface:sd、tf、usb dev[:part] 裝置号1、2、3等,part裝置的分區