我们继续介绍 U-Boot 的常用命令。本节主要介绍 MMC 相关命令,在 U-Boot 中,一般将 eMMC 和 SD 卡视为一种设备,MMC 命令同样适用于 SD 卡。
MMC 命令
- 输入 ?mmc 即可查看与 mmc 有关的命令:
- U-Boot 支持的 MMC 命令总结如下:
命令 | 描述 |
---|---|
mmc info | 查看 MMC 设备的相关信息 |
mmc read | 读取 MMC 中的数据到 RAM 中 |
mmc wirte | 将 RAM 中的数据写入 MMC 设备 |
mmc erase | 擦除 MMC 设备数据 |
mmc rescan | 扫描 MMC 设备 |
mmc part | 查看 MMC 设备的分区 |
mmc dev | 切换 MMC 设备 |
mmc list | 查看当前所有 MMC 设备 |
mmc hwpartition | 设置 MMC 设备的分区 |
mmc bootbus…… | 设置指定 MMC 设备的 BOOT_BUS_WIDTH 域的值 |
mmc bootpart…… | 设置指定 MMC 设备的 boot 和 RPMB 分区的大小 |
mmc partconf…… | 设置指定 MMC 设备的 PARTITION_CONFG 域的值 |
mmc rst | 复位 MMC 设备 |
mmc setdsr | 设置 DSR 寄存器的值。 |
查看 MMC 设备
- U-Boot 启动日志可以看到当前设备为 eMMC:
- mmc list 命令用于查看当前一共多少 MMC 设备:
- mmc info 命令用于查看当前 MMC 设备的信息:
- mmc part 命令用于查看当前 MMC 设备的分区:
切换 MMC 设备
- mmc dev 命令用于切换当前 MMC 设备:
mmc dev [dev] [part] - show or set current mmc device [partition]
# [dev] 是要切换到的 MMC 设备号,[part] 是分区号,默认为分区 0
- 如执行命令切换到 SD 卡:
mmc dev 0
- 查看 SD 卡设备信息:
- 查看 SD 卡设备分区:
MMC 读命令
- mmc read 命令用于读取 mmc 设备的数据到 RAM 中:
mmc read addr blk# cnt
# addr 是数据读取到 RAM 中的地址
# blk 是要读取的块(扇区)的起始地址(十六进制),一个块是 512 字节
# cnt 是要读取的块(扇区)的数量(十六进制)
- 如读取 eMMC 某处数据,执行命令如下:
mmc dev 1 0 # 切换到 eMMC 分区 0
mmc read 80800000 600 10 # 从 eMMC 的第 1536(0x600)个块开始,读取 16(0x10)个块的数据到 RAM 的 0x80800000 地址处
- 通过 md.b 命令查看 0x80800000 处的数据
- 根据数据内容可以猜到这些数据为 U-Boot 的环境变量,即 eMMC 中 U-Boot 环境变量的存储起始地址就是第 1536*512 = 786432 字节处。
MMC 写命令
- mmc wirte 命令用于将 RAM 中的数据写入到 MMC 设备中:
mmc write addr blk# cnt
# addr 是要写入 MMC 中的数据在 RAM 中的起始地址
# blk 是要写入 MMC 的块的起始地址(十六进制)
# cnt 是要写入的块的数量(十六进制),一个块为 512 字节
- 从 TFTP 服务端创建一个测试文件 test.txt,文件大小共 12 个字节:
- 在 U-Boot 中执行 tftp 命令将其下载到 RAM 中:
- 执行写命令再将其写到 SD 卡中:
mmc dev 0 0 # 切换到 SD 卡 0 分区
mmc write 80800000 2 1 # SD 卡一个块 512 个字节,从第 2 个块开始烧写,一共烧写 1 个块
- 通过读命令将 SD 卡数据读到 RAM 中查看:
- 注意:不要写 SD 卡或者 eMMC 的前两个块(扇区),里面保存着分区表!
MMC 擦除命令
- mmc erase 命令用于擦除 MMC 设备数据,慎用!
mmc erase blk# cnt
# blk 为要擦除的起始块
# cnt 是要擦除的块的数量
- 未完待续……