你的位置:首页 > 信息动态 > 新闻中心
信息动态
联系我们

嵌入式系统想学习笔记之五--uboot之常用命令

2021/12/23 10:15:48

1. 常用操作命令

1..1 网络命令

使用网络命令之前,首先需要设置开发板的 IP 地址和 mac 地址:

=> setenv ipaddr 192.168.0.232

=> setenv ethaddr aa:bb:cc:dd:ee:ff

=> saveenv

我们使用 PC 机和开发板进行通信测试,所以需要设置 PC 机的 IP 地址为同一网段的:192.168.0.102。

1)ping

Ping 命令主要用于测试网络通信状态,设置好开发板 IP 和 PC 机 IP 之后,使用网线连接好开发板和

PC 机,使用 ping 命令:

=> ping 192.168.0.102

 

host is alive,表示网络通信畅通。

2)tftp

前面章节已经讲解了 tftp 相关知识,简单来说,tftp 就是一种网络文件传输协议,在 uboot 中也集成了 tftp 协议。在 uboot 阶段使用 tftp 主要是用于将文件(一般是 uboot 镜像、内核镜像、设备树)从 Ubuntu 系统中传输到开发板的内存中,方便调试或者更新镜像。如何在 Ubuntu 系统上安装 tftp 服务器,这里不再赘述。我们直接使用在 Ubuntu 上建立好的 tftp 共享文件夹,将一个内核和设备树放入其中。

仍然设置开发板 ip 地址为 192.168.0.232,Ubuntu 系统 ip(即 tftp 服务器 ip)设置为 192.168.0.103 在板子端设置 serverip 为 192.168.0.103

=> setenv ipaddr 192.168.0.232

=> setenv ethaddr aa:bb:cc:dd:ee:ff

=> setenv serverip 192.168.0.103

=> saveenv

设置环境变量完成之后,使用 ping 命令测试网络连接状态:

 

 网络通了之后,就可以使用 tftp 命令将 Ubuntu 的 tftp 共享文件夹中的 zImage 和.dtb 下载到开发板内存中,使用命令将内核 zImage 下载到内存的 0x80800000 地址:

=> tftp 80800000 zImage

 使用命令将.dtb 下载到内存的 0x83000000 地址:

=> tftp 83000000

OKMX6ULL-S2-emmc-1024x600.dtb

 下载完成之后,我们就可以使用 bootz 命令启动内核了,具体的使用方法,我们在后面 boot 启动命名章节进行讲解。

1..2 内存命令

1)  md

md 是 memory display 的缩写,即显示内存数据。

使用 help md 命令查看 md 使用方法:

 

其中,.b 表示要显示 8 位数据,.w 表示显示 16 位数据,.l 表示显示 32 位数据。

Address 表示显示的数据地址,of objects 表示显示的数据个数(注意是十六进制)。

例如:显示内存地址 0X83000000 地址中的 2 个 8 位数据:

=> md.b 83000000 2

 

显示内存地址 0X83000000 地址中的 1 个 16 位数据:

=> md.w 83000000 1

 

如果不加.b,.w,.l,也不设置显示数据的个数的话,默认是显示 1 个 32 位数据:

=> md 83000000

 

2 mw

mw 是 memory write 的缩写,即向内存中写入数据。

使用 help mw 命令显示 mw 的使用方法:

显然跟 md 命令使用方式类似,只是多了一个 value,即要写入的数据,而 count 是指要在起始地址为 address 的内存中写入 value 的个数。

直接举例说明,向内存 0x80000000 的地址写入 2 个 8 位数据 a8,然后使用 md 命令查看是否写入成功:

=> mw.b 80000000 a8 2

=> md.b 80000000 2

 显然写入数据成功。

1..3 eMMC/SD 卡命令

eMMC 和 SD 卡(TF 卡)是同一类设备,以下命令二者是通用,本章节主要以 eMMC 举例说明命令的使用。

使用 help mmc 可以看到 mmc 相关命令列表以及其对应命令用法:

1mmc dev

使用 mmc list 可以看到当前系统挂载的所有 mmc 设备:

 

本系统的 mmc 设备有设备 0 和设备 1,设备 1 是 eMMC 设备,设备 0 就是 SD 卡(TF 卡)设备。

使用 mmc dev 命令可以查看当前选中正在使用的 mmc 设备,mmc dev

使用方法为: mmc dev [dev] [part]

[dev]是指要选择的设备,[part]是指所选设备的分区。

如果不加[dev]和[part]两个参数,则显示当前选中设备,如果不加[part]参数,则默认使用所选设备的0 分区。

  

