目录

1.信息查询命令

2.环境变量操作命令

3.内存操作命令

①md 命令

②nm命令

④mw命令

⑤cp命令

 ⑥cmp命令

4.网络操作命令

①ping 

②dhcp

③nfs

④tftp

5.EMMC操作命令

①mmc info 

②mmc rescan

③mmc list

④mmc dev

⑤mmc part

⑥mmc read

⑦mmc write

⑧mmc erase擦除 MMC 设备的指定块

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

①fatinfo

②fatls

③fstype

④fatload

⑤fatwrite

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

8.BOOT 操作命令

①bootz

②bootm 命令

③boot

9.其他常用命令

①reset

②go

③run


进入 uboot 的命令行模式后输入“help”或者“?”,然后按下回车即可查看当前 uboot 所支持的命令,

输入“help(或?) 命令名” 可以查看命令的详细用法:

? bootz 或 help bootz


 

1.信息查询命令

常用的和信息查询有关的命令有 3 个: bdinfo、 printenv 和 version

bdinfo : 查看板子信息

printenv :输出环境变量信息

version :查看 uboot 的版本号

 uboot 中的环境变量都是字符串,环境变量它的作用就和变量一样。比如 bootdelay 这个环境变量就表示 uboot 启动延时时间,默认 bootdelay=3,也就默认延时 3秒。前面说的 3 秒倒计时就是由 bootdelay 定义的,如果将 bootdelay 改为 5 的话就会倒计时 5s了。 uboot 中的环境变量是可以修改的
 

2.环境变量操作命令

修改环境变量:

setenv :设置或者修改环境变量的值,也可以用于新建变量和删除变量

saveenv :保存修改后的环境变量

一般环境变量是存放在外部 flash 中的,uboot 启动的时候会将环境变量从 flash 读取到 DRAM中。所以使用命令 setenv 修改的是 DRAM中的环境变量值,修改以后要使用 saveenv 命令将修改后的环境变量保存到 flash 中,否则的话uboot 下一次重启会继续使用以前的环境变量值

删除环境变量也是使用命令 setenv,要删除一个环境变量只要给这个环境变量赋空值即可
 

1.环境变量 bootdelay 改为 10:

setenv bootdelay 10
saveenv

uboot emmc分区表 uboot emmc命令_debian

使用命令 saveenv 保存修改后的环境变量的话会有保存过程提示信息,根据提示可以看出环境变量保存到了 MMC(1)中,MMC设备中。保存到SD卡,MMC(0)

2.新建变量和删除变量

setenv anthor mingfei
 saveenv

uboot emmc分区表 uboot emmc命令_p2p_02

uboot emmc分区表 uboot emmc命令_p2p_03

setenv anthor

saveenv
删除命令给环境变量赋空值即可

 

uboot emmc分区表 uboot emmc命令_uboot emmc分区表_04



3.内存操作命令

内存操作命令用于直接对 DRAM 进行读写操作的,常用的内存操作命令有 md、 nm、mm、 mw、 cp 和 cmp
 

