mmc subsystem系列(持续更新中):
[mmc subsystem] 概念与框架
[mmc subsystem] mmc core(第一章)——概述
[mmc subsystem] mmc core(第二章)——数据结构和宏定义说明
[mmc subsystem] mmc core(第三章)——bus模块说明
[mmc subsystem] mmc core(第四章)——host模块说明
[mmc subsystem] mmc core(第五章)——card相关模块(mmc type card)
[mmc subsystem] mmc core(第六章)——mmc core主模块

建议先参考《[mmc subsystem] 概念与框架》和《[mmc subsystem] mmc core(第一章)——概述》对整体有一个了解。

=========================================================================================================

一、mmc core简单说明

对应代码路径为drivers/mmc/core/.

0、几个概念

首先要理解以下几个概念

  • mmc host:对应物理上的mmc控制器(host controller)。对应软件中的mmc_host结构体。
  • mmc card:对应物理上的mmc设备。对应软件中的mmc_card结构体。
  • mmc driver:用于驱动mmc card,实现对应的实际功能。对应软件中的mmc_driver。

1、框架说明

简单框架图如下:


(上图摘自蜗窝科技http://www.wowotech.net/comm/mmc_framework_arch.html)
如上,主要分成了四个模块:

  • mmc core主模块
  • host模块
  • bus模块
  • card相关模块
    • mmc模块
    • sd模块
    • sdio模块

2、主要工作

按照框架的四个模块来说明其对应负责内容如下:

  • bus模块
    对应代码bus.c。
    抽象出虚拟mmc bus,实现mmc bus的操作。提供bus相关的操作,包括device的注册以及driver的注册的API。
    参考《[mmc subsystem] mmc core(第三章)——bus模块说明》

  • host模块
    对应代码host.c。
    为底层host controller driver实现mmc host的申请以及注册的API等等,以及host相关属性的实现。
    参考《[mmc subsystem] mmc core(第四章)——host模块说明》

  • card相关模块
    mmc type card对应mmc.c、mmc_ops.c
    sd type card对应sd.c、sd_ops.c
    为对应card实现相应的操作,包括初始化操作、以及对应的总线操作集合。负责和对应card协议层相关的东西。
    参考《[mmc subsystem] mmc core(第五章)——card相关模块(mmc type card)》

  • mmc core主模块
    对应代码core.c。
    这部分是mmc subsystem的核心实现。
    参考《[mmc subsystem] mmc core(第六章)——mmc core主模块》

    • mmc bus虚拟总线的注册和维护
    • mmc host的管理(host的获取和释放)、操作接口(包括host的带宽配置、时钟设置,复位操作)等等
    • card设备的抽象,card的管理和操作接口,包括card检测接口等等。
    • 实现基于mmc通讯规范的命令请求的接口以及命令处理的实现。

3、总线结构说明

mmc_opt_flow

(上图摘自蜗窝科技http://www.wowotech.net/comm/mmc_framework_arch.html)
从硬件上来看,每一个mmc host对应一条实际的mmc总线。
但是mmc subsystem只存在一条虚拟的mmc bus。并且mmc host并不会作为这个设备驱动总线模型的一个部分。
相应的:

  • 在mmc bus上挂载的device是由mmc core根据实际mmc设备抽象出来的card设备。
  • 在mmc bus上挂载的driver是在card目录下实现的card driver,用于驱动虚拟card设备、对接其他subsystem,实现其实际的功能。

二、sys下的节点说明

1、bus节点

mmc bus节点的对应路径为/sys/bus/mmc。在mmc_register_bus中生成。
简单示例如下:

在devices目录下有如下节点
/sys/bus/mmc/devices/mmc0:0001
其中mmc0:0001就是mmc core抽象出来的card设备,对应于我们板子上的emmc。
对应代码参考mmc_alloc_card&mmc_add_card。在drivers目录下有如下节点
/sys/bus/mmc/drivers/mmcblk
其中mmcblk就是block.c中实现的card driver。
对应代码参考mmc_register_driver。

2、host的class节点

mmc core实现了一个class用于维护和管理mmc host。其对应路径为/sys/class/mmc_host。
mmc core会为每个注册到mmc core中的mmc host在该class目录下添加一个对应的节点。在mmc_add_host中生成。
简单示例如下:

创建class的代码参考mmc_register_host_class在/sys/class/mmc_host下有如下目录:
/sys/class/mmc_host/mmc0
/sys/class/mmc_host/mmc1
在msm8916平台中,注册了两个mmc host,而mmc0就是对应alias序号为0的host,而mmc1就是对应alias序号为1的host。
具体代码参考mmc_alloc_host。其中,/sys/class/mmc_host/mmc0下有如下属性:
clk_scaling    clkgate_delay   device   mmc0:0001   perf   power   subsystem   uevent
具体代码参考mmc_add_host。

3、card对应的sys节点

mmc core把mmc设备抽象为card设备。
从两个地方可以找到其对应的sys节点。
简单示例如下:

以mmc0:0001设备为例,mmc0表示这个card挂载mmc0这个host上,0001表示card设备地址为0001(也就是RCA,协议的东西,后续会说明)
(1)/sys/bus/mmc/devices/mmc0:0001(因为是挂在mmc bus上)
(2)/sys/class/mmc_host/mmc0/mmc0:0001(因为card的parent device为mmc host的class device)
具体代码参考mmc_alloc_card & mmc_add_card。其下面有如下属性:
block    cid   csd   date   driver   enhanced_area_offset   enhanced_area_size   erase_size   fwrev   hwrev
manfid    name   oemid   power   preferred_erase_size   prv   raw_rpmb_size_mult   rel_sectors
runtime_pm_timeout    serial   subsystem   type   uevent
相应属性意义参考mmc_type的实现。后续再说明。

4、debug节点

mmc core为每个注册到core中的host创建了对应的debug节点。
以mmc0这个host为例,其对应节点路径为/sys/kernel/debug/mmc0

/sys/kernel/debug/mmc0有如下属性
clk_delay    clock   ios   max_clock   mmc0:0001
具体代码参考mmc_add_host——》mmc_add_host_debugfsmmc0:0001下有如下debug属性:
ext_csd    state   status   wr_pack_stats
具体代码参考mmc_add_card——》mmc_add_card_debugfs

三、数据结构说明

1、简述

  • struct mmc_host
    mmc core由host controller抽象出来的结构体,用于代表一个mmc host控制器。
  • struct mmc_card
    mmc core由mmc设备抽象出来的card设备的结构体,用于代表一个mmc设备。
  • struct mmc_driver
    用于代表一个card drive。
  • struct mmc_bus_ops
    mmc_bus_ops表示mmc host在总线上的操作集合,由host的card 设备来决定,mmc type card、sd type card相应的操作集合是不一样的。
  • mmc_command
    表示一个mmc命令包
  • mmc_data
    表示一个mmc数据包
  • mmc_request
    表示一个mmc请求,包括了mmc命令包(mmc_command)和mmc数据包(mmc_data)。
  • mmc_async_req
    表示一个mmc异步请求,包括了mmc_request。

[mmc subsystem] mmc core(第一章)——概述相关推荐

  1. 数字图像处理:第一章 概述

    第一章 概述 数字图象处理是一门关于如何用计算机对图象进行处理的学科,本课程主要讲解基本原理和方法,针对计算机系的学生,强调编程实践和建立图象处理应用系统的方法.推荐的教材与图象编程参考书包括: R. ...

  2. Linux基础第一章 概述

    第一章 概述 1.1 前言 本章讨论系统的概念,从硬件.操作系统角度更加深刻的理解计算机系统,并快速浏览Linux系统提供的服务. 1.2 系统组成 1.3 操作系统和应用程序 操作系统这个词语有二意 ...

  3. 《Abaqus GUI程序开发指南(Python语言)》——第一章 概述1.1 简单插件实例——创建带孔板有限元模型...

    本节书摘来自异步社区<Abaqus GUI程序开发指南(Python语言)>一书中的第1章,第1.1节,作者: 贾利勇 , 富琛阳子 , 贺高 , 周正光 更多章节内容可以访问云栖社区&q ...

  4. 通信系统概论_现代通信系统概论 第一章 概述(1)

    2020年,又开始上一门新课!!! 喜欢挑战! 让同学们开阔知识是本课程的主要目的! 本课程讲解导航.遥控遥测等军用尖端技术和数字电话.广播电视.综合信息网.多媒体宽带网等现代民用技术. 通信在过去分 ...

  5. 计算机网络课程优秀备考PPT之第一章概述(一)

    为了记录自己从2016.9~2017.1的<计算机网络>助教生涯,也为了及时梳理和整写笔记! 以上,是<计算机网络>课程的第一章概述. 本文转自大数据躺过的坑博客园博客,原文链 ...

  6. 计算机网络第一章(概述)

    第一章 概述 1.1因特网概述 1.1.1网络.互联网和因特网 网络(Network),由若干结点(Node) 和连接这些结点的 链路(Link) 组成. 多个网络还可以通过路由器互联起来,这样就构成 ...

  7. 第二篇第一章概述及第二章生产和储存物品的火灾危险性分类 重点在于表格...

    2019/1/4 [录播]2018一消精华班-实务-一级消防工程师-环球网校 http://v.edu24ol.com/?type=lesson&id=178923&gid=16157 ...

  8. 计算机网络第七版(谢希仁) 第一章 概述 1-10,1-17作业答案

    计算机网络第七版 第一章 概述 1-10,1-17答案 1-10: 试在下列条件下比较电路交换和分组交换.要传送的报文x(bit) .从源点到终点共经过k 段链路,每段链路的传播时延为d(s), 数据 ...

  9. 多传感器融合定位 第一章 概述

    多传感器融合定位 第一章 概述 本记录深蓝学院多传感器定位融合第四期学习笔记,官方推荐使用docker进行开发,为了方便之后移植部署,故本次在次在本地环境进行开发. 代码下载 : https://gi ...

最新文章

  1. 用PHP生成等比图像的方法
  2. C# 调用WinRar解压压缩包
  3. 取消管理员取得所有权_企业取得违约补偿款是否一律应缴增值税呢?
  4. DocumentManager 在标签位置显示气泡框 z
  5. 浏览器事件捕获冒泡以及阻止冒泡
  6. 小菜鸡进阶之路_Second week之元组、列表、集合、字典对比.
  7. AI算法连载21:统计之概率图模型
  8. RocketMq单机和集群搭建教程
  9. OpenLTE 基站相关头文件:PHY、MAC、RLC、RRC、PDCP、RB、MME、HSS、GW
  10. OBIEE 11g 启动与停止包含服务器重启
  11. 关于spark写入文件至文件系统并制定文件名之自定义outputFormat
  12. 作为测试人员,不要说有错误,要说有什么错误
  13. 零基础学习IT技术是有技巧的
  14. 如何获取qq邮箱的秘钥
  15. MMORPG游戏服务器 - 技能系统设计【上篇】
  16. win10如何关闭计算机设备和驱动器非硬盘图标
  17. 苹果开放降级通道_苹果出手,关闭降级系统iOS13验证,iOS14再也回不去了!
  18. 泽塔云制胜秘诀:场景化破局超融合云计算市场
  19. Android:从源码剖析Hander机制
  20. 【亡羊补牢】计算机网络灵魂之问 第3期 http状态码 302 504分别代表什么意思

热门文章

  1. 2022年江苏省职业院校技能大赛中职赛项网络信息安全技能试题中职组
  2. 计算机网络组建无线局域网实验报告,无线局域网实验报告.doc
  3. 如何使用 PHP 发送 Web 推送通知
  4. 动力节点最新SSM框架项目「米米商城」实战教程分享
  5. 基于Python的企业编码生成系统
  6. 中国区2011年2季度安全威胁报告
  7. WPS 2007让简繁转换聪明起来
  8. zsh和oh-my-zsh的一些好用的主题及插件
  9. 墨刀linux桌面版,深度商店应用Kedis、微信开发者工具、UltraEdit、墨刀
  10. Windows IIS 调试ASP 错误号:3706 提示 “未找到提供程序 该程序可能未正确安装”解决办法