Linux kernel mmc 框架说明,包括mmc_test使用方法

1.Linux 总线模型

        Linux下的任何驱动在内核中最终都抽象为bus, driver以及device三者间的相互作用。

        总线是处理器和一个或多个设备之间的通道,在设备模型中,所有的设备都通过总线相连接。总线将设备和驱动绑定,在系统每注册一个设备的时候,会遍历该总线上的driver list,通过busmath函数寻找与之匹配的驱动;相反的,在系统每注册一个驱动的时候,会便利该总线上的device 寻找与之匹配的设备,而匹配由总线的match函数完成。一但匹配,则会调用总线的probe函数。

        在此模型下,如果存在实际总线当然很好,比如mmc总线,i2c总线和spi总线,相应的devicedriver都可以直接注册在总线上。但是总是有一些设备和总线无关,为此,linux kernel引入了platform 虚拟总线,

Platform总线是一种虚拟的总线,相应的设备则为platform_device,通过platform_driver_register;而驱动则为platform_driver通过platform_driver_register 注册。内核中该总线定义如下:

struct bus_type platform_bus_type = {

       .name            = "platform",

       .dev_groups= platform_dev_groups,

       .match          = platform_match,

       .uevent         = platform_uevent,

       .pm        = &platform_dev_pm_ops,

};

    platform_总线match采用名称匹 配的方式,即driverdevice两者的name一样则认为该device对应该driver,详见下图:


 

2.MMC 简介

MMC

MMC全称MultiMedia Card,由西门子公司和SanDisk公司1997年推出的多媒体记忆卡标准。MMC卡尺寸为32mm x24mm x 1.4mm,它将存贮单元和控制器一同做到了卡上,智能的控制器使得MMC保证兼容性和灵活性。

MMC卡具有MMCSPI两种工作模式,MMC模式是默认工作模式,具有MMC的全部特性。而SPI模式则是MMC协议的一个子集,主要用于低速系统。

 

SD

        SD卡全称Secure DigitalMemory Card,由松下、东芝和SanDisk公司于19998月共同开发的新一代记忆卡标准,已完全兼容MMC标准。SD卡比MMC卡多了一个进行数据著作权保护的暗号认证功能

        SD卡尺寸为32mm x 24mm x2.1mm,长宽和MMC卡一样,只是比MMC卡厚了0.7mm,以容纳更大容量的存贮单元。SD卡与MMC卡保持向上兼容,也就是说,MMC卡可以被新的设有SD卡插槽的设备存取,但是SD卡却不可以被设有MMC插槽的设备存取。

 

SDIO

        SDIO全称Secure DigitalInput and Output CardSDIO是在SD标准上定义了一种外设接口,它使用SDI/O接口来连接外围设备,并通过SD上的I/O数据接口与这些外围设备传输数据。现在已经有很多手持设备支持SDIO功能,而且许多SDIO外设也被开发出来,目前常见的SDIO外设有:WIFI CardGPS Card Bluetooth Card等等。

 

eMMC

        eMMC全称Embedded MultiMediaCard,是MMC协会所制定的内嵌式存储器标准规格,主要应用于智能手机和移动嵌入式产品等。eMMC是一种嵌入式非易失性存储系统,由闪存和闪存控制器两部分组成,它的一个明显优势是在封装中集成了一个闪存控制器,它采用JEDEC标准