md:md[.b, .w, .l] address [# of objects]  显示内存值
 nm:nm [.b, .w, .l] address  修改指定地址的内存值,地址不会自增
 mm:mm [.b, .w, .l] address 修改指定地址内存值的,地址会自增
 mw:mw [.b, .w, .l] address value [count] 使用一个指定的数据填充一段内存
 cmp:cmp [.b, .w, .l] addr1 addr2 count 比较两段内存的数据是否相等

①md 命令

md 命令用于显示内存值,格式如下

md[.b, .w, .l] address [# of objects]
 [.b .w .l]对应 byte,word 和 long,分别以 1 个字节、 2 个字节、 4 个字节来显示内存值
 address 查看的内存起始地址 [# of objects]查看的数据长度

注:这个数据长度单位不是字节,而是跟你所选择的显示格式有关

设置要查看的内存长度为20(十六进制为 0x14),如果显示格式为.b 的话那表示 20 个字节;如果显示格式为.w 的话就表示 20 个 word,也就是 20*2=40 个字节;如果显示格式为.l 的话就表示 20 个 long,也就是20*4=80 个字节

uboot 命令中的数字都是十六进制的!不是十进制的!

查看以 0X80000000 开始的 20 个字节的内存值,显示格式为.b 
指令:md.b 80000000 14


uboot emmc分区表 uboot emmc命令_p2p_05


②nm

nm 命令用于修改指定地址的内存值,命令格式如下:

nm [.b, .w, .l] address
  修改80000000的地址:
nm.l 80000000


输入上述命令,会出现如图,80000000 表示现在要修改的内存地址, 12345678表示地址 0x80000000 现在的数据,?后面就可以输入要修改后的数据 0x0500e031,输入完成以后按下回车,然后再输入‘q’即可退出

uboot emmc分区表 uboot emmc命令_p2p_06

uboot emmc分区表 uboot emmc命令_debian_07

若不退出,一直修改则修改的是通一个地址,地址不会自增

mm 命令也是修改指定地址内存值的,使用 mm 修改内存值的时候地址会自增,而使用命令 nm 的话地址不会自增

使用格式:
mm [.b, .w, .l] address 修改指定地址内存值的,地址会自增

uboot emmc分区表 uboot emmc命令_linux_08

 使用命令 md 查看修改后的值

uboot emmc分区表 uboot emmc命令_uboot emmc分区表_09


④mw命令

命令 mw 用于使用一个指定的数据填充一段内存,命令格式如下:

mw [.b, .w, .l] address value [count]
 [.b, .w, .l]:指定操作格式
 address 表示要填充的内存起始地址value为要填充的数据
 count 是填充的长度


 

将以 0X80000000 为起始地址的 0x10 个内存块(0x10 * 4=64 字节)填充为 0X0A0A0A0A mw.l 80000000 0A0A0A0A 10

uboot emmc分区表 uboot emmc命令_环境变量_10


⑤cp命令

cp 是数据拷贝命令,用于将 DRAM 中的数据从一段内存拷贝到另一段内存中,或者把 Nor Flash 中的数据拷贝到 DRAM 中

cp [.b, .w, .l] source target count
 source 为源地址 target 为目的地址
 count为拷贝的长度


 

将 0x80000000 处的地址拷贝到 0X80000100 处,长度为 0x10 个内存块(0x10 * 4=64 个字节)

cp.l 80000000 80000100 10

uboot emmc分区表 uboot emmc命令_uboot emmc分区表_11

 先使用 md.l 命令打印出地址 0x80000000 和 0x80000100 处的数据,然后使用命令cp.l将0x80000100处的数据拷贝到0x80000100处。最后使用命令md.l查看0x80000100处的数据有没有变化,检查拷贝是否成功

 ⑥cmp命令

cmp 是比较命令,用于比较两段内存的数据是否相等,命令格式如下:
 

cmp [.b, .w, .l] addr1 addr2 count
 addr1 为第一段内存首地址addr2 为第二段内存首地址
count 为要比较的长度
比较 0x80000000 和 0X80000100 两个地址数据是否相等,比较长度为 0x10 个内存块(16 * 4=64 个字节)
cmp.l 80000000 80000100 10


uboot emmc分区表 uboot emmc命令_环境变量_12


4.网络操作命令

uboot 是支持网络的,在移植 uboot 的时候一般都要调通网络功能,因为在移植 linux kernel 的时候需要使用到 uboot 的网络功能做调试。uboot 支持大量的网络相关命令,比如 dhcp、ping、 nfs 和 tftpboot
 

在使用 uboot 的网络功能之前先用网线将开发板的 ENET2 接口和电脑连接起来。设置网络环境变量:

uboot emmc分区表 uboot emmc命令_uboot emmc分区表_13

setenv ipaddr 192.168.10.50
setenv ethaddr 88:2f:ac:7b:cc:b0
setenv gatewayip 192.168.10.1

setenv netmask 255.255.255.0
setenv serverip 192.168.10.100
saveenv

 确保Ubuntu主机和开发板的IP地址在同一个网段内。mac的地址设置要与ip地址相对应

uboot emmc分区表 uboot emmc命令_环境变量_14

 

①ping 

开发板的网络能否使用,是否可以和服务器(Ubuntu 主机)进行通信,通过 ping 命令就可以验证,直接 ping 服务器的 IP 地址即可

uboot emmc分区表 uboot emmc命令_debian_15

 

②dhcp

dhcp 用于从路由器获取 IP 地址,前提是开发板连接到路由器上的,如果开发板是和电脑直连的,那么 dhcp 命令就会失效
 

③nfs

nfs(Network File System)网络文件系统,通过 nfs 可以在计算机之间通过网络来分享资源,将 linux 镜像和设备树文件放到 Ubuntu 中,然后在 uboot 中使用 nfs 命令将 Ubuntu 中的 linux 镜像和设备树下载到开发板的 DRAM 中。作用:为了方便调试 linux 镜像和设备树,也称网络调试

一般使用 uboot 中的 nfs 命令将 Ubuntu 中的文件下载到开发板的 DRAM 中,在使用之前需要开启 Ubuntu 主机的 NFS 服务,并且要新建一个 NFS 使用的目录,所有要通过NFS 访问的文件都需要放到这个 NFS 目录中。uboot 中的 nfs 命令格式如下所示:

nfs [loadAddress] [[hostIPaddr:]bootfilename]

loadAddress 是要保存的 DRAM 地址, [[hostIPaddr:]bootfilename]是要下载的文件地址

④tftp

tftp 命令的作用和 nfs 命令一样,都是用于通过网络下载东西到 DRAM 中,只是 tftp 命令使用的 TFTP 协议, Ubuntu 主机作为 TFTP 服务器

uboot 中的 tftp 命令格式如下:

tftpboot [loadAddress] [[hostIPaddr:]bootfilename]
loadAddress 是 文 件 在 DRAM 中 的存 放 地 址 ,[[hostIPaddr:]bootfilename]是要从Ubuntu 中下载的文件
 

区别:tftp 命令不需要输入文件在 Ubuntu 中的完整路径,只需要输入文件名即可
 

将内核、设备树文件下载到开发板内存中

tftp 80800000 zImage
tftp 83000000 imx6ull-alientek-emmc.dtb

uboot emmc分区表 uboot emmc命令_linux_16


 

5.EMMC操作命令

uboot 支持 EMMC 和 SD 卡,一般认为 EMMC和 SD 卡是同一个东西,所以没有特殊说明,使用 MMC 来代指 EMMC 和 SD 卡。uboot 中常用于操作 MMC 设备的命令为“mmc”

mmc 后面跟不同的参数可以实现不同的功能

uboot emmc分区表 uboot emmc命令_环境变量_17

①mmc info 

mmc info 命令用于输出当前选中的 mmc info 设备的信息,输入命令“mmc info”即可

uboot emmc分区表 uboot emmc命令_uboot emmc分区表_18

②mmc rescan

mmc rescan 命令用于扫描当前开发板上所有的 MMC 设备,包括 EMMC 和 SD 卡
 

③mmc list

mmc list 命令用于来查看当前开发板一共有几个 MMC 设备

uboot emmc分区表 uboot emmc命令_linux_19

: FSL_SDHC:0 和 FSL_SDHC:1 (eMMC),这是因为我现在用的是 EMMC 版本的核心板,加上 SD 卡一共有两个 MMC 设备, FSL_SDHC:0 是 SD卡,FSL_SDHC:1(eMMC)是 EMMC。默认会将 EMMC 设置为当前 MMC 设备

④mmc dev

mmc dev 命令用于切换当前 MMC 设备,命令格式如下:

mmc dev [dev] [part]
 [dev]用来设置要切换的 MMC 设备号, [part]是分区号。如果不写分区号的话默认为分区 0
 切换到 SD 卡
 mmc dev 0 //切换到 SD 卡, 0 为 SD 卡, 1 为 eMMC

uboot emmc分区表 uboot emmc命令_环境变量_20


⑤mmc part

SD 卡或者 EMMC 会有多个分区,可以使用命令“mmc part”来查看其分区,比如查看 EMMC 的分区情况,输入如下命令
 

mmc dev 1

mmc part

uboot emmc分区表 uboot emmc命令_linux_21

EMMC 有两个分区, 第一个分区起始扇区为 20480,长度为 262144 个扇区; 第二个分区起始扇区为 282624,长度为 14594048 个扇区

将 EMMC 的分区 2 设置为当前 MMC 设备
mmc dev 1 2

uboot emmc分区表 uboot emmc命令_uboot emmc分区表_22

如果 EMMC 里面烧写了 Linux 系统的话, EMMC 是有 3 个分区的,第 0 个分区存放 uboot,第 1 个分区存放Linux 镜像文件和设备树,第 2 个分区存放根文件系统
 

上图中只有两个分区,那是因为第 0 个分区没有格式化,所以识别不出来,实际上第 0 个分区是存在的

⑥mmc read

mmc read 命令用于读取 mmc 设备的数据,命令格式如下:
 

mmc read addr blk# cnt
 addr 是数据读取到 DRAM 中的地址blk 是要读取的块起始地址(十六进制),一个块是 512字节,这里的块和扇区是一个意思,在 MMC 设备中我们通常说扇区,
cnt 是要读取的块数量(十六进制)
  从 EMMC 的第 1536(0x600)个块开始,读取 16(0x10)个块的数据到 DRAM 的0X80800000 地址处,命令如下:
mmc dev 1 0    //切换到mmc分区0
mmc read 80800000 10


uboot emmc分区表 uboot emmc命令_debian_23

 通过 md.b 命令查看 0x80800000 处的数据,查看6*512=8192(0x2000)个字节的数据,

uboot emmc分区表 uboot emmc命令_debian_24

 EMMC 核心板 uboot 环境变量的存储起始地址就是1536*512=786432。 所以,打印出环境变量       

⑦mmc write

要将数据写到 MMC 设备里面,可以用于在uboot中更新 uboot     

mmc write addr blk# cnt
addr 是要写入 MMC 中的数据在 DRAM 中的起始地址

块起始地址(十六进制),
 

如果要在 uboot 中更新 EMMC 对应的 uboot

mmc dev 1 0
tftp 80800000 u-boot.imx
mmc write 80800000 2 32E
mmc partconf 1 1 0 0//切换到 EMMC 分区 0
//下载 u-boot.imx 到 DRAM
//烧写 u-boot.imx 到 EMMC 中
//分区配置, EMMC 需要这一步!


⑧mmc erase
擦除 MMC 设备的指定块
 

mmc erase blk# cnt
blk 为要擦除的起始块, cnt 是要擦除的数量 ,一般不推荐使用
 

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

在 uboot 中对 SD 卡或者 EMMC 中存储的文件进行操作,需要用到跟文件操作相关的命令有:fatinfo、 fatls、 fstype、 fatload 和 fatwrite,但是这些文件操作命令只支持 FAT 格式的文件系统
 

①fatinfo

fatinfo 命令用于查询指定 MMC 设备分区的文件系统信息,格式如下:
 

fatinfo <interface> [<dev[:part]>]
interface 表示接口,比如 mmc, dev 是查询的设备号

part 是要查询的分区
 

查询 EMMC 分区 1 的文件系统信息
fatinfo mmc 1:1

uboot emmc分区表 uboot emmc命令_debian_25

 EMMC 分区 1 的文件系统为 FAT32 格式的

②fatls

fatls 命令用于查询 FAT 格式设备的目录和文件信息,命令格式如下:

fatls <interface> [<dev[:part]>] [directory]
interface 是要查询的接口,比如 mmc, dev 是要查询的设备号

part 是要查询的分区

directory是要查询的目录

查询 EMMC 分区 1 中的所有的目录和文件

fatls mmc 1:1

uboot emmc分区表 uboot emmc命令_debian_26

 emmc 的分区 1 中存放着 8 个文件

③fstype

fstype 用于查看 MMC 设备某个分区的文件系统格式

fstype <interface> <dev>:<part>

EMMC 核心板上的 EMMC 默认有 3 个分区

uboot emmc分区表 uboot emmc命令_debian_27

从上图可以看出,分区 0 格式未知,因为分区 0 存放的 uboot,并且分区 0 没有格式化,所
以文件系统格式未知。分区 1 的格式为 fat,分区 1 用于存放 linux 镜像和设备树。分区 2 的格式为 ext4,用于存放 Linux 的根文件系统(rootfs)

④fatload

fatload 命令用于将指定的文件读取到 DRAM 中,命令格式如下:

fatload <interface> [<dev[:part]> [<addr> [<filename> [bytes [pos]]]]]
 interface 为接口,比如 mmc, dev 是设备号, part 是分区addr 是保存在 DRAM 中的起始地址
filename 是要读取的文件名字
bytes 表示读取多少字节的数据,如果 bytes 为 0 或者省略的话表示读取整个文件
pos 是要读的文件相对于文件首地址的偏移,如果为 0 或者省略的话表示从文件首地址开始读取
  将 EMMC 分区 1 中的 zImage 文件读取到 DRAM 中的0X80800000 地址处


 

⑤fatwrite

uboot 默认没有使能 fatwrite 命令,需要修改板子配置头文件,找到自己开发板对应的配置头
文件然后添加如下一行宏定义来使能 fatwrite 命令:

#define CONFIG_FAT_WRITE /* 使能 fatwrite 命令 */
fatwirte 命令用于将 DRAM 中的数据写入到 MMC 设备中,命令格式如下:
  fatwrite <interface> <dev[:part]> <addr> <filename> <bytes>
 filename 是写入的数据文件名字, bytes 表示要写入多少字节的数据
通过 fatwrite 命令在 uboot 中更新 linux 镜像文件和设备树

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

uboot 有 ext2 和 ext4 这两种格式的文件系统的操作命令,常用的就四个命令,分别为:
ext2load、 ext2ls、 ext4load、 ext4ls 和 ext4write。这些命令的含义和使用与 fatload、 fatls 和 fatwrite一样,只是 ext2 和 ext4 都是针对 ext 文件系统的

8.BOOT 操作命令

uboot 的本质工作是引导 Linux,所以 uboot 有相关的 boot(引导)命令来启动 Linux。常用的跟 boot 有关的命令有: bootz、 bootm 和 boot

①bootz

要启动 Linux,需要先将 Linux 镜像文件拷贝到 DRAM 中,如果使用到设备树的话也需要将设备树拷贝到 DRAM 中。可以从 EMMC 或者 NAND 等存储设备中将 Linux 镜像和设备树文件拷贝到 DRAM,也可以通过 nfs 或者 tftp 将 Linux 镜像文件和设备树文件下载到 DRAM 中

只要能将 Linux 镜像和设备树文件存到 DRAM 中就行,然后使用 bootz 命令来启动, bootz 命令用于启动 zImage 镜像文件, bootz 命令格式如下:

bootz [addr [initrd[:size]] [fdt]]
 addr 是 Linux 镜像文件在 DRAM 中的位置initrd 是 initrd 文件在DRAM 中的地址,如果不使用 initrd 的话使用‘-’代替即可
fdt 是设备树文件在 DRAM 中的地址
②bootm 命令
bootm 用于启动 uImage 镜像文件,上面是启动zImage镜像文件
bootm [addr [initrd[:size]] [fdt]]
 addr 是 uImage 在 DRAM 中的首地址, initrd 是 initrd 的地址, fdt 是设备树(.dtb)文件在 DRAM 中的首地址

③boot

boot 命令用来启动 Linux 系统的,只是 boot 会读取环境变量 bootcmd 来启动 Linux 系统, bootcmd 是一个环境变量
 

使用 tftp 命令从网络启动 Linux
setenv bootcmd 'tftp 80800000 zImage; tftp 83000000 imx6ull-14x14-emmc-7-1024x600-c.dtb;bootz 80800000 - 83000000'
 saveenv
 boot

设置 bootcmd 为“tftp 80800000 zImage; tftp 83000000 imx6ull-14x14-emmc-7-1024x600-c.dtb; bootz 80800000 -83000000”,然后使用 saveenv 将 bootcmd 保存起来。然后直接输入 boot 命令即可从网络启动Linux 系统
 

9.其他常用命令

①reset

输入“reset”即可复位重启uboot

②go

go 命令用于跳到指定的地址处执行应用,命令格式如下:
 

go addr [arg ...]
 addr 是应用在 DRAM 中的首地址

③run

run 命令用于运行环境变量中定义的命令, 但是 run 命令最大的作用在于运行自定义的环境变量
  定义环境变量 mybootemmc 表示从 emmc 启动,定义 mybootnet 表示从网络启动
 setenv mybootemmc 'fatload mmc 1:1 80800000 zImage; fatload mmc 1:1 83000000 imx6ull-14x14-emmc-7-1024x600-c.dtb;bootz 80800000 - 83000000'

 setenv mybootnet 'tftp 80800000 zImage; tftp 83000000imx6ull-14x14-emmc-7-1024x600-c.dtb;bootz 80800000 - 83000000'saveenv
需要运行“run mybootxxx(xxx 为 emmc、 net 或 nand)”即可④mtest
 内存读写测试命令,可以用来测试自己开发板上的 DDR mtest [start [end [pattern [iterations]]]]
start是要测试的DRAM 开始地址, end 是结束地址
 测试 0X80000000~0X80001000这段内存,输入“mtest 80000000 80001000”