学向勤中得,萤窗万卷书。这篇文章主要讲述uboot使用命令整理(2016.03)相关的知识,希望能为你提供帮助。
文章目录
- ??一、uboot启动信息??
- ??二、uboot使用命令??
??1. 帮助命令????2. 信息查询类命令????3. 环境变量操作命令????4. 内存类操作命令(DRAM)????4. 网络相关命令????5. eMMC/SD card相关操作命令????6. FAT格式文件系统操作命令????7. EXT格式文件系统操作命令????8. Nand设备操作命令????9. 启动常用操作命令????10. 其它常用命令??
一、uboot启动信息系统启动时,按下任意键进入uboot命令行:
文章图片
- uboot版本和编译时间:2016.03
- CPU型号和主频
- CPU类型:工业级
- 复位原因:POR
- 板子名称:MX6ULL 14x14 EVK
- I2C:就绪
- DRAM大小:512MB
- MMC:有两个控制器,就绪
- LCD型号:ATK 7寸LCD,1024*600分辨率,24位色彩深度(RGB888)
- 标准输入:串口
- 标准输出:串口
- 标准错误:串口
- 切换到eMMC的第0个分区上,并使用eMMC
- 网口:使用FEC1
- 用户提示:正常启动,uboot将从eMMC中读取环境变量和参数信息,准备启动linux内核
- 倒计时:3s,等待用户按下任意键,若按下则进入命令行,否则正常启动
(1)查看当前可用命令:
uboot中可用的命令在移植时是?用户可配置?的。
help
(2)查看某条命令使用帮助:
help bootz
文章图片
2. 信息查询类命令(1)查看板子信息
bdinfo
文章图片
(3)查看uboot版本号
version
文章图片
当前uboot版本号是2016.03,编译时间为20200115,编译器为arm-poky-linux-gnueabi-gcc 5.3.0。
3. 环境变量操作命令(1)打印环境变量
printenv
文章图片
(2)打印指定环境变量的值
printenv < 环境变量名称>
(3)修改环境变量(修改DRAM中的加载值)
setenv < 环境变量名称> < 值>
如果值中有空格,则需要用单引号引起来:
文章图片
(4)保存环境变量(修改Flash中保存的值)
saveenv
文章图片
(5)新建环境变量
setenv < 新的环境变量名称> < 环境变量值>
saveenv
(6)删除环境变量
setenv < 要删除的环境变量名称>
saveenv
4. 内存类操作命令(DRAM)
- uboot中的数值都是?十六进制?的,可以不用加0x
- uboot中的数据长度是?以个为单位,而不是字节?
md[.b .w .l] address [#of objects]
-
?
?.b .w .l?
?:按byte查看(1B)、按word查看(2B)、按long查看(4B) -
?
?address?
?:要查看的内存地址 -
?
?# of objects?
?:数据长度
文章图片
(2)修改指定地址的内存值(地址不会自增)
nm[.b .w .l] address
eg. 修改0x80000000地址处的数据为0x12345678:
文章图片
(3)修改指定地址的内存值(地址自增)
mm[.b .w .l] address
【uboot使用命令整理(2016.03)】eg. 修改0x80000000开始的三个连续long数据(3*4=12B):
文章图片
(4)使用指定数据填充一段内存
mw[.b .w .l] address value [count]
eg. 同样修改0x80000000开始的三个连续long数据(3*4=12B)为一样的值:
文章图片
(5)拷贝数据
该命令有两个作用:
- 将DRAM中的数据从一段内存拷贝到另一段内存中
- 将Nor Flash中的数据拷贝到DRAM中
cp [.b .w .l] source target count
eg. 将0x80000000处的数据拷贝到0x80000100处,长度为0x10个内存块(16 * 4 = 64B):
文章图片
(6)比较两段内存的数据是否相等
cmp[.b .w .l] addr addr2 count
eg. 比较刚刚拷贝的两段数据是否相等:
文章图片
4. 网络相关命令(1)网络环境设置
在使用网络之前需要先搭建网络环境,设置以下环境变量:
文章图片
这里设置如下:
文章图片
修改ubuntu主机地址:
文章图片
(2)ping命令
ping < ip>
开发板中ping windows主机:
文章图片
开发板中ping ubuntu主机:
文章图片
uboot中协议实现的原因,开发板不能被ping。
(3)dhcp命令
开发板连接到路由器时,可以使用dhcp命令获取ip,dhcp命令在获取到ip后,还会通过tftp来加载linux内核:
dhcp
文章图片
(4)nfs方式获取网络文件
确保nfs环境已搭建完成:??Ubuntu上搭建NFS??。
nfs [load address] [[hostip:]boot filename]
eg. 通过nfs方式从nfs服务器拉取zImage镜像文件,放到DRAM中的0x80800000处:
文章图片
?NFS root 测试正常,不知道一直为啥拉不到文件,后续再分析?!
(5)?tftp方式获取网络文件?
确保tftp环境搭建完成:。
tftp [address] [[serverip]:filename]
eg. 通过tftp方式从tftp服务器拉取zImage镜像文件,放到DRAM中的0x80800000处:
文章图片
因为之前已经设置了serverip环境变量,所以直接用文件名拉取就ok,真方便。
5. eMMC/SD card相关操作命令一般情况下,eMMC和SD Card可以当作同一类东西操作,统称为mmc。
uboot中的mmc命令参数汇总如下:
文章图片
文章图片
(1)输出当前选中的MMC设备信息
mmc info
文章图片
可以看出,当前选中使用的MMC设备是sd卡,版本为3.0,容量为14.6GB(16G卡),速度为50MHz,总线4位宽。
(2)扫描当前所有的MMC设备
mmc rescan
文章图片
(3)查看当前所有的MMC设备
mmc list
文章图片
可以看到当前开发板上有两个MMC设备,正在使用的是SD卡。
(4)切换当前MMC设备
mmc dev [dev][part]
- dev:要切换的MMC设备号
- part:分区号,不指定则默认0
文章图片
同时,切换后查看eMMC设备的信息:
文章图片
可以看出,当前选中使用的MMC设备是eMMC,版本为4.0,容量为7.3GB(8GB eMMC),速度为52MHz,总线8位宽。
(5)查看当前MMC设备分区
mmc part
① 查看eMMC的分区:
文章图片
可以看出,此时eMMC有两个分区,扇区 2048-65536为第一个分区,扇区67584-15202304为第二个分区。
如果eMMC中烧写了Linux系统,?eMMC应该有3个分区?,分区1存放uboot、分区2存放Linux镜像和设备树、分区3存放rootfs。
但是图中所示只查到了两个分区,这是因为?分区0并没有格式化,所以无法识别出来,但是分区0是存在的?。
② 查看SD卡的分区
文章图片
可以看出,此时SD卡只有一个分区,扇区8192-30552064。?一般SD卡默认只有一个分区,也就是分区0,但可以手动创建新的分区?。
(6)读取mmc设备的数据
mmc read addr blk# cnt
- addr:数据读取到DRAM的地址
- blk:要读取的块起始地址(十六进制),块和扇区是一个意思,一个块512字节
- cnt:要读取的?块数量?(十六进制)
文章图片
读取之后查看DRAM 0x80800000处是否有数据:
文章图片
这个结果有点离谱,应该是环境变量在eMMC中的存储位置有变化,还不熟,没法定位问题。
(7)向mmc写入数据
mmc write addr blk# cnt
同样,cnt是指?要写入的块的数量?。
?利用此命令,可以在uboot中通过网络下载文件到DRAM中,然后向SD卡或者eMMC中烧录镜像?。
(8)擦除mmc数据
提示:千万不能写SD卡或者eMMC的前两个块/扇区,里面保存有分区表。
mmc erase blk# cnt
6. FAT格式文件系统操作命令在uboot中还可以对SD卡或者eMMC中存储的文件进行操作,?前提是FAT类型文件系统?。
提示:没事不要轻易擦除mmc设备。
(1)查询指定mmc设备中指定分区的?文件系统信息?
fatinfo < interface> [< dev[:part]> ]
- interface:接口类型,比如mmc
- dev:查询的设备号
- part:查询的分区
文章图片
可以看到,eMMC分布1的文件系统为FAT32格式,分区名称boot。
(2)查询FAT格式设备的目录和文件信息
fatls < interface> [< dev[:part]> ] [dir]
- interface:接口类型,比如mmc
- dev:查询的设备号
- part:查询的分区
- dir:查询的目录
文章图片
(3)查询指定mmc设备中指定分区的?文件系统格式?
fstype < interface> < dev> :< part>
eg. 当前eMMC有三个分区(分区0无法识别),查看三个分区的文件系统格式:
文章图片
可以看到,分区0存放的uboot,没有格式化文件系统,所以无法识别;分区1的格式是fat,用于存放linux镜像和设备树;分区2的格式是ext4,用于存放linux的根文件系统。
(4)将指定的文件读取到DRAM中
fatload < interface> [< dev> :< part> < addr> [< filename> [bytes[pos]]]]
- interface:接口
- dev:设备号
- part:分区号
- addr:要加载的DRAM地址
- filename:文件名称
- bytes:读取?多少个字节?的数据,为0或省略则读取整个文件(十六进制)
- pos:要读的文件偏移,为0或省略则从文件首地址开始读取
文章图片
可以看出,uboot从emmc中读取了6785480字节的数据,速度为28.6MB/s。
(5)将数据写入文件系统
fatwrite < interface> [< dev> :< part> < addr> < filename> < bytes>
7. EXT格式文件系统操作命令uboot有ext2和ext4这两种格式的文件系统操作命令,常用的命令就4个,分别为:
uboot默认不使能fatwrite命令,需要在板子配置文件中通过定义宏??CONFIG_FAT_WRITE?
?开启。
- ext2
- ext2ls
- ext2load
- ext4
- ext4ls
- ext4load
- ext4write
eg. 查询eMMC分区2的所有目录和文件:
文章图片
8. Nand设备操作命令暂时没有nand的板子,后续补充。
9. 启动常用操作命令uboot的核心功能是启动linux系统,和启动相关的命令有3个:bootz、bootm、boot。
(1)启动?zImage?镜像文件
bootz [addr [initrd[:size][fdt]]]
- addr:zImage镜像文件在DRAM中的位置
- initrd:initrd文件在镜像文件在DRAM中的地址,不使用initrd的话用?
?-?
?代替即可 - fdt:设备树文件在DRAM中的地址
文章图片
(2)启动?uImage?镜像文件
不使用设备树:
bootm
使用设备树(和bootz一样):
bootm [addr [initrd[:size][fdt]]]
(3)boot一键启动
boot通过读取?环境变量bootcmd?来启动linux系统。
eg. 从网络加载启动linux系统:
setenv bootcmd tftp 80800000 zImage; tftp 83000000 imx6ull-14x14-emmc-10.1-1280x800-c.dtb; bootz 80800000 - 83000000
saveenv
boot
需要注意:uboot倒计时结束后,也是通过bootcmd参数来启动的,这样修改后,系统每次启动都会从tftp拉取文件!记得恢复为从eMMC中加载!
文章图片
eg. 从eMMC加载启动linux系统:
setenv bootcmd fatload mmc 1:1 80800000 zimage; fatload mmc 1:1 83000000 imx6ull-14x14-emmc-10.1-1280x800-c.dtb; bootz 80800000 - 83000000
saveenv
boot
文章图片
10. 其它常用命令(1)复位
reset
(2)跳转到DRAM指定地址处执行程序
go addr [arg ...]
(3)运行环境变量中定义的命令
run < cmd>
run命令最大的作用是运行我们自定义的命令,比如切换从emmc和网络启动过于麻烦,我们可以创建一个新的环境变量,不影响bootcmd环境变量的情况下,一条命令从emmc启动:
setenv bootemmc fatload mmc 1:1 80800000 zimage; fatload mmc 1:1 83000000 imx6ull-14x14-emmc-10.1-1280x800-c.dtb; bootz 80800000 - 83000000
saveenv
run bootemmc
或者,一条命令从网络启动:
setenv boottftp tftp 80800000 zImage; tftp 83000000 imx6ull-14x14-emmc-10.1-1280x800-c.dtb; bootz 80800000 - 83000000
saveenv
run boottftp
(4)内存读写测试命令
mteset [start [end [pattern [iterations]]]]
- start:起始地址
- end:结束地址
eg. 测试0x80000000 - 0x80001000这段内存:
文章图片
可以看到,已经读写测试了487次,需要按Ctrl+C结束。
推荐阅读
- 更改Dynamics 365 Online登录页面的风格提示背景等信息
- Python Pandas库教程(超详细)
- Java Agent(通灵之术)
- i.MX6ULL开发笔记 | 02 - i.MX6ULL启动方式与镜像格式
- 基于消息队列(RabbitMQ)实现延迟任务
- Nginx 日志格式
- 怎么通俗的理解Netty呢()
- oauth2.0授权码模式详解
- 详细了解 Synchronized 锁升级过程