linux系统中u-boot命令的EMMC和SD卡操作命令分析

简介: linux系统中u-boot命令的EMMC和SD卡操作命令分析

今天给大家详细的介绍一下u-boot命令之EMMC和SD卡操作的mmc命令使用。希望这篇文章对大家有所帮助。

uboot 支持 EMMC 和 SD 卡,因此也要提供 EMMC 和 SD 卡的操作命令。一般认为 EMMC和 SD 卡是同一个东西,所以没有特殊说明,统一使用 MMC 来代指 EMMC 和 SD 卡。

uboot 中常用于操作 MMC 设备的命令为“mmc”。

mmc 是一系列的命令,其后可以跟不同的参数,在u-boot的命令行输入“?mmc”即可查看 mmc 有关的命令,如下:

=> ? mmc
mmc - MMC sub system
Usage:
mmc info - display info of the current MMC device
mmc read addr blk# cnt
mmc write addr blk# cnt
mmc erase blk# cnt
mmc rescan [mode]
mmc part - lists available partition on current mmc device
mmc dev [dev] [part] [mode] - show or set current mmc device [partition] and set mode
  - the required speed mode is passed as the index from the following list
    [MMC_LEGACY, MMC_HS, SD_HS, MMC_HS_52, MMC_DDR_52, UHS_SDR12, UHS_SDR25,
    UHS_SDR50, UHS_DDR50, UHS_SDR104, MMC_HS_200, MMC_HS_400, MMC_HS_400_ES]
mmc list - lists available devices
mmc wp [PART] - power on write protect boot partitions
  arguments:
   PART - [0|1]
       : 0 - first boot partition, 1 - second boot partition
         if not assigned, write protect all boot partitions
mmc hwpartition <USER> <GP> <MODE> - does hardware partitioning
  arguments (sizes in 512-byte blocks):
   USER - <user> <enh> <start> <cnt> <wrrel> <{on|off}>
        : sets user data area attributes
   GP - <{gp1|gp2|gp3|gp4}> <cnt> <enh> <wrrel> <{on|off}>
        : general purpose partition
   MODE - <{check|set|complete}>
        : mode, complete set partitioning completed
  WARNING: Partitioning is a write-once setting once it is set to complete.
  Power cycling is required to initialize partitions after set to complete.
mmc setdsr <value> - set DSR register value

从上面列出的参数详情可以看出, mmc 后面跟不同的参数可以实现不同的功能,如下所示:

命令 功能
mmc info 显示MMC/SD卡设备的详细信息,包括容量、速度等
mmc read 从MMC/SD卡读取数据到指定的加载地址
mmc wirte 将指定加载地址的数据写入MMC/SD卡的指定扇区
mmc erase 擦除MMC/SD卡上指定扇区的数据
mmc rescan 重新扫描MMC/SD卡设备,以便在U-Boot中重新识别它们mmc part显示当前选择的MMC/SD卡设备的分区表信息
mmc dev 选择并初始化指定编号的MMC/SD卡设备
mmc list 列出系统中检测到的所有MMC设备的信息
mmc wp 设置 MMC/SD卡的写保护状态
mmc hwpartition MMC/SD卡上进行分区操作
mmc setdsr 设置MMC/SD卡的数据寄存器(DSR)的值

mmc命令中最常用的8个命令如下:

  1. mmc info 命令
  2. mmc rescan 命令
  3. mmc list 命令
  4. mmc dev 命令
  5. mmc part 命令
  6. mmc read 命令
  7. mmc write 命令
  8. mmc erase 命令

1、mmc info 命令

mmc info命令用于显示当前选定的 MMC 设备的相关信息,包括设备编号、制造商 ID、OEM、卡名称、总容量、总扇区数、块大小、传输速度、版本信息、是否支持高容量(High Capacity)等,如下所示:

=> mmc info
Device: FSL_SDHC
Manufacturer ID: 3
OEM: 5344
Name: SC16G 
Bus Speed: 49500000
Mode: SD High Speed (50MHz)
Rd Block Len: 512
SD version 3.0
High Capacity: Yes
Capacity: 14.8 GiB
Bus Width: 4-bit
Erase Group Size: 512 Bytes

