【MMC子系统】三、MMC子系统框架

news2024/11/19 5:32:06
img
我的圈子: 高级工程师聚集地
我是董哥,高级嵌入式软件开发工程师,从事嵌入式Linux驱动开发和系统开发,曾就职于世界500强企业!
创作理念:专注分享高质量嵌入式文章,让大家读有所得!
img

文章目录

    • 1、MMC子系统框架
    • 2、MMC子系统文件结构
    • 3、MMC设备在Linux下的文件分布
    • 4、总结

上章,我们简单了解了EMMC协议,感兴趣的可以查阅一下SDSDIO的协议,之所以Linux内核能够对SDSDIOEMMC进行统一管理,根本原因就是三者协议上的相似性,我们该系列文章均以EMMC为剑,一层层划开包裹着的盔甲。

本系列文章,均以Linux 4.19为参考

 

1、MMC子系统框架

image-20240103073232532
如上图所示,MMC子系统的整体框架包括:MMC HostMMC CoreMMC Block。我们从下网上看:

  • MMC HOST:即MMC控制器驱动层,正如其名,该层主要是为了实现MMC控制器的初始化,以及MMC底层的数据收发操作,其直接控制的是底层寄存器,用以产生相应的通信时序。
  • MMC CORE:即MMC核心层,该层主要起到了承上启下的作用。对下,主要体现在注册MMC总线,实现对MMC deviceMMC driver的统一管理;对上,体现在实现MMC通信协议,并向上提供相应的读写操作接口。
  • MMC BLOCK:即MMC块设备驱动层,其主要作用是屏蔽底层的实现逻辑,将底层抽象为卡设备,并且与虚拟文件系统关联,负责块设备请求的处理以及请求队列的管理,又称为card卡驱动。

哈哈,简单吧,我们刚开始对MMC子系统框架就先了解这么多,不着急,慢慢来。

 

2、MMC子系统文件结构

了解完MMC子系统后,我们看一下MMC驱动在Linux下的目录结构,我们进入到drivers/mmc目录

drivers/mmc/
	├── core
		├── block.c
		├── bus.c
		├── core.c
		├── mmc.c
		├── mmc_ops.c
		├── ......
	├── host
		├── sunxi-mmc.c
		├── ......

这里介绍一个方法

如果刚接触的朋友,不知道文件之间的关系是怎么样的,可以通过MakefileKconfig文件来大致看一下。

obj-$(CONFIG_MMC)		+= mmc_core.o
mmc_core-y			:= core.o bus.o host.o \
				   mmc.o mmc_ops.o sd.o sd_ops.o \
				   sdio.o sdio_ops.o sdio_bus.o \
				   sdio_cis.o sdio_io.o sdio_irq.o \
				   slot-gpio.o

由上面可知,MMC CORE核心层,包括的文件有:core.cbus.c等等,

 

更多干货可见:高级工程师聚集地,助力大家更上一层楼!

 

了解大致的文件布局后,我们主要介绍一下文件的作用:

MMC HOST控制器驱动层

  • sunxi-mmc.c:所有的控制器驱动文件,均位于host文件夹下,主要是不同芯片厂家对MMC控制器的底层实现,一般非原厂人员不必深入研究。

MMC CORE核心层

  • bus.c:主要作用是为了注册MMC总线,实现对MMC driversdevices的统一管理
  • core.c:主要作用是实现MMC通信协议,封装MMC通信命令,完成MMC核心功能,并向上提供操作接口。
  • mmc_ops.c:主要作用是提供操作MMC卡的接口函数,如:发送,接收数据接口,该文件会用到core.c提供的命令接口。
  • mmc.c:主要作用是处理MMC卡的相关操作,包括识别卡,读写卡等等,该文件会用到mmc_ops.ccore.c提供的命令接口。

MMC BLOCK块设备驱动层

  • block.c:处理MMC卡的块设备接口,包括读写块,处理块设备的电源和时钟等。

 

3、MMC设备在Linux下的文件分布

介绍完源代码中的目录结构,我们看一下成功加载MMC驱动后,在Linux文件系统中的目录结构。

在进程文件系统中

  • 我们的MMC Card被成功识别后,会在procfs中看到mmc的相关节点:如/dev/mmcblk0,其中看到/dev/mmcblk0p1表示磁盘中的一个分区

