U-Boot 常用命令(四)

139 阅读3分钟

我们继续介绍 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 是要擦除的块的数量
  • 未完待续……

更多内容