每个字段的解释如下:

  • Device: FSL_SDHC:设备类型,这里是 FSL_SDHC,指示是由飞思卡尔(Freescale)提供的 SD 控制器
  • Manufacturer ID: 3:制造商 ID,表示制造商的标识号
  • OEM: 5344:OEM 信息,指示原始设备制造商的标识号
  • Name: SC16G:MMC 卡名称,这里是 SC16G
  • Bus Speed: 49500000:总线速度,表示数据传输的速率
  • Mode: SD High Speed (50MHz):模式,指示 MMC 卡所处的传输模式,这里是 SD 高速模式,传输速率为 50MHz
  • Rd Block Len: 512:读取块长度,表示 MMC 卡的块大小
  • SD version 3.0:SD 卡版本,这里是版本 3.0
  • High Capacity: Yes:是否支持高容量,指示 MMC 卡是否支持高容量存储
  • Capacity: 14.8 GiB:容量,表示 MMC 卡的总容量
  • Bus Width: 4-bit:总线宽度,表示 MMC 卡的数据传输总线宽度
  • Erase Group Size: 512 Bytes:擦除组大小,表示 MMC 卡的擦除操作的最小单位大小

输出中的信息可能会有所不同,具体取决于系统中存在的 MMC 设备和 U-Boot 版本。

2、mmc rescan 命令

mmc rescan命令用于重新扫描系统中的 MMC 设备,并更新设备的编号、容量、速度等信息。这对于在 U-Boot 中添加或移除 MMC 设备后进行设备状态更新很有用。

mmc rescan

3、mmc list 命令

mmc list命令用于列出检测到的 MMC 设备,如下所示:

=> mmc list
FSL_SDHC: 0 (SD)
FSL_SDHC: 1

从上面可以看出,当前开发板有两个 MMC 设备:

  • FSL_SDHC:0 是 SD卡
  • FSL_SDHC:1(eMMC)是 EMMC。

4、 mmc dev 命令

mmc dev命令用于将所选的 MMC 设备设置为当前设备,并在后续的操作中使用该设备。这对于在多个 MMC 设备存在的系统中选择要操作的设备非常有用。命令用法如下:

mmc dev [dev] [part]

参数含义如下:

  • [dev]用来设置要切换的MMC设备号
  • [part]是分区号

[part]分区号也可以不写,不写的话默认为0分区,如下所示:

=> mmc dev 1    /*切换到EMMC,0为SD卡, 1为eMMC*/
switch to partitions #0, OK
mmc1(part 0) is current device

切换到 eMMC 成功, mmc0 为当前的 MMC 设备,输入命令“mmc info”可查看 eMMC 的信息,如下所示:

=> mmc dev 1 
switch to partitions #0, OK
mmc1(part 0) is current device
=> mmc info
Device: FSL_SDHC
Manufacturer ID: 15
OEM: 0
Name: 8GTF4R 
Bus Speed: 49500000
Mode: MMC High Speed (52MHz)
Rd Block Len: 512
MMC version 5.1
High Capacity: Yes
Capacity: 7.3 GiB
Bus Width: 4-bit
Erase Group Size: 512 KiB
HC WP Group Size: 8 MiB
User Capacity: 7.3 GiB WRREL
Boot Capacity: 4 MiB ENH
RPMB Capacity: 512 KiB ENH
Boot area 0 is not write protected
Boot area 1 is not write protected

每个字段的解释如下:

  • Device: FSL_SDHC: 设备类型,这里指示为飞思卡尔(Freescale)提供的 SD 控制器
  • Manufacturer ID: 15: 制造商 ID,表示制造商的标识号
  • OEM: 0: OEM 信息,指示原始设备制造商的标识号
  • Name: 8GTF4R: MMC 卡名称,这里是 "8GTF4R"
  • Bus Speed: 49500000: 总线速度,表示数据传输的速率
  • Mode: MMC High Speed (52MHz): 模式,指示 MMC 卡所处的传输模式,这里是 MMC 高速模式,传输速率为 52MHz
  • Rd Block Len: 512: 读取块长度,表示 MMC 卡的块大小
  • MMC version 5.1: MMC 卡版本,这里是版本 5.1
  • High Capacity: Yes: 是否支持高容量,指示 MMC 卡是否支持高容量存储
  • Capacity: 7.3 GiB: 容量,表示 MMC 卡的总容量
  • Bus Width: 4-bit: 总线宽度,表示 MMC 卡的数据传输总线宽度
  • Erase Group Size: 512 KiB: 擦除组大小,表示 MMC 卡的擦除操作的最小单位大小
  • HC WP Group Size: 8 MiB: 高容量写保护组大小,表示高容量 MMC 卡的写保护操作的最小单位大小
  • User Capacity: 7.3 GiB WRREL: 用户可用容量,表示用户可用的存储容量,考虑了保留区域和写保护
  • Boot Capacity: 4 MiB ENH: 引导区容量,表示 MMC 卡用于引导目的的存储容量
  • RPMB Capacity: 512 KiB ENH: RPMB(Replay Protected Memory Block)容量,表示 MMC 卡用于安全存储和认证的特定存储容量
  • Boot area 0 is not write protected: 引导区域 0 未写保护
  • Boot area 1 is not write protected: 引导区域 1 未写保护

