1.概述

  Linux中,将包括MMC、SD、SDIO统称为MMC子系统。MMC子系统从功能上可分为三个层次:

  • card层: Card驱动, 或称client驱动
  • core层: MMC的核心层, 完成不同协议和规范的实现, 为host层和设备驱动层提供接口函数
  • host层: Host驱动, 针对不同主机端的SDHC、MMC控制器的驱动
    linux MMC framework(1) - 基本框架

2.软件架构

MMC framework的软件架构如下面所示:
linux MMC framework(1) - 基本框架
  MMC framework分别有“从左到右”和“从下到上”两种层次结构:

1.从左到右:

  MMC协议是一个总线协议,因此包括Host controller、Bus、Card三类实体(从左到右)。相应的,MMC framework抽象出了host、bus、card三个软件实体,以便和硬件一一对应:

  • host,负责驱动Host controller,提供诸如访问card的寄存器、检测card的插拔、读写card等操作方法。从设备模型的角度看,host会检测卡的插入,并向bus注册MMC card设备;

  • bus,是MMC bus的虚拟抽象,以标准设备模型的方式,收纳MMC card(device)以及对应的MMC driver(driver);

  • card,抽象具体的MMC卡,由对应的MMC driver驱动(从这个角度看,可以忽略MMC的技术细节,只需关心一个个具有特定功能的卡设备,如存储卡、WIFI卡、GPS卡等等)。

2.从下到上

  MMC framework从下到上有3个层次:

  • MMC core位于中间,是MMC framework的核心实现,负责抽象host、bus、card等软件实体,负责向底层提供统一、便利的编写Host controller driver的API;

  • MMC host controller driver位于底层,基于MMC core提供的框架,驱动具体的硬件(MMC controller);

  • MMC card driver位于最上面,负责驱动MMC core抽象出来的虚拟的card设备,并对接内核其它的framework(例如块设备、TTY、wireless等),实现具体的功能。

3.工作流程
linux MMC framework(1) - 基本框架

4.mmc子系统模块视图
linux MMC framework(1) - 基本框架

  • card:

    • block.c:为每个mmc设备向block子系统注册为一个块设备,并实现块设备的ops。为每个块设备创建一个request queue, 通过add_disk将磁盘添加到系统中,block子系统就可以对mmc设备进行操作。实现了请求处理函数,同时启动线程来处理block层发下来的request请求

    • queue.c:实现request queue的创建、销毁,创建request queue的处理线程

  • core

    • core.c:是整个mmc子系统的核心,对上承接mmc子系统的block层,主要提取实现了requset相关的公有操作接口;对下承接具体的控制器,主要提取host ios相关的初始化配置接口,以及bus_type相关的操作, 同时为host提供了相关的接口。

    • bus.c:定义mmc_bus_type 总线;

    • sdio_bus.c:定义sdio_bus_type总线;

    • mmc.c: 实现了mmc_bus_type的mmc_ops,规约了eMMC卡的初始化流程;

    • sd.c: 实现了mmc_bus_type的mmc_sd_ops,规约了SD卡的初始化流程;

    • sdio.c: 实现了mmc_bus_type的mmc_sdio_ops,规约了SDIO卡的初始化流程;

    • mmc_ops.c:定义了eMMC卡相关的一系列操作接口,如go idle,设置电压,设置速率模式

    • sd_ops.c: 定义了SD卡相关的一系列操作接口

    • sdio_ops.c: 定义了SDIO卡相关的一系列操作接口

    • host.c:是对控制器的共有操作进行抽象

  • host

    • xxx-mmc_c:host controller驱动

相关文章:

  • 2021-04-30
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2022-01-07
  • 2022-01-07
  • 2021-08-25
  • 2021-12-11
  • 2021-07-20
  • 2022-01-07
相关资源
相似解决方案