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 命令的详细信息和可用选项。

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

目录
相关文章
|
6天前
|
Linux
Linux系统之whereis命令的基本使用
Linux系统之whereis命令的基本使用
50 23
Linux系统之whereis命令的基本使用
|
6天前
|
缓存 网络协议 Linux
PCIe 以太网芯片 RTL8125B 的 spec 和 Linux driver 分析备忘
本文详细介绍了 Realtek RTL8125B PCIe 以太网芯片的规格以及在 Linux 中的驱动安装和配置方法。通过深入分析驱动源码,可以更好地理解其工作原理和优化方法。在实际应用中,合理配置和优化驱动程序可以显著提升网络性能和稳定性。希望本文能帮助您更好地使用和管理 RTL8125B,以满足各种网络应用需求。
52 33
|
20天前
|
网络协议 Unix Linux
深入解析:Linux网络配置工具ifconfig与ip命令的全面对比
虽然 `ifconfig`作为一个经典的网络配置工具,简单易用,但其功能已经不能满足现代网络配置的需求。相比之下,`ip`命令不仅功能全面,而且提供了一致且简洁的语法,适用于各种网络配置场景。因此,在实际使用中,推荐逐步过渡到 `ip`命令,以更好地适应现代网络管理需求。
33 11
|
1月前
|
缓存 安全 Linux
Linux系统查看操作系统版本信息、CPU信息、模块信息
在Linux系统中,常用命令可帮助用户查看操作系统版本、CPU信息和模块信息
109 23
|
2月前
|
Linux
linux查看目录下的文件夹命令,find查找某个目录,但是不包括这个目录本身?
通过本文的介绍,您应该对如何在 Linux 系统中查看目录下的文件夹以及使用 `find` 命令查找特定目录内容并排除该目录本身有了清晰的理解。掌握这些命令和技巧,可以大大提高日常文件管理和查找操作的效率。 在实际应用中,灵活使用这些命令和参数,可以帮助您快速定位和管理文件和目录,满足各种复杂的文件系统操作需求。
140 8
|
2月前
|
存储 运维 监控
Linux--深入理与解linux文件系统与日志文件分析
深入理解 Linux 文件系统和日志文件分析,对于系统管理员和运维工程师来说至关重要。文件系统管理涉及到文件的组织、存储和检索,而日志文件则记录了系统和应用的运行状态,是排查故障和维护系统的重要依据。通过掌握文件系统和日志文件的管理和分析技能,可以有效提升系统的稳定性和安全性。
57 7
|
存储 Unix Linux
浅入分析Linux
Linux 操作系统必须完成的两个主要目的 与硬件部分交互, 为包含在硬件平台上的所有底层可编程部件提供服务 为运行在计算机系统上的应用程序(即所谓的用户空间)提供执行环境 一些操作系统运行所有的用户程序都直接与硬件部分进行交互, 比如典型的MS-DOS。
1029 0
|
3月前
|
Linux 网络安全 数据安全/隐私保护
Linux 超级强大的十六进制 dump 工具:XXD 命令,我教你应该如何使用!
在 Linux 系统中,xxd 命令是一个强大的十六进制 dump 工具,可以将文件或数据以十六进制和 ASCII 字符形式显示,帮助用户深入了解和分析数据。本文详细介绍了 xxd 命令的基本用法、高级功能及实际应用案例,包括查看文件内容、指定输出格式、写入文件、数据比较、数据提取、数据转换和数据加密解密等。通过掌握这些技巧,用户可以更高效地处理各种数据问题。
342 8
|
3月前
|
监控 Linux
如何检查 Linux 内存使用量是否耗尽?这 5 个命令堪称绝了!
本文介绍了在Linux系统中检查内存使用情况的5个常用命令:`free`、`top`、`vmstat`、`pidstat` 和 `/proc/meminfo` 文件,帮助用户准确监控内存状态,确保系统稳定运行。
1128 6
|
3月前
|
Linux
在 Linux 系统中,“cd”命令用于切换当前工作目录
在 Linux 系统中,“cd”命令用于切换当前工作目录。本文详细介绍了“cd”命令的基本用法和常见技巧,包括使用“.”、“..”、“~”、绝对路径和相对路径,以及快速切换到上一次工作目录等。此外,还探讨了高级技巧,如使用通配符、结合其他命令、在脚本中使用,以及实际应用案例,帮助读者提高工作效率。
194 3