在嵌入式开发中,我们常常需要使用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设备的分区