百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

LINUX MMC子系统分析(一) 总体概述

ahcoder 2025-05-27 12:05 3 浏览

从本章开始,我们分析mmc子系统,其也遵循LINUX设备-总线-驱动模型,并基于自身的特点进行了相应的抽象。

针对本专题,我们主要涉及如下几个章节:

一、MMC子系统概述;

二、MMC子系统驱动模型分析(包括总线、设备、驱动);

三、MMC总线分析

四、MMC host分析

五、MMC driver分析

六、MMC card添加流程分析

七、MMC block分析

本篇为此系列的起始,主要对MMC子系统进行一个简要的概述说明。针对MMC来说,主要包括几个部分:MMC控制器、MMC总线、card。针对卡而言,包括MMC卡(7pin,支持MMC和spi两种通信模式)、SD卡(9pin,支持sd和spi两种通信模式)、TF卡(8pin,支持sd和spi两种通信模式),针对MMC、SD而言,其总线规范类似,都是从MMC总线规范演化过来的。另外上面所说的均是针对存储卡而言,而基于MMC这种通信方式,又演化了SDIO,SDIO强调的是IO,与MMC/SD的区别主要是连接的设备,其不再仅仅是存储卡,可以链接任何支持SDIO的外设(包括蓝牙设备、wifi设备等)。

其实SDIO的实现则和我们之前分析的IIC、SPI总线类型,通过SDIO可以连接各种类型的设备(wifi、bluetooth、uart、gps、esata等)

CPU、MMC之间的硬件关联图

CPU、MMC controller、存储设备之间的关联如下图所示,主要包括了MMC controller、总线、存储卡等内容的连接,针对控制器与设备的总线连接,主要包括时钟、数据、命令三种类型的引脚,而这些引脚中的cd引脚主要用于卡的在位检测,当mmc controller检测到该位的变化后,则会进行mmc card的注册或注销操作。

在MMC子系统中,主要包含MMC总线、SDIO总线两个部分,其中MMC部分则主要用于适配MMC卡、SD卡、TF卡等存储设备,而SDIO部分则主要用于实现针对SDIO接口连接的设备(wifi、bluetooth、uart、gps、esata等)

MMC驱动模型概述

MMC驱动模型也是基于实际的硬件连接进行抽象的,其实该mmc驱动模型的抽象和iic、spi模型类似,下面我们来看下具体的抽象说明。

  1. 针对mmc controller,该子系统抽象为mmc_host,用于描述一个mmc controller;
  2. 针对mmc、sd、tf卡,该子系统抽象为mmc_card,用于描述卡信息;
  3. 针对通信总线,抽象出mmc_bus;
  4. 针对mmc、sd、tf,mmc子系统完成了统一的mmc driver,针对mmc总线规范以及SD规范,其已经详细的定义了一个存储卡的通信方式、通信命令,因此LINUXmmc子系统定义了mmc driver,用于和mmc、sd、tf等卡的通信,而不需要驱动开发人员来开发卡驱动。


而针对这四者之间的关系,以及这四者是如何借助LINUX设备-总线-驱动模型实现关联的,可

从如下图中找到对应的关联。

该模型的实现和spi模型是类似的,其中mmc host不添加至mmc bus中,另外和iic、spi不同的是:

  1. mmc总线模型中只注册一个驱动类型,即mmc driver(该驱动适配所有的mmc card);
  2. 一个mmc host与一个mmc card绑定;
  3. Mmc card属于热插拔的设备,而mmc card的创建主要由mmc host负责探测与创建,mmc host根据卡在位检测引脚,当检测到mmc card的存在后,即创建mmc card,同时注册至mmc bus上,并完成与mmc driver的绑定操作。


SDIO驱动模型概述

sdio总线驱动模型和mmc类型,结构体上的区别为其driver类型为sdio_driver,并增加了sdio_func结构体变量(该结构体包含了该sdio设备相关的厂商id、设备id,同时包含了mmc_card),与mmc总线驱动模型的区别为:

  1. 因sdio主要突出接口概念,其设备端可以连接wifi、gps等设备,因此其外设备驱动需要由驱动工程师自己实现,sdio驱动模块不提供对应的驱动。


MMC块设备

因mmc_card一般均是存储设备,因此针对该设备的访问即需要借助LINUX内核的块设备模型,因此mmc子系统也必须要实现块设备驱动,借助该块设备驱动模型,将mmc card与vfs完成了关联,即可通过系统调用借助VFS模型实现对块设备的读写访问操作。

MMC子系统的目录说明