当前选中正在使用的是mmc1设备的0分区,即eMMC Flash的0分区,此处的0分区其实是指eMMC Flash 的用户分区(用户分区的概念在以下 mmc write 章节会有说明)。使用 mmc dev 切换到使用 SD 设备: mmc dev 0

  

切换成功之后,现在使用的就是 SD 卡(TF 卡)设备,此时使用的 mmc 命令都是对 SD 卡进行的操作。为了使用 eMMC 进行命令使用举例演示,我们再将 mmc 设备更换为 eMMC: mmc dev 1

2mmc info

该命令是查看当前 mmc 设备相关信息: mmc info 或者 mmcinfo

  

3mmc read

mmc read 命令是读 mmc 中的数据到内存地址。使用方法为 mmc read addr blk# cnt,其中 addr 是将要存放数据的内存地址,blk#是要读的 mmc 的

起始块号,cnt 是块数目。举例,从 mmc 第 5 块开始读取 2 块的数据到内存 0x80800000: mmc read 80800000 5 2

每一块是 512 个字节,读取 2 块,就是读取 2*512=1024 个字节。

4mmc write 顾名思义,mmc write 是向 mmc 中写入数据,mmc write addr blk# cnt,其中 addr 是存放数据的内存地址,blk#是要写的 mmc 的起始块号,cnt 是块数目。

举例,我们现在使用 mmc write 将最新编译的 u-boot.imx 更新到 mmc 中。

第一步,我们需要先将新的 u-boot.imx 存放到内存中,前面章节我们讲过使用 tftp 将 Ubuntu 的 tftp共享文件夹中的文件下载到内存中,我们现在就使用 tftp 将 u-boot.imx 文件下载到内存 0x80800000 地址。然后第二步,就是用 mmc write 命令将 u-boot.imx 写入到 mmc 的指定 uboot 分区中。

我们通过操作 eMMC 设备演示 mmc write 命令的使用,在进行操作之前,我们先简单了解一下 eMMC分区的相关知识,eMMC 设备一般是由 BOOT Area Patrtition1、BOOT Area Patrtition2、RPMB Partition、 General Purpose Partitions(可分 4 个) 、User Data Area 这几个物理分区组成,对于 RPMB Partition、General Purpose Partitions 这两种分区我们没有涉及到这里不作介绍,我们涉及到的是 BOOT Area Patrtition1、BOOT Area Patrtition2、User Data Area,其中 BOOT Area Patrtition1、BOOT Area Patrtition2是存放 uboot 镜像的分区,两者选其一作为实际存放 uboot 的分区,OKMX6ULL-S2 使用的是 BOOT Area Patrtition1; User Data Area (UDA) 用户分区通常是 eMMC 中最大的一个分区,是实际产品中最主要的存储区域,OKMX6ULL-S2 在烧写时,会对此用户分区进行软件分区,分成 RAW、fat 和 ext3 格式的三个逻辑分区。了解了 eMMC 分区的相关概念之后,我们就可以进行如下操作,验证测试 mmc write 命令。按照前面 tftp 命令章节,配置好 tftp 网络环境之后,我们重新编译一个 uboot.imx 镜像,并且放入到 Ubuntu 的 tftp 共享文件夹中,并保证网络连接状态良好,在开发板使用 tftp 将新的 uboot 镜像下载到内存 0x80800000 处:

=> tftp 80800000 u-boot.imx

 下载完成,之后使用 mmc write 写入到 eMMC 分区 BOOT Area Patrtition1 中,根据 mmc write addr blk# cnt 使用方法,addr=80800000,blk#是要烧写的起始地址, uboot 在 eMMC boot 分区的偏移为 1K=2*512 字节,即 blk#=2,cnt 是烧写的数据长度,根据 tftp 传输完成之后的打印信息,知道 uboot.imx 镜像大小为 429056 字节=838*512 字节,所以 cnt 应该等于 838,十六进制为 0x346。选择 mmc 设备及 BOOT Area Patrtition1 分区(最后一个参数为“1”,表示 BOOT Area Patrtition1 分区,为“2”时,表示选择的是 BOOT Area Patrtition2 分区,为“0”时,表示选择的是 UDA 用户分区):

=> mmc dev 1 1

 

=> mmc write 80800000 2 346

烧写完成之后,使用 reset 开发板,查看重启之后的打印信息:

 

 

通过版本信息看到 uboot 更新成功。

5mmc erase

mmc erase 是擦除 mmc 中数据。使用方法:

mmc erase blk# cnt,其中 blk#是要擦除的 mmc 起始地址,cnt 要擦除的块数量。一般情况很少使用mmc erase 命令进行 mmc 擦除操作。

后面常用命令还有一章,包含nand命令,文件系统命令,启动命令。