打印

Linux中SD、MMC设备驱动流程

[复制链接]
198|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Linux中SD、MMC设备驱动流程4.1.MMC子系统的基本框架4.1.1.MMC子系统的代码在kernel/driver/MMC下面,目前MMC子系统支持一些形式的**卡:SD,SDIO,MMC。4.1.2.HOST:针对不同主机的驱动程序,这一部分需要根据自己的特定平台来完成。4.1.3.CORE:这是整个MMC的核心层,这部分完成了不同协议和规范的实现,并且为HOST层的驱动提供接口函数。4.1.4.CARD:因为这些**卡都是块设备,当然需要提供块设备的驱动程序,这部分就是实现了将SD卡如何实现为块设备的。

4.1.5.各层之间的关系






Linux中SD、MMC设备驱动流程1.png (6.13 KB, 下载次数: 13)


下载附件

保存到相册




2018-7-19 14:36 上传







4.2.重要的结构体4.2.1. struct mmc_host 用来描述卡控制器位kernel/include/linux/mmc/host.h下面。4.2.2.struct mmc_card 用来描述卡位于kernel/include/linux/mmc/card.h下面4.2.3.struct mmc_driver 用来描述mmc卡驱动在kernel/include/linux/mmc/card.h下面。4.2.4.struct mmc_host_ops用来描述卡控制器操作集,用于从主机控制器向core层注册操作函数,从而将core层与具体的主机控制器隔离。也就是说core要操作主机控制器,就是这个ops当中给的函数指针操作,不能直接调用具体主控制器的函数。

位于kernel/include/linux/mmc/host.h下面。2.5.struct mmc_ios用于描述了控制器对卡的I/O状态。位于kernel/include/linux/mmc/host.h下面。4.2.6.struct mmc_request用于描述读写MMC卡的请求,它包括命令,数据以及请求完成后的回调函数。位于kernel/include/linux/mmc/core.h中。4.2.7.struct mmc_queue是MMC的请求队列结构,它封装了通用请求队列结构,加入了MMC卡相关结构。位于kernel/drivers/mmc/card/queue.h中。4.2.8.struct mmc_data描述了MMC卡读写的数据相关信息,如:请求,操作命令,数据以及状态等。位于kernel/include/linux/mmc/core.h中。4.2.9.struct mmc_command描述了MMC卡操作相关命令及数据,状态信息等。位于kernel/include/linux/mmc/core.h中。4.3.host,core以及card之间的关联和处理流程4.3.1总体的流程如下图所示






Linux中SD、MMC设备驱动流程2.png (30.25 KB, 下载次数: 9)


下载附件

保存到相册




2018-7-19 14:37 上传









4.3.2.数据.命令的处理流程在代码分析那里会仔细分析4.4:核心任务

MMC/SD卡的驱动整个构架由三个文件组成,其实一共就做了两件事件:

1).卡的检测。

2).卡数据的读取。4.4.1.卡的检测中涉及到的函数

tcc_mmc_probe(host/tcc_sdhc.c)

mmc_alloc_host(core/core.c)

mmc_rescan(core/core.c)

mmc_attach_mmc(core/mmc.c)

mmc_init_card(core/mmc.c)

mmc_add_card(core/bus.c)

device_add

mmc_bus_match(core/bus.c)

mmc_bus_probe(core/bus.c) mmc_blk_probe(card/block.c)

alloc_disk/add_disk 4.4.2.卡中数据读写涉及到的函数

mmc_blk_issue_rq(card/block.c)

mmc_wait_for_req(core/core.c)

mmc_start_request(core/core.c)

host->ops->requset(host,mrq)

//tcc_sdhc.c中的tcc_mmc_request

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

384

主题

384

帖子

0

粉丝