糖尿病康复,内容丰富有趣,生活中的好帮手!
糖尿病康复 > [mmc subsystem] mmc core(第一章)——概述

[mmc subsystem] mmc core(第一章)——概述

时间:2021-12-15 04:35:51

相关推荐

[mmc subsystem] mmc core(第一章)——概述

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、框架说明

简单框架图如下:

(上图摘自蜗窝科技/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

(上图摘自蜗窝科技/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 hwrevmanfid name oemid power preferred_erase_size prv raw_rpmb_size_mult rel_sectorsruntime_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(第一章)——概述》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。