在Linux 内核代码drivers/mmc目录下有三个文件夹core,host,card以及两个文件Kconfig和Makefile。其中mmc/card 目录下的代码是MMC Device(块存储介质如flash cards)驱动接口, mmc/host 下的代码是各种MMC/SD 控制器驱动程序, mmc/core MMC/SD协议管理核心程序。也就是说,mmc/core 决定了发什么命令或者数据,而host则决定了怎么发命令或者数据。
MMC Card隶属于MMC Host, MMC Core实现了 MMC Host的管理,MMC Core通过MMC Host实现了对MMC Device的加测与初始化管理,MMC Host与MMC Device的命令以及回应的通讯通过一个块设备的IO请求队列来处理。请求队列的管理有MMC Core线程来处理。mmc_host.mmc_host_ops的函数指针来完成MMC硬件相关操作mmc_host_ops.request 和 mmc_host_ops.set_ios
- 块设备的操作涉及到的内核组件有:
- The generic block layer
The generic block layer 隐藏硬件细节,提供block设备的抽象。 提供通用的数据结构描述“disk” 和 “disk partitions” ;
- I/O scheduler
“I/O scheduler(I/O调度器)”根据内核制定的策略对未决的(pending) I/O数据传送请求进行排序和调度。 提高I/O调度器的效率也是影响这个系统对块设备上数据管理效率的一个方面。
- Block Device
Block Device 设备驱动程序完成和硬件相关的具体交互操作。
- MMC Core核心程序
- MMC模块在系统中将自己注册为MMC总线,在MMC总线中管理MMC Card作为Device,MMC Block驱动接口作为driver;
- MMC card隶属于MMC Host, MMCCore实现了MMC Host的管理,通过MMC Host, MMC Core实现了Card的检测与初始化管理。
- MMC Host与Card的通信通过一个请求队列模型来处理,请求队列的管理由一个Core 的线程处理。
- MMC Block设备与块设备的接口程序作用
- 向MMC总线注册为MMC Bus Driver;
- 向系统注册为块设备Driver;
- 当MMC Host有Card插入时,检测是否为存储卡,如果是存储卡,为此卡申请请求队列处理函数以及gen_disk,并向系统注册为一个块设备。
文章来源:http://kaffeel.org/20130508/linux-mmcsd%e9%a9%b1%e5%8a%a8%e6%a6%82%e8%bf%b0/
欢迎访问我的博客:http://kaffeel.org