uboot使用命令整理(2016.03)

Posted MCUlover666

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了uboot使用命令整理(2016.03)相关的知识,希望对你有一定的参考价值。



文章目录


​1. 帮助命令​​​​2. 信息查询类命令​​​​3. 环境变量操作命令​​​​4. 内存类操作命令(DRAM)​​​​4. 网络相关命令​​​​5. eMMC/SD card相关操作命令​​​​6. FAT格式文件系统操作命令​​​​7. EXT格式文件系统操作命令​​​​8. Nand设备操作命令​​​​9. 启动常用操作命令​​​​10. 其它常用命令​



一、uboot启动信息

系统启动时,按下任意键进入uboot命令行:

uboot使用命令整理(2016.03)_环境变量


  • 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,等待用户按下任意键,若按下则进入命令行,否则正常启动

二、uboot使用命令

1. 帮助命令


uboot中可用的命令在移植时是​用户可配置​的。


(1)查看当前可用命令:

help

(2)查看某条命令使用帮助:

help bootz

uboot使用命令整理(2016.03)_数据_02

2. 信息查询类命令

(1)查看板子信息

bdinfo

uboot使用命令整理(2016.03)_数据_03

(3)查看uboot版本号

version

uboot使用命令整理(2016.03)_操作命令_04

当前uboot版本号是2016.03,编译时间为20200115,编译器为arm-poky-linux-gnueabi-gcc 5.3.0。

3. 环境变量操作命令

(1)打印环境变量

print
printenv

uboot使用命令整理(2016.03)_操作命令_05

(2)打印指定环境变量的值

printenv <环境变量名称>

(3)修改环境变量(修改DRAM中的加载值)

setenv <环境变量名称> <值>

如果值中有空格,则需要用单引号引起来:

uboot使用命令整理(2016.03)_linux_06

(4)保存环境变量(修改Flash中保存的值)

saveenv

uboot使用命令整理(2016.03)_uboot_07

(5)新建环境变量

setenv <新的环境变量名称> <环境变量值>
saveenv

(6)删除环境变量

setenv <要删除的环境变量名称>
saveenv

4. 内存类操作命令(DRAM)


  • uboot中的数值都是​十六进制​的,可以不用加0x
  • uboot中的数据长度是​以个为单位,而不是字节

(1)显示内存值

