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 # 打印所有
打印某一个。如果要查看某个你知道名字的环境变量,可以使用该命令。例如,打印bootcmd命令:
print bootcmd # 只打印bootcmd
4.内存相关
需要注意的是,所有参数需要十六进制数字输入。例如12345678默认为0x12345678,当然也可直接显式指定为0x12345678。
mm
修改ddr中内存单元的值,可以连续修改。
# mm [.b,.w,.l] addr
=>mm.l 80800000 #回车进入修改视图,地址自动递增
80800000:<xxxxxxxx> ? 12345678 # 回车
80800004:<xxxxxxxx> ? q # 退出
=>
nm
修改ddr中内存单元的值,地址不自增。
# nm [.b,.w,.l] addr
=>mm.l 80800000 #回车进入修改视图,地址自动递增
80800000:<xxxxxxxx> ? 12345678 # 回车
80800000:<xxxxxxxx> ? 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包含硬件分区:
- UDA, User Data Area:容量最大的硬件分区,一般UDA上继续进行软件分区,采用GPT或MBR方式。
- boot area partition1:4MB
- 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 <interface> [<dev>[:part]]
fatinfo mmc 1:1
fatls
列出fat文件系统所在分区上的所有文件
# 格式: fatls <interface> [<dev>[:part]] [dir]
fatls mmc 1:1
fstype
查看分区文件系统类型
# 格式: fstype <interface> [<dev>[: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这条命令去启动内核。