在虚拟文件系统中

同时在sysfs中也会看到对应的节点

  • /sys/bus/mmc/devices/下,我们能够看到识别到的设备信息
  • /sys/class/mmc_host/mmc0/下也能够看到设备信息
  • 同时在/sys/block/mmcblk0/下,能够看到该卡设备的信息,以及分区信息等。
# ls /sys/bus/mmc/devices/
mmc0:aaaa

# ls /sys/class/mmc_host/mmc0/
device     mmc0:aaaa  power      subsystem  uevent

# ls /sys/block/mmcblk0/
alignment_offset   ext_range          mq                 size
bdi                force_ro           power              slaves
capability         hidden             queue              stat
dev                holders            range              subsystem
device             inflight           removable          uevent
discard_alignment  mmcblk0p1          ro

 

4、总结

本章主要介绍了三个部分:

  • MMC子系统的框架
  • MMC子系统的文件结构
  • MMC设备在Linux下的文件分布

下章,我们来详细了解MMC子系统的代码实现部分。

img
欢迎关注 公号&星球【嵌入式艺术】,董哥原创!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1351610.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【SpringBoot开发】之商城项目案例(购物车相关操作)

🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是君易--鑨,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的博客专栏《SpringBoot开发之商城项目系列》。&#x1f3af…

GZ075 云计算应用赛题第4套

2023年全国职业院校技能大赛(高职组) “云计算应用”赛项赛卷4 某企业根据自身业务需求,实施数字化转型,规划和建设数字化平台,平台聚焦“DevOps开发运维一体化”和“数据驱动产品开发”,拟采用开源OpenSt…

Pytorch上采样