5、mmc part 命令

mmc part命令用于查看当前 MMC 设备的分区信息,可以看到每个分区的起始扇区、大小和类型,如下所示:

=> mmc part
Partition Map for MMC device 1  --   Partition Type: DOS
Part    Start Sector    Num Sectors    UUID        Type
  1     20480           262144         e94b5ec8-01 0c
  2     282624          14987264       e94b5ec8-02 83

输出中的每一行表示一个分区的信息,包括以下字段:

  • Part: 分区编号
  • Start Sector: 分区的起始扇区
  • Num Sectors: 分区的扇区数量
  • UUID: 分区的唯一标识符
  • Type: 分区的类型

从上面可以看出,此时 EMMC 有两个分区:

  • 扇区 20480~ 262144 为第一个分区
  • 扇区 282644~14987264 为第二个分区。

如果 EMMC 里面烧写了 Linux 系统的话, EMMC 是有3 个分区:

  • 第 0 个分区存放 uboot,
  • 第 1 个分区存放 Linux 镜像文件和设备树,
  • 第 2 个分区存放根文件系统。

但是在上图中只有两个分区,那是因为第 0 个分区没有格式化,所以识别不出来,实际上第 0 个分区是存在的。一个新的 SD 卡默认只有一个分区,那就是分区 0。

6、mmc read 命令

mmc read命令用于从 MMC(多媒体卡)设备读取数据并将其加载到指定的内存地址。通过执行 mmc read 命令,您可以从 MMC 设备的指定扇区开始读取指定长度的数据,并将其加载到内存中供后续使用。命令如下所示:

mmc read addr blk# cnt

每个参数的含义如下:

  • addr 是数据读取到 DRAM 中的地址
  • blk 是要读取的块起始地址(十六进制),一个块是 512字节,这里的块和扇区是一个意思,在 MMC 设备中我们通常说扇区
  • cnt 是要读取的块数量(十六进制)

示例如下:

=> mmc read 0x80800000 0x600 0x10
MMC read: dev # 1, block # 1536, count 16 ... 16 blocks read: OK

从 EMMC 的第 1536(0x600)个块开始,读取 16(0x10)个块的数据到 DRAM 的0X80800000 地址处。

7、mmc write 命令

mmc write命令用于将数据从内存写入到 MMC 设备的指定扇区中。通过执行 mmc write 命令,您可以将指定内存地址处的数据写入到 MMC 设备的指定扇区中。命令如下所示:

mmc write addr blk# cnt

每个参数的含义如下:

  • addr 是要写入 MMC 中的数据在 DRAM 中的起始地址
  • blk 是要写入 MMC 的块起始地址(十六进制)
  • cnt 是要写入的块大小,一个块为 512 字节

示例如下:

=> mmc write 0x80800000 0x2 0x32E
MMC write: dev # 1, block # 2, count 814 ... 814 blocks written: OK

向 eMMC 中写入742 个块,如果有小数的话就要加 1 个块。使用命令“mmc write”从 eMMC 分区 0 第 2 个块(扇区)开始烧写,一共烧写 742(0x2E6)个块。扩展一下,u-boot可以利用 mmc write更新eMMC中的uboot,可以使用如下命令:

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

注:没事千万不要写 SD 卡或者 EMMC 的前两个块(扇区),里面保存着分区表!

8、mmc erase 命令

mmc erase命令用于在 MMC 设备上执行擦除操作。通过执行 mmc erase 命令,您可以擦除 MMC 设备上的指定扇区或分区。命令如下:

mmc erase blk# cnt

每个参数的含义如下:

  • blk 为要擦除的起始块
  • cnt 是要擦除的数量

注:没事不要用 mmc erase 来擦除 MMC 设备!!!

请注意,具体可用的命令和选项可能会根据所使用的 U-Boot 版本和硬件平台而有所不同。某些平台和版本可能不支持此命令。在使用此命令之前,请确保您的 U-Boot 版本和硬件平台支持它。您可以使用 U-Boot 的 help mmc 命令来获取更多关于 mmc 命令的详细信息和可用选项。