针对mmc子系统,在代码实现上主要包括mmc core、mmc block、 mmc host这三个模块,其中mmc host主要是针对mmc controller的驱动;mmc block主要用于实现mmc block驱动以及mmc driver;而mmc core主要包括mmc 总线、sdio总线的实现、mmc device、mmc driver的注册接口、mmc host与mmc card的注册与注销接口等内容。

本章主要对mmc子系统进行概述,所涉及的内容也是浅尝辄止,主要是对mmc子系统有一个感性的概念。从下章开始进行具体实现的分析工作。

相关推荐

当 Linux 根分区 (/) 已满时如何释放空间?

根分区(/)是Linux文件系统的核心,包含操作系统核心文件、配置文件、日志文件、缓存和用户数据等。当根分区满载时,系统可能出现无法写入新文件、应用程序崩溃甚至无法启动的情况。常见原因包括:「日志文件...

linux系统监控工具小神器:btop(linux网络监控工具)

top是大家常用的实时系统监控工具,今天给大家介绍一款非常酷炫的实时系统监控工具btop,用了之后你一定会爱上它!btop是一个高级的实时系统监控工具,它是传统top命令的现代替代品,提供了丰富...

又一全新恶意软件曝光!专门针对Windows、Linux 和 macOS 用户

近日,网络安全研究人员发现了一个利用“CheanaStealer”恶意软件的复杂网络钓鱼活动,该恶意软件是通过一个VPN钓鱼网站传播的。这次攻击的主要目标是各种操作系统的用户,包括Wind...

Java程序员必备的Linux命令全解析

Java程序员必备的Linux命令全解析作为一名Java开发者,除了精通Java语法和框架外,掌握一些基础的Linux命令也是十分必要的。这不仅能提高你的工作效率,还能让你更好地管理和部署Java应用...

Linux基础知识之shell实现用户管理功能

[root@k8s-mastershell]#moreusermanager.sh#!/bin/bashRED='\033[0;31m'GREEN='\033[...

惊艳!Linux 中迷人的 Shell 脚本工具

如果您是Linux操作系统爱好者或正在将自己定义为一个爱好者,那么与shell脚本交叉的路径是完全不可避免的。根据定义,shell脚本是设计用于在Unix/Linuxshell环境中执...

【shell编程】你的第一个sh脚本(shell脚本编程教程)

vimhello.sh#!/bin/bash#注释echo-e"HelloWorld!\a\n"exit0第一行#!/bin/bash,作用是宣告这个文件内的语...

linux之bash、sh和dash(linux里bash命令)

linux系统里有sh、bash、dash等多种shell的解释器命令,其中sh是shll的缩写,是linux系统默认的shell解释器,bash则是sh命令的增强版,dash则是从netbsd派生而...

14、linux命令-du(linux命令-s)

14、linux命令-du常用命令du-sh/*#显示指定目录下每个文件或目录的容量大小,并且以易读方式显示(常用)。du命令概述du命令作用是估计文件系统的磁盘已使用量,常用于查看文件或目录...

Manjaro Linux:属于我的Linux体验

从Debiantesting切换回Manjarotesting前端使用好久的Manjarotesting切换到了Debiantesting,就是因为有一些包只有deb版本,适配了Debia...

小狼毫 0.17.0 更新,解锁输入新姿势!

0.17.0版本(2025年5月17日发布)这次更新可不少东西呢!先把librime升级到1.13.1版本啦,也不知道这升级之后会带来啥新变化,用用就知道咯。之前老是出问题的托...

Kali Linux 初始配置(kali linux2019默认用户名和密码)

1.更新源&升级系统sudoaptupdate&&sudoaptupgrade-ysudoaptdist-upgrade-y作用:确保所有工具和系统补丁为最新,避免...

怎样利用锤子手机和讯飞手机输入法,让电脑动起来

在大家看来,老罗的发布会捧红了科大讯飞。小编当时就被老罗洗脑了,立刻下载了讯飞输入法体验了一番。后来小编突发奇想,我经常使用向日葵远程控制电脑,如果远程控制电脑时使用讯飞,能否在电脑上完成语音输入?或...

装好KALI之后,急需做的两个事情,更新源和添加输入法

每次当我们装完系统之后,突然发现很茫然,为什么要装这个系统?也就是说我们压根儿就不知道装这个系统是为了做什么。而且刚装好的系统体验起来,好像也并没有网上说的那么好。之前想做的种种操作现在也就不了了之了...

Linux 依赖问题“硬核”解决方案 | 技术

编者按:本文介绍了一些另类的暴力破解RPM和DEB软件包依赖关系的方法,对陷入依赖陷阱而不可自拔的人来说,有时候这也是一种绝地求生之路。至于说这样做是否合适,那就是一件见仁见智的事情了,不过这...