uboot常用命令及其使用


1.帮助信息

? 或者 help

第一次使用uboot,通过?查看所有帮助信息

?cmd 或者 help cmd

? bootz #查看bootz命令的帮助信息

通过该命令查看某个cmd的帮助信息

2.版本信息查看

version

uboot启动后,查看uboot版本信息

bdinfo

uboot启动后,查看board信息

3.环境变量相关

setenv

设置一个环境变量

# 格式:setenv key vlaue
setenv bootdelay 5  # 设置uboot启动延时5s

删除一个环境变量
uboot对于一个没有值的环境变量,默认不再维护,做删除处理

# 格式:setenv key
setenv ipaddr   # 删除ipaddr,让ipaddr不复存在

修改一个环境变量

# 格式:setenv key vlaue
setenv bootdelay 5  # 原来的bootdleay值被覆盖,采用新值5

saveenv

uboot启动时,从非易失性存储器中读取环境变量的值,在内存中维护一份拷贝,当采用setenv命令创建、修改、或者删除后,内存中被相应地创建、修改或者删除,非易失存储器中的那一份并没有改变。直到执行saveenv,写入非易失性存储器。

print

打印所有环境变量及其值。

print # 打印所有

打印某一个。如果要查看某个你知道名字的环境变量,可以使用该命令。例如,打印bootcmd命令:

print bootcmd # 只打印bootcmd

4.内存相关

需要注意的是,所有参数需要十六进制数字输入。例如12345678默认为0x12345678,当然也可直接显式指定为0x12345678。

mm

修改ddr中内存单元的值,可以连续修改。

# mm [.b,.w,.l] addr
=>mm.l 80800000  #回车进入修改视图,地址自动递增
80800000: ? 12345678  # 回车
80800004: ? q         # 退出
=>

nm

修改ddr中内存单元的值,地址不自增。

# nm [.b,.w,.l] addr
=>mm.l 80800000  #回车进入修改视图,地址自动递增
80800000: ? 12345678  # 回车
80800000: ? q         # 退出
=>

md

显示ddr从addr处开始的内存数据,of object为数量,每个object的字节数量取决于参数.b,.w,.l。

# md [.b,.w,.l] addr [#of objects]
md.b 80800000 100  # 80800000 100均为为十六进制数字,100h=256

mw

cp

mtest

5.mmc相关

需要注意的是,对于emmc,存在多个物理分区,每个物理分区独立编址。进行mmc操作前,需要先切换到对应的物理分区,然后对该物理分区进行操作。
笔者所用的开发板emmc包含硬件分区:

  1. UDA, User Data Area:容量最大的硬件分区,一般UDA上继续进行软件分区,采用GPT或MBR方式。
  2. boot area partition1:4MB
  3. boot area partition2:4MB

mmc info

mmc rescan

mmc list

列出当前扫描到的所有mmc设备。

mmc dev

切换硬件分区

# 格式:emmc dev [dev_no] [part_no]
mmc dev 1  #切换到1号设备的硬件分区0

mmc part

列出当前硬件分区上的软件分区。前提是当前硬件分区上存在分区表

mmc read

mmc读写,以块为单位,1个块为512Bytes。

mmc dev  1  1
mmc read 80800000 600 10 #从600块号开始,读取0x10=16个块到ddr

mmc write

mmc读写,以块为单位,1个块为512Bytes。

mmc dev  1  1
mmc write 80800000 600 10 #将80800000开始的数据写入到emmc的600块地址处,写入0x10=16个块

mmc erase

6.fat文件系统相关

fatinfo

查看分区的fat文件系统信息

# 格式: fatinfo  [[:part]]
fatinfo mmc 1:1

fatls

列出fat文件系统所在分区上的所有文件

# 格式: fatls  [[:part]] [dir]
fatls mmc 1:1

fstype

查看分区文件系统类型

# 格式: fstype  [[:part]]
fstype mmc 1:0
fstype mmc 1:1
fstype mmc 1:2

fatload

从fat分区加载文件到内存

fatload mmc 1:1 80800000 zImage # 从fat分区加载zImage到DDR的80800000

fatwrite

将文件写入fat分区中

fatload mmc 1:1 80800000 zImage 6788f8 #从内存80800000处读取0x6788f8个数据写入fat分区,替换zImage文件

7.ext文件系统相关

8.nand相关

nand info

nand device

nand erase

nand read

nand write

9.网络相关相关

ping

测试uboot和远程主机的连通性。但是远程主机无法ping通uboot,即使网络实际上连通。

dhcp

从dhcp获取ip地址。

tftp

从tftp server下载文件到ddr。

tftp 80800000 zImage #从tftpserver下载zImage到80800000处

nfs

从nfs服务器共享目录下载文件到ddr。和tftp不同的是,需要指定远程主机的ip地址和共享文件的全路径。

# nfs [loadaddr] [[host_ip_addr]:filepath]
nfs 80800000 192.168.1.128:/home/book/nfs_rootfs/zImage#从nfserver下载zImage到80800000处

10.系统启动相关

bootz

bootz命令根据给定的kernel、dtb在ddr中的地址,去启动内核。可以通过多种方式(tftp命令、fatload命令等方式将zImage、dtb加载到ddr指定位置)
输入参数1:zImage_addr
输入参数2:dtb_addr

# if zimage_addr=80800000 dtb_addr=83000000
tftp 80800000 zImage
tftp 83000000 xxxx.dtb
bootz 80800000 - 83000000

bootm

bootm用于启动uImage

boot

boot命令执行uboot环境变量bootcmd中定义好的一组命令来启动系统。这一组命令一般包含
1)将kerneldtb拷贝到ddr指定位置的命令
2)bootz或者bootm命令

# 执行boot命令则执行环境变量bootcmd中定义好的命令
# 测试该命令,可以自定定义bootcmd命令,如下所示:
# 下面使用双引号包含多个命令,命令之间用分号隔开,单引号也可以
setenv bootcmd "tftp 80800000 zImage;tftp 83000000 xxxx.dtb;bootz 80800000 - 83000000"
saveenv   # 做测试可以不保存,如果保存了,聚会写入环境变量区
boot

run

run命令可以执行一个自定义命令,这个自定义命令的名字以一个环境变量形式出现,环境变量的内容就是用户要执行的一系列命令集合。

setenv usercmd "tftp 80800000 zImage;tftp 83000000 xxxx.dtb;bootz 80800000 - 83000000"
run usercmd

run命令和boot命令很相似,知识boot命令默认会执行bootcmd中定义好的一系列操作,不需要制定这个环境变量,但是run命令需要明确指定这个变量的名字。

reset

复位系统。这里值得注意,uboot的复位不是reboot,reboot一般指操作系统重启。

go

让cpu到ddr指定地址执行程序。可以用于调试裸机程序。
如果一个裸机程序app.bin,链接地址设置为87800000,并烧写到了87800000,则可以通过go直接运行该程序

tftp 87800000 app.bin
go 87800000  # 跳转到87800000执行代码

这里要区分go和bootz命令的区别。bootz命令有两个地址输入作为参数,启动内核前,还会做一些其他的操作。不要指望简单的使用go 80800000这条命令去启动内核。