今天的内容到这就结束了,感谢大家的收看,如果觉得文章写的还不错,可以点击“赞赏”。

目录
打赏
0
0
1
0
45
分享
相关文章
|
2天前
|
linux命令详细说明以及案例
本文介绍了常用的 Linux 命令及其详细说明和示例,包括:`ls`(列出目录内容)、`cd`(更改目录)、`rm` 和 `mv`(删除与移动文件)、`grep`(搜索文本)、`cat`(显示文件内容)以及 `chmod`(更改文件权限)。每个命令均配有功能描述、选项说明及实际案例,帮助用户更好地掌握 Linux 命令的使用方法。
82 56
Linux系统资源管理:多角度查看内存使用情况。
要知道,透过内存管理的窗口,我们可以洞察到Linux系统运行的真实身姿,如同解剖学家透过微观镜,洞察生命的奥秘。记住,不要惧怕那些高深的命令和参数,他们只是你掌握系统"魔法棒"的钥匙,熟练掌握后,你就可以骄傲地说:Linux,我来了!
67 27
|
5天前
|
Linux基础:文件和目录类命令分析。
总的来说,这些基础命令,像是Linux中藏匿的小矮人,每一次我们使用他们,他们就把我们的指令准确的传递给Linux,让我们的指令变为现实。所以,现在就开始你的Linux之旅,挥动你的命令之剑,探索这个充满神秘而又奇妙的世界吧!
49 19
|
19天前
|
Linux 常用文件查看命令
`cat` 命令用于连接文件并打印到标准输出,适用于快速查看和合并文本文件内容。常用示例包括:`cat file1.txt` 查看单个文件,`cat file1.txt file2.txt` 合并多个文件,`cat &gt; filename` 创建新文件,`cat &gt;&gt; filename` 追加内容。`more` 和 `less` 命令用于分页查看文件,`tail` 命令则用于查看文件末尾内容,支持实时追踪日志更新,如 `tail -f file.log`。
45 5
Linux 常用文件查看命令
|
2天前
|
linux常用命令详细说明以及案例
本文介绍了Linux中几个常用的命令及其用法,包括:`ls`(列出目录内容)、`cd`(切换目录)、`mkdir`(创建目录)、`rm -p`(删除目录及内容)和`mv`(移动或重命名文件/目录)。每个命令都配有详细说明、语法格式、常见选项及实用案例,帮助用户更好地理解和使用这些基础命令。内容源自[linux常用命令详细说明以及案例](https://linux.ciilii.com/show/news-285.html)。
|
9天前
|
Linux系统ext4磁盘扩容实践指南
这个过程就像是给你的房子建一个新的储物间。你需要先找到空地(创建新的分区),然后建造储物间(格式化为ext4文件系统),最后将储物间添加到你的房子中(将新的分区添加到文件系统中)。完成这些步骤后,你就有了一个更大的储物空间。
58 10
|
10天前
|
微服务2——MongoDB单机部署4——Linux系统中的安装启动和连接
本节主要介绍了在Linux系统中安装、启动和连接MongoDB的详细步骤。首先从官网下载MongoDB压缩包并解压至指定目录,接着创建数据和日志存储目录,并配置`mongod.conf`文件以设定日志路径、数据存储路径及绑定IP等参数。之后通过配置文件启动MongoDB服务,并使用`mongo`命令或Compass工具进行连接测试。此外,还提供了防火墙配置建议以及服务停止的两种方法:快速关闭(直接杀死进程)和标准关闭(通过客户端命令安全关闭)。最后补充了数据损坏时的修复操作,确保数据库的稳定运行。
41 0
浅入分析Linux
Linux 操作系统必须完成的两个主要目的 与硬件部分交互, 为包含在硬件平台上的所有底层可编程部件提供服务 为运行在计算机系统上的应用程序(即所谓的用户空间)提供执行环境 一些操作系统运行所有的用户程序都直接与硬件部分进行交互, 比如典型的MS-DOS。
1037 0
|
2月前
|
Linux系统之whereis命令的基本使用
Linux系统之whereis命令的基本使用
103 24
Linux系统之whereis命令的基本使用
|
26天前
|
Linux od命令
本文详细介绍了Linux中的 `od`命令,包括其基本语法、常用选项和示例。通过这些内容,你可以灵活地使用 `od`命令查看文件内容,提高分析和调试效率。确保理解每一个选项和示例的实现细节,应用到实际工作中时能有效地处理各种文件查看需求。
55 19

热门文章

最新文章