标题:
Linux中SD、MMC设备驱动流程
[打印本页]
作者:
13691982107
时间:
2018-7-19 14:01
标题:
Linux中SD、MMC设备驱动流程
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.
各层之间的关系
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
总体的流程如下图所示
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
深圳雷龙发展有限公司从事NANDFLASH行业10+年.目前代理ATO Solution小容量SLC NAND,SPI NAND,MCP等。想了解更多请咨询扣二八伍二扒二陆扒六八;电话一三陆玖一玖八二一零柒
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0