文章目录 Upsample特殊上采样 Upsample 所谓上采样,实则是一个插值过程。所以上采样对象在初始化时,需要指定一个插值类型,Upsample是torch.nn中最基础的上采样类,初始化参数如下 Upsample(sizeNone, scale_factorNone, modenea…

计算机组成原理 主存和CPU连接与主存提速方案

文章目录 主存与CPU的连接译码器线选法译码片选法总结 位拓展字拓展字位同时拓展 主存提速方案存储周期双端口RAM多模块存储器单体多字存储器多模块多体并行存储器存储器高位交叉编址低位交叉编址 主存与CPU的连接 #mermaid-svg-3wv6WzRP2BvKEHQZ {font-family:"trebuchet…

GZ075 云计算应用赛题第1套

2023年全国职业院校技能大赛(高职组) “云计算应用”赛项赛卷1 某企业根据自身业务需求,实施数字化转型,规划和建设数字化平台,平台聚焦“DevOps开发运维一体化”和“数据驱动产品开发”,拟采用开源OpenStack搭建企业内部私有云平台,开源Kubernetes搭建云原生服务平台,…

HTML5 和 CSS3 新特性(常用)

HTML5 的新特性 HTML5 的新增特性主要是针对于以前的不足,增加了一些新的标签、新的表单和新的表单属性等。 这些新特性都有兼容性问题,基本是 IE9 以上版本的浏览器才支持,如果不考虑兼容性问题,可以大量使用这 些新特性。 HTML…

Linux CPU 数据 Metrics 指标解读

过去从未仔细了解过使用 top 和 htop 等命令时显式的CPU信息,本文我们详解解读和标注一下各个数据项的含义,同时和 Ganglia 显式的数据做一个映射。开始前介绍一个小知识,很多查看CPU的命令行工具都是 cat /proc/stat 里的数据,所…

Element-ui自定义input框非空校验

1、vue自定义非空指令: main.js中自定义非空指令 当input框或下拉框中数据更新时,触发校验 Vue.directive(isEmpty,{update:function(el,binding,vnode){if(vnode.componentInstance.value""){el.classList.add("is-required");}e…

使用echarts的bmap配置项绘制区域轮廓遮罩

示例图 代码 <template><div id"map" style"width: 100%; height: 100vh"></div> </template><script> import * as echarts from "echarts"; import "echarts/extension/bmap/bmap"; export default…

软件测试/测试开发丨Pytest结合数据驱动

安装yaml pip install pyyaml pytest结合数据驱动yaml 工程目录结构 数据准备 读取excel文件 openpyxl库的安装 openpyxl库的操作 pytest结合csv实现数据驱动 csv文件介绍 pytest结合json实现数据驱动 最后感谢每一个认真阅读我文章的人&#xff0c;礼尚往来总是要有的&…

Halcon底帽运算bottom_hat

Halcon底帽运算 底帽运算的原理是用原始的二值图像减去闭运算的图像。闭运算的目的是对某些局部区域进行“填补”&#xff0c;如填空洞、使分离的边缘相连接等。而底帽运算正是用来提取这些用于填补的区域的。图&#xff08;a&#xff09;为从二值图像中提取出的亮的区域&…

RKE安装k8s及部署高可用rancher,证书在外面的LB(nginx中)

一 了解 Rancher 1 推荐架构 安装 Rancher 的方式有两种&#xff1a;单节点安装和高可用集群安装。因为单节点安装只适用于测试和 demo 环境&#xff0c;而且单节点安装和高可用集群安装之间不能进行数据迁移&#xff0c;所以推荐从一开始就使用高可用集群安装的方式安装 Ran…

Vue Cli inspect

Vue Cli inspect vue-cli-service inspect&#xff1a;可以使用 vue-cli-service inspect 来审查一个 Vue CLI 项目的 webpack config 使用方法&#xff1a; 1、输出在控制台&#xff1a;vue-cli-service inspect 2、输在在文件中&#xff1a;vue-cli-service inspect -->…

阿里云迁移AWS视频点播技术攻坚

文章目录 &#x1f437; 背景&#x1f9a5; 简述&#x1f425; Aws服务&#x1f99c; AWS CloudFormation&#x1f41e; 问题&#x1f409; 落地方案&#x1f989; Aws vs Aliyun&#x1f344; 避坑指南 &#x1f437; 背景 由于AWS整体成本略低于阿里云&#xff0c;公司决定将…

k8s集群部署Harbor镜像仓库

部署k8s集群参考 https://blog.csdn.net/m0_59933574/article/details/134936188?spm1001.2014.3001.5502https://blog.csdn.net/m0_59933574/article/details/134936188?spm1001.2014.3001.5502 安装Harbor 准备一台干净服务器&#xff0c;关闭防火墙与selinux 下载dock…

rime中州韵 inputShow lua Filter

在 rime中州韵 inputShow lua Translator 一文中&#xff0c;我们通过 inputShow.lua 定制了 inputShow_translator&#xff0c;这使得我们的输入方案可以将用户输入的字符透传到候选列表中来。如下&#x1f447;&#xff1a; &#x1f446;上图中我们在候选列表中看到了 inpu…

C# WinForm MessageBox自定义按键文本 COM组件版

c# 更改弹窗MessageBox按钮文字_c# messagebox.show 字体-CSDN博客 需要用到大佬上传到百度云盘的Hook类&#xff0c;在大佬给的例子的基础上改动了点。 应用时自己加GUID和ProgID。 组件实现&#xff1a; using System; using System.Collections.Generic; using System.L…

Flink Watermark和时间语义

Flink 中的时间语义 时间语义&#xff1a;EventTime&#xff1a;事件创建时间&#xff1b;Ingestion Time&#xff1a;数据进入 Flink 的时间&#xff1b;Processing Time&#xff1a;执行操作算子的本地系统时间&#xff0c;与机器无关。不同的时间语义有不同的应用场合&#…

MySQL之四大引擎、建库建表以及账号管理

目录 一.四大引擎 1.1 InnoDB 1.2 MyISAM 1.3 MEMORY 1.4 Archive 二.数据库管理 2.1 元数据库简介 2.2 元数据库分类 2.3 数据库的增删改查及使用 2.4 MySQL库权限相关 三.数据表管理 3.1 三大范式 3.2 基本数据类型 3.2.1 优化原则 3.2.2 分类 四.数据库账号管理 4.1 相同…

LabVIEW在高精度机器人视觉定位系统中的应用

在现代工业自动化中&#xff0c;精确的机器人视觉定位系统对于提高生产效率和产品质量至关重要。LabVIEW软件&#xff0c;以其卓越的图像处理和自动化控制功能&#xff0c;在这一领域发挥着重要作用。本案例将展示LabVIEW如何帮助开发和实现一个高精度的机器人视觉定位系统&…