md[.b .w .l] address [#of objects]

  • ​.b .w .l​​:按byte查看(1B)、按word查看(2B)、按long查看(4B)
  • ​address​​:要查看的内存地址
  • ​# of objects​​:数据长度

eg. 查看以0x80000000开始的​20个内存值​:

uboot使用命令整理(2016.03)_uboot_08

(2)修改指定地址的内存值(地址不会自增)

nm[.b .w .l] address

eg. 修改0x80000000地址处的数据为0x12345678:

uboot使用命令整理(2016.03)_linux_09

(3)修改指定地址的内存值(地址自增)

mm[.b .w .l] address

eg. 修改0x80000000开始的三个连续long数据(3*4=12B):

uboot使用命令整理(2016.03)_linux_10

(4)使用指定数据填充一段内存

mw[.b .w .l] address value [count]

eg. 同样修改0x80000000开始的三个连续long数据(3*4=12B)为一样的值:

uboot使用命令整理(2016.03)_linux_11

(5)拷贝数据

该命令有两个作用:


  • 将DRAM中的数据从一段内存拷贝到另一段内存中
  • 将Nor Flash中的数据拷贝到DRAM中

cp [.b .w .l] source target count

eg. 将0x80000000处的数据拷贝到0x80000100处,长度为0x10个内存块(16 * 4 = 64B):

uboot使用命令整理(2016.03)_linux_12

(6)比较两段内存的数据是否相等

cmp[.b .w .l] addr addr2 count

eg. 比较刚刚拷贝的两段数据是否相等:

uboot使用命令整理(2016.03)_环境变量_13

4. 网络相关命令

(1)网络环境设置

在使用网络之前需要先搭建网络环境,设置以下环境变量:

uboot使用命令整理(2016.03)_环境变量_14

这里设置如下:

uboot使用命令整理(2016.03)_linux_15

修改ubuntu主机地址

uboot使用命令整理(2016.03)_linux_16

(2)ping命令

ping <ip>

开发板中ping windows主机:

uboot使用命令整理(2016.03)_数据_17

开发板中ping ubuntu主机:

uboot使用命令整理(2016.03)_uboot_18

uboot中协议实现的原因,开发板不能被ping。

(3)dhcp命令

开发板连接到路由器时,可以使用dhcp命令获取ip,dhcp命令在获取到ip后,还会通过tftp来加载linux内核:

dhcp

uboot使用命令整理(2016.03)_uboot_19

(4)nfs方式获取网络文件


确保nfs环境已搭建完成:​​Ubuntu上搭建NFS​​。


nfs [load address] [[hostip:]boot filename]

eg. 通过nfs方式从nfs服务器拉取zImage镜像文件,放到DRAM中的0x80800000处:

uboot使用命令整理(2016.03)_uboot_20

NFS root 测试正常,不知道一直为啥拉不到文件,后续再分析​!

(5)​tftp方式获取网络文件


确保tftp环境搭建完成:。


tftp [address] [[serverip]:filename]

eg. 通过tftp方式从tftp服务器拉取zImage镜像文件,放到DRAM中的0x80800000处:

uboot使用命令整理(2016.03)_数据_21

因为之前已经设置了serverip环境变量,所以直接用文件名拉取就ok,真方便。

5. eMMC/SD card相关操作命令

一般情况下,eMMC和SD Card可以当作同一类东西操作,统称为mmc。

uboot中的mmc命令参数汇总如下:

uboot使用命令整理(2016.03)_uboot_22

uboot使用命令整理(2016.03)_环境变量_23

(1)输出当前选中的MMC设备信息

mmc info

uboot使用命令整理(2016.03)_uboot_24

可以看出,当前选中使用的MMC设备是sd卡,版本为3.0,容量为14.6GB(16G卡),速度为50MHz,总线4位宽。

(2)扫描当前所有的MMC设备

mmc rescan

uboot使用命令整理(2016.03)_linux_25

(3)查看当前所有的MMC设备

mmc list

uboot使用命令整理(2016.03)_uboot_26

可以看到当前开发板上有两个MMC设备,正在使用的是SD卡。

(4)切换当前MMC设备

mmc dev [dev][part]

  • dev:要切换的MMC设备号
  • part:分区号,不指定则默认0

eg. 切换当前使用eMMC设备:

uboot使用命令整理(2016.03)_uboot_27

同时,切换后查看eMMC设备的信息:uboot使用命令整理(2016.03)_数据_28

可以看出,当前选中使用的MMC设备是eMMC,版本为4.0,容量为7.3GB(8GB eMMC),速度为52MHz,总线8位宽。

(5)查看当前MMC设备分区

mmc part

① 查看eMMC的分区:

uboot使用命令整理(2016.03)_uboot_29

可以看出,此时eMMC有两个分区,扇区 2048-65536为第一个分区,扇区67584-15202304为第二个分区。

如果eMMC中烧写了Linux系统,​eMMC应该有3个分区​,分区1存放uboot、分区2存放Linux镜像和设备树、分区3存放rootfs。

但是图中所示只查到了两个分区,这是因为​分区0并没有格式化,所以无法识别出来,但是分区0是存在的​。

② 查看SD卡的分区

uboot使用命令整理(2016.03)_操作命令_30

可以看出,此时SD卡只有一个分区,扇区8192-30552064。​一般SD卡默认只有一个分区,也就是分区0,但可以手动创建新的分区​。

(6)读取mmc设备的数据

mmc read addr blk# cnt

  • addr:数据读取到DRAM的地址
  • blk:要读取的块起始地址(十六进制),块和扇区是一个意思,一个块512字节
  • cnt:要读取的​块数量​(十六进制)

eg. 从eMMC中第1536(0x600)个块开始,读取16个块(0x10)到DRAM的0x80800000地址处:

uboot使用命令整理(2016.03)_数据_31

读取之后查看DRAM 0x80800000处是否有数据:

uboot使用命令整理(2016.03)_数据_32

这个结果有点离谱,应该是环境变量在eMMC中的存储位置有变化,还不熟,没法定位问题。

(7)向mmc写入数据

mmc write addr blk# cnt

同样,cnt是指​要写入的块的数量​。

利用此命令,可以在uboot中通过网络下载文件到DRAM中,然后向SD卡或者eMMC中烧录镜像​。


提示:千万不能写SD卡或者eMMC的前两个块/扇区,里面保存有分区表。


(8)擦除mmc数据

mmc erase blk# cnt


提示:没事不要轻易擦除mmc设备。


6. FAT格式文件系统操作命令

在uboot中还可以对SD卡或者eMMC中存储的文件进行操作,​前提是FAT类型文件系统​。

(1)查询指定mmc设备中指定分区的​文件系统信息

fatinfo <interface> [<dev[:part]>]

  • interface:接口类型,比如mmc
  • dev:查询的设备号
  • part:查询的分区

eg. 查询eMMC分区1的文件系统信息:

uboot使用命令整理(2016.03)_uboot_33

可以看到,eMMC分布1的文件系统为FAT32格式,分区名称boot。

(2)查询FAT格式设备的目录和文件信息

fatls <interface> [<dev[:part]>] [dir]

  • interface:接口类型,比如mmc
  • dev:查询的设备号
  • part:查询的分区
  • dir:查询的目录

eg. 查询eMMC分区1的所有目录和文件:

uboot使用命令整理(2016.03)_环境变量_34

(3)查询指定mmc设备中指定分区的​文件系统格式

fstype <interface> <dev>:<part>

eg. 当前eMMC有三个分区(分区0无法识别),查看三个分区的文件系统格式:

uboot使用命令整理(2016.03)_linux_35

可以看到,分区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或省略则从文件首地址开始读取

eg. 将eMMC分区1中的zImage文件读取到DRAM中0x80800000处:

uboot使用命令整理(2016.03)_操作命令_36

可以看出,uboot从emmc中读取了6785480字节的数据,速度为28.6MB/s。

(5)将数据写入文件系统

fatwrite <interface> [<dev>:<part> <addr> <filename> <bytes>


uboot默认不使能fatwrite命令,需要在板子配置文件中通过定义宏​​CONFIG_FAT_WRITE​​开启。


7. EXT格式文件系统操作命令

uboot有ext2和ext4这两种格式的文件系统操作命令,常用的命令就4个,分别为:


  • ext2

  • ext2ls
  • ext2load

  • ext4

  • ext4ls
  • ext4load
  • ext4write


这些命令使用方法与fat类命令基本相同。

eg. 查询eMMC分区2的所有目录和文件:

uboot使用命令整理(2016.03)_linux_37

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中的地址

eg. 通过网络启动linux:

uboot使用命令整理(2016.03)_linux_38

(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中加载!


uboot使用命令整理(2016.03)_操作命令_39

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

uboot使用命令整理(2016.03)_uboot_40

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:结束地址

该命令可以用来简单的测试一些内存设备读写,比如DDR。

eg. 测试0x80000000 - 0x80001000这段内存:

uboot使用命令整理(2016.03)_linux_41

可以看到,已经读写测试了487次,需要按Ctrl+C结束。


以上是关于uboot使用命令整理(2016.03)的主要内容,如果未能解决你的问题,请参考以下文章

uboot研读笔记 | 12 - uboot目录结构分析(2016.03版本)

uboot研读笔记 | 13 - uboot编译构建Makefile分析研读(2016.03版本)

u-boot-2016.03 支持yaffs2文件系统烧写之添加nand write.yaffs2命令

uboot研读笔记 | 14 - uboot启动流程分析(2016.03版本)

uboot | 移植NXP官方uboot到imx6ull开发板(2016.03)

uboot | 移植NXP官方uboot到imx6ull开发板(2016.03)