MMC卡驱动分析

MMC卡驱动分析

ID:38982567

大小:152.73 KB

页数:20页

时间:2019-06-22

MMC卡驱动分析_第1页
MMC卡驱动分析_第2页
MMC卡驱动分析_第3页
MMC卡驱动分析_第4页
MMC卡驱动分析_第5页
资源描述:

《MMC卡驱动分析》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、MMC卡驱动分析最近花时间研究了一下MMC卡驱动程序,开始在网上找了很多关于MMC卡驱动的分析文章,但大都是在描述各个层,这对于初学者来讲帮助并不大,所以我就打算把自己的理解写下来,希望对大家有用。个人觉得理解LINUX内核当中MMC/SD卡驱动程序构架是学习MMC卡驱动程序的重点,只有理解了它的基本框架或流程才能真正理解一个块设备驱动程序的写法,同时才能真正理解LINUX设备驱动模型是如何发挥作用的。一.需要的基础知识:1.LINUX设备驱动的基本结构。2.块设备驱动程序的基本构架(相信研究过LDD3当中的sbull的人应该都不成问题,如果只是走马观花的话,那可得好好再

2、补补了)3.LINUX设备驱动模型。二.驱动程序分析首先,来明确一下我们需要分析的文件。下面的文件均来自linux-2.6.24源码,我们重点是分析驱动程序的基本构架,所以不同内核版本的差异并不是很大。MMC/SD卡驱动程序位于drivers/mmc目录下,我们只列出我们分析过程涉及到的几个文件:Card/block.cqueue.c/queue.hcore/bus.c/bus.hcore.c/core.hhost.c/host.hmmc.cmmc_ops.c/mmc_ops.h拿MMC卡来分析,SD卡驱动程序流程类似。host/s3cmci.c/s3cmci.h以S3C

3、24XX的MMC/SD卡控制器为例,其它类型的控制器类似。LINUX当中对目录的划分是很有讲究的,这些文件被分布在3个目录下,正好对应MMC/SD驱动程序的3个层次(关于层的划分这里浏览一下,有个概念即可,当我们分析完了后再回头来看,你会觉得很形象):(1)区块层主要是按照LINUX块设备驱动程序的框架实现一个卡的块设备驱动,这block.c当中我们可以看到写一个块设备驱动程序时需要的block_device_operations结构体变量的定义,其中有open/release/request函数的实现,而queue.c则是对内核提供的请求队列的封装,我们暂时不用深入理解

4、它,只需要知道一个块设备需要一个请求队列就可以了。(2)核心层核心层封装了MMC/SD卡的命令,例如存储卡的识别,设置,读写。例如不管什么卡都应该有一些识别,设置,和读写的命令,这些流程都是必须要有的,只是具体对于不同的卡会有一些各自特有的操作。Core.c文件是由sd.c、mmc.c两个文件支撑的,core.c把MMC卡、SD卡的共性抽象出来,它们的差别由sd.c和sd_ops.c、mmc.c和mmc_ops.c来完成。(3)主机控制器层主机控制器则是依赖于不同的平台的,例如s3c2410的卡控制器和atmel的卡控制器必定是不一样的,所以要针对不同的控制器来实现。以s

5、3cmci.c为例,它首先要进行一些设置,例如中断函数注册,全能控制器等等。然后它会向core层注册一个主机(host),用结构mmc_host_ops描述,这样核心层就可以拿着这个host来操作s3c24xx的卡控制器了,而具体是s3c24xx的卡控制器还是atmel的卡控制器,core层是不用知道的。驱动程序层次图好了,对这几个目录有一个大概认识以后,我们来看几个重要的数据结构:structmmc_host用来描述卡控制器structmmc_card用来描述卡structmmc_driver用来描述mmc卡驱动structmmc_host_ops用来描述卡控制器操作集

6、,用于从主机控制器层向core层注册操作函数,从而将core层与具体的主机控制器隔离。也就是说core要操作主机控制器,就用这个ops当中给的函数指针操作,不能直接调用具体主控制器的函数。第一阶段:从s3cmci_init开始往下看staticint__inits3cmci_init(void){platform_driver_register(&s3cmci_driver_2410);}有platform_driver_register函数,根据设备模型的知识,我们知道那一定会有对应的platform_device_register函数的,可是在哪里呢?没有看到,那是不

7、是这个s3cmci_driver_2410当中给的probe函数就不执行了???当然不是,mci接口一般都是硬件做好的(我认为是这样),所以在系统启动时一定会有调用platform_device_register对板上的资源进行注册,如果没有这个硬件资源,那我们这个驱动也就没有用了。好,我们就假定是有mci接口的,而且也有与s3cmci_driver_2410对应的硬件资源注册了,那自己就会去跑probe函数。来看一下s3cmci_driver_2410:staticstructplatform_drivers3cmci_dr

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。