<think>好的,我现在需要回答用户关于如何使用mmc-utils工具读取eMMC状态寄存器及其作用的问题。首先,我得回顾一下用户提供的引用内容,看看哪些信息相关。 根据引用[3],用户提到了通过Linux读取eMMC寿命的方法,并提供了一个Git仓库链接,应该是mmc-utils工具的源码。引用[4]则讨论了使用mmc-utils和内核的mmc_test等工具进行测试说明mmc-utils是常用的工具之一。引用[1]和[2]关于eMMC的块操作和分区功能可能不太直接相关,但状态寄存器可能涉及寿命信息或错误状态,这部分可能和寿命检测有关。 首先,我需要明确eMMC的状态寄存器是什么。根据JEDEC标准,eMMC设备有扩展状态寄存器(Extended Status Register),其中包含寿命估计、预加载信息、设备状态等。状态寄存器的数据可能包括寿命剩余百分比、坏块情况等,这对评估存储设备的健康状态很重要。 接下来,用户想知道如何用mmc-utils读取这些寄存器。我需要查阅mmc-utils的文档或常用命令。通常,mmc-utils提供了诸如`mmc extcsd read <device>`的命令来读取扩展的CSD寄存器信息,其中可能包含状态信息。例如,寿命估计可能位于某个特定的字段中,比如EXT_CSD中的DEVICE_LIFE_TIME_EST_TYP_A/B。 然后,关于作用,读取状态寄存器可以帮助用户监控eMMC的健康状况,预测故障,提前备份数据,或者进行维护。例如,寿命百分比过低可能意味着需要更换存储芯片。 需要注意的是,不同的eMMC版本可能有不同的寄存器布局,所以需要确认具体型号和规范。此外,用户可能需要root权限来执行这些命令,并且设备节点如/dev/mmcblk0需要正确存在。 检查用户提供的引用,引用[3]的git仓库是mmc-utils的源码,所以正确命令可能在该仓库的文档中。例如,使用`mmc extcsd`子命令来读取信息。此外,引用[4]提到mmc-utils适合简单使用,所以操作步骤可能不复杂。 可能的问题点:用户是否知道设备节点路径?是否需要安装mmc-utils工具?在回答中可能需要包括安装步骤,比如通过git克隆和编译,或者包管理器安装。 总结步骤:安装mmc-utils,使用extcsd命令读取状态寄存器,解析相关字段如寿命估计,并解释其作用。同时,可能需要提醒用户注意权限和设备节点。 最后,确保回答符合用户要求的结构,分步骤说明,引用相关的引用内容,比如工具的使用来自引用[3]和[4],并添加正确的引用标识。</think>### 使用 mmc-utils 读取 eMMC 状态寄存器及作用 #### 1. **mmc-utils 工具安装** mmc-utils 是 Linux 下用于管理 MMC/SD 卡设备的命令行工具,需通过源码编译安装: ```bash git clone git://git.kernel.org/pub/scm/utils/mmc/mmc-utils.git cd mmc-utils make sudo make install ``` #### 2. **读取 eMMC 状态寄存器** 通过 `mmc extcsd` 命令读取扩展状态寄存器(Extended CSD),其中包含设备健康状态、寿命预估等信息: ```bash sudo mmc extcsd read /dev/mmcblk0 ``` - `/dev/mmcblk0` 是 eMMC 设备节点,需根据实际设备路径调整[^3]。 #### 3. **关键字段解析** 在输出中重点关注以下字段: - **Device Lifetime Estimation**:寿命预估(分 Type A/B 两类,对应不同读写压力场景),例如: $$ \text{Device Lifetime Estimation Type A: } 50\% $$ 表示在轻负载场景下剩余寿命为 50%。 - **Pre EOL Information**:预寿命终止状态(正常/警告/严重)。 - **Device Health Status**:硬件异常或坏块情况。 #### 4. **作用与场景** - **寿命监控**:通过寿命百分比预测 eMMC 剩余使用寿命,避免因存储介质损坏导致数据丢失。 - **故障预警**:预寿命终止状态(如 `Pre EOL: Warning`)提示需及时备份或更换设备[^2]。 - **性能优化**:结合健康状态调整文件系统策略(如减少频繁擦写操作)。 #### 5. **示例输出片段** ``` Extended CSD rev 1.7 (MMC 5.1) ... Device Life Time Estimation Type A [DEVICE_LIFE_TIME_EST_TYP_A]: 0x01 Device Life Time Estimation Type B [DEVICE_LIFE_TIME_EST_TYP_B]: 0x00 Pre EOL information [PRE_EOL_INFO]: 0x01 ... ``` - `0x01` 表示 Type A 寿命剩余 10%-20%(不同版本定义可能略有差异)。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值