IMX6ULL学习笔记(二) —— uboot 命令
IMX6ULL 学习笔记
version : v1.0 「2023.4.27」
author: Y.Z.T.
简介: 随记 , 记录 uboot 命令
2️⃣ Uboot
2.1 Uboot命令
Uboot提供了丰富的命令集 , 可以通过help指令查看当前支持的命令 , 支持tab键进行命令补全 , 和命令历史记录功能
2.1.1 查询命令
2.1.1.1 help
作用
- 列出所有命令
- 查询某个命令功能 :
1 help ls
2.1.1.2 bdinfo
作用
- 查看当前板子信息
打印出
DRAM的起始地址和大小、启动参数保存起始地址、波特率、 sp(堆栈指针)起始地址等信息
2.1.1.3 printenv
作用
打印环境信息,显示一些环境参数的配置信息,这些参数也是可以修改的
2.1.1.4 version
作用
查看
uboot版本,uboot编译时间和编译器
2.1.2 环境变量修改命令
修改环境变量的操作涉及到两个命令:setenv 和 saveenv
setenv:设置或者修改环境变量的值
saveenv:保存修改后的环境变量;一般环境变量是存放在外部 flash 中的, uboot 启动的时候会将环境变量从 flash 读取到 DRAM 中,所以使用命令 setenv 将修改的环境变量值保存到 flash 中
例: 修改bootdelay 变量的值为 10
1 | setenv bootdelay 10 |
新增变量
使用setenv 命令可以新建环境变量
1 | setenv <新变量> <新值> |
删除变量
删除变量的话,我们直接使用
setenv设置变量的值为空就行
1 | sentenv <待删除变量> |
2.1.3 内存操作命令
内存操作命令就是用于直接对
DRAM进行读写操作,常用的内存操作命令有md、nm、mm、mw、cp和cmp
2.1.3.1 md命令
作用
md 命令用于显示内存值
1 md[.b, .w, .l] address [# of objects]
- [.b .w .l] :对应
byte、word和long,也就是分别以 1 个字节、2 个字节、4 个字节来显示内存值- address :就是要查看的内存起始地址
- [# of objects] :表示要查看的数据长度(数字是以十六进制表示 , 如 10 表示十进制的16)
例
2.1.3.2 nm命令
作用
nm命令用于修改指定地址的内存值
1 nm[.b, .w, .l] address
在待输入地址后面的
?中输入修改后的数据输入完成以后按下回车,然后再输入
q即可退出
例
2.1.3.3 mm命令
作用
mm命令也是修改指定地址内存值的,使用mm修改内存值的时候地址会 自增 ,- 而使用命 令
nm的话地址 不会自增 ,使用mm修改完一个值后会修改下一个值
1 mm[.b, .w, .l] address
例
2.1.3.4 mw命令
作用
mw用于使用一个指定的数据填充一段内存 (mw命令令同样以.b、.w和.l来指定操作格式)
1 mw[.b, .w, .l] address value [count]
address表示要填充的内存起始地址value为要填充的数据count是填充的长度
例 使用
.l格式将以0X80000000为起始地址的0x10个内存块 填充为0X0A0A0A0A
2.1.3.5 cp命令
作用
cp是数据拷贝命令,用于将DRAM中的数据从一段内存拷贝到另一段内存中,或者把Nor Flash中的数据拷贝到DRAM中
1 cp[.b, .w, .l] source target count
source为源地址target为目的地址count为拷贝的长度
例 将
0x80000000处的地址拷贝到0X80000100处
2.1.3.6 cmp命令
cmp是比较命令,用于比较两段内存的数据是否相等
1 cmp [.b, .w, .l] addr1 addr2 count
addr1为第一段内存首地址addr2为第二段内存首地址
例
2.1.4 网络操作命令
ARM板的调试经常用到网络功能,uboot提供了许多用于网络调试的指令 如dhcp、ping、nfs、tftpboot- 将开发板和电脑连接在同一个交换机或者路由器下,方便进行网络调试
关于网络的环境变量
配置环境变量
1 | setenv ipaddr 192.168.1.50 |
2.1.4.1 ping 命令
作用
通过
ping命令可以验证网络能否使用
[注]
网络连接情况:
- 网线连接开发板和电脑网口
- pc主机 通过wifi连接外网
Ubuntu虚拟机 使用两个网络驱动器 , 一个用于连接主机 , 一个用于连接开发板
- uboot ping不通Ubuntu主机的情况 , 可以参考这篇文章 👇
( 开发板 ping 虚拟机 )
2.1.4.2 bhcp命令
dhcp可以用于从路由器获取IP地址,前提得开发连接到路由器(交换机自动分配IP)上
2.1.4.3 nfs命令
nfs (Network File System)网络文件系统,通过nfs可以在计算机之间通过网络来分享资源可以通过网络将编译好的
linux镜像和设备树文件下载 到DRAM中,然后直接运行
1 nfs [loadAddress] [[hostIPaddr:]bootfilename]
loadAddress是要保存的 DRAM地址[[hostIPaddr:]bootfilename]是要下载的文件地址。
例
在
uboot中输入以下内容
1 nfs 80800000 192.168.1.226:/home/yzt/samba_share/zdyz_example/nfs/zImage
运行结果:
可以看到已经烧录的
80800000地址的内容 和zImage源文件的内容一致
[注]
出现
nfs挂载不成功的
可以参考这篇文章 嵌入式Linux开发——解决uboot无法使用nfs服务从ubuntu中下载文件
2.1.4.4 tftp命令
作用
tftp命令的作用和nfs命令一样,都是用于通过网络下载东西到DRAM中,只是tftp命令使用的TFTP协议,Ubuntu主机作为 TFTP服务器。
1 tftpboot [loadAddress] [[hostIPaddr:]bootfilename]
配置xinetd服务器
修改
/etc/xinetd.d/tftp
1 | server tftp |
改变传输目录
修改
/etc/default/tftpd-hpa文件传输信息
1 | TFTP_USERNAME="tftp" |
开始传输
在
uboot中 使用命令tftp 80800000 zImage进行传输
2.1.5 EMMC和SD卡命令
uboot支持EMMC和SD卡,提供EMMC和SD卡的操作命令 , 即mmc命令
mmc 命令
注意 不能 写
SD卡或者EMMC的前两个块(扇区),里面保存着分区表
2.1.6 FAT 格式文件系统操作命令
- 有时候需要在
uboot中对SD卡或者EMMC中存储的文件进行操作,这时候就要用到文件操作命令- 如:
fatinfo、fatls、fstype、fatload和fatwrite,这些命令只支持FAT格式的文件系统
2.1.6.1 fatinfo 命令
作用
用于查询指定 MMC 设置指定分区的文件系统信息
1 fatinfo <interface> [<dev[:part]>]
nterface表示接口,比如mmcdev是查询的设备号part是要查询的分区。
例 查询
emmc分区1 的文件系统信息
2.1.6.2 fatls 命令
作用
查询 FAT 格式设备的目录和文件信息
1 fatls <interface> [<dev[:part]>] [directory]
nterface表示接口,比如mmcdev是查询的设备号part是要查询的分区directory是要查询的目录
例 查询分区1的文件
- 可以看见 ,
emmc的分区1中存放着8个文件
2.1.6.3 fstype 命令
作用
查看
MMC设备某个分区的文件系统格式
1 fstype <interface> <dev>:<part>
例 查询
emmc三个分区的文件系统
- 从上图可以看出,分区 0格式未知,因为分区 0存放的
uboot,并且分区 0没有格式化- 以文件系统格式未知。分区 1的格式为
fat, 分区 1用于存放 linux镜像和设备树。- 分区2的格式为儿
ext4, 用于存放linux 的根文件系统 (roofs)
2.1.6.4 fatload 命令
作用
将指定的文件读取到
DRAM中
1 fatload <interface> [<dev[:part]> [<addr> [<filename> [bytes [pos]]]]]
interface为接口,如mmcdev是设备号part是分区addr是保存在DRAM中的起始地址filename是要读取的文件名字bytes表示读取多少字节的数据
例 将
EMMC分区 1中的zImage文件读取到DRAM中的0X80800000地址处
1 fatload mmc 1:1 80800000 zImage
2.1.6.5 fatwrite 命令
作用
将
DRAM中的数据写入到MMC设备中(使用前需要修改板子配置头文件,使能写文件系统,使能如下)
1
fatwirte命令用于将DRAM中的数据写入到MMC设备中,命令格式如下:
1 fatwrite <interface> <dev[:part]> <addr> <filename> <bytes>
interface为接口,如mmcdev是设备号part是分区addr是保存在DRAM中的起始地址
2.1.7 EXT 格式文件系统操作命令
uboot有ext2和ext4这两种格式的文件系统的操作命令,常用的就五个命令,分别为:ext2load、ext2ls、ext4load、ext4ls和ext4write
| 命令 | 功能 |
|---|---|
| ext2load | 从 ext2 文件系统中读文件数据 |
| ext2ls | 以查询文件和目录 |
| ext4load | 从 ext4 文件系统中读文件数据 |
| ext4ls | 以查询文件和目录 |
| ext4write | 写文件数据 |
2.1.8 BOOT 操作命令
uboot有相关的boot(引导)命令来启动Linux,常用的跟boot有关的命令有:bootz、bootm和boot
2.1.8.1 bootz命令
作用
将
Linux镜像和设备树文件存到DRAM中就行,然后使用bootz命令来启动
1 bootz [addr [initrd[:size]] [fdt]]
addr是Linux镜像文件在DRAM中的位置initrd是initrd文件在DRAM中的地址
2.1.8.2 boot 命令
boot命令也是用来启动Linux系统的,只是boot会读取环境变量bootcmd来启动Linux系统bootcmd是一个很重要的环境变量,这个环境变量保存着引导命令,就是启动的命令集合
2.1.9 其他命令
2.1.9.1 reset 命令
reset命令顾名思义就是复位的,输入reset即可复位重启
2.1.9.2 go命令
go命令用于跳到指定的地址处执行应用
1 go addr
addr是应用在DRAM中的首地址
2.1.9.3 run命令
run命令用于运行环境变量中定义的命令,比如可以通过run bootcmd来运行bootcmd中 的启动命令,但是run命令最大的作用在于运行我们自定义的环境变量
1 run 环境变量
2.1.9.4 mset 命令
mtest命令是一个简单的内存读写测试命令,可以用来测试自己开发板上的DDR
1 mtest [start [end [pattern [iterations]]]]
start是要测试的DRAM开始地址end是结束地址
例
1 | mtest 80000000 80001000 |






















