sd卡驱动分析1

sd卡驱动分析1

ID:22373345

大小:1.14 MB

页数:113页

时间:2018-10-28

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

《sd卡驱动分析1》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、SD卡驱动分析1块请求处理(linux/driver/mmc/card)21.probe22.do_request133.小结24core层处理(linux/driver/mmc/core)251.core层初始化252.mmc_claim_host283.mmc_release_host304.mmc_wait_for_req325.mmc_wait_for_cmd35SD控制器之初始化(linux/driver/mmc/host)36core层续集之mmc_add_host48SD控制器之真正的

2、硬件操作821.s3cmci_get_ro832.s3cmci_set_ios843.s3cmci_request之命令处理864.s3cmci_request之数据传输96小结112SD卡驱动分析SD卡驱动分三层结构分别对应driver/mmc目录下的card、host、core三个文件夹。其层次关系如下所示:块设备驱动层(linux/block)内核空间file_operations调用块设备请求处理(linux/driver/mmc/card)MMC核心层(linux/driver/mmc/c

3、ore)mmc主机控制器mmc_host_ops(linux/driver/mmc/host)底层硬件(SD/MMC...)分析过程分目录进行,为了与块设备层驱动接轨,这里我们以自顶向下的分析方法来处理SD卡的设备驱动。与块层联系最紧密的就是card目录,首先来看看与块设备接口的部分内容。块请求处理(linux/driver/mmc/card)1.probe按照惯例我们还是先来看下内核地图,Kconfig和Makefile....从kconfig所给的信息来看我们最最关心的还是第7行和第17行,co

4、nfigMMC_BLOCK、configMMC_BLOCK_BOUNCE。其中configMMC_BLOCK是整个MMC层工作的核心,对应于Makefile我们关注如下两行:obj-$(CONFIG_MMC_BLOCK)+=mmc_block.ommc_block-objs:=block.oqueue.o单凭直觉我们不难发现block.c是我们整个card目录的入口,打开文件不难发现在文件末尾处module_init(mmc_blk_init);将整个card目录入口描绘的淋漓尽致。还是来看看mmc

5、_blk_init的相关内容。[card/block.c]673staticint__initmmc_blk_init(void)674{675intres;676677res=register_blkdev(MMC_BLOCK_MAJOR,"mmc");678if(res)679gotoout;680681res=mmc_register_driver(&mmc_driver);682if(res)683gotoout2;684685return0;686out2:687unregister_bl

6、kdev(MMC_BLOCK_MAJOR,"mmc");688out:689returnres;690}667行开门见山,注册块设备驱动。相信看过LDD3的哥们都知道这个函数并无大用,他的作用也远没有他名字来的那般响亮。最多也就动态分配一个主设备号,然后在proc/device中留下点不为人知的记号,真正充NB的还是后面我们看到的add_disk。681行看似新鲜,不过看名字也就是往mmccore里注册点啥。他这一注册不打紧,关键是乱了我们的阵脚,说好了现在只说card目录的要是看了他就惹上core

7、了,不看吧也就没法往下走了。干脆看一点点算了.....[core/bus.c]164intmmc_register_driver(structmmc_driverdrv)165{166drv->drv.bus=&mmc_bus_type;167returndriver_register(&drv->drv);168}166行和167行知道一点点设备模型的哥们,估计在这里就要兴奋了。估计也就能猜到这个core大致都干了些啥勾当。不说别的166行的mmc_bus_type这条总线总得有人维护吧,自古以来

8、这个又脏又累的活儿就是core干的,这里当然也不例外,不过这是后话。167行注册了个device_driver,那当然也有个device了,至于他在哪我们留点神秘感以后再说。只知道有了driver_register自然会发生点啥,至少busprobe是肯定会调用的,下面就来看看这条总线究竟长啥样…[core/bus.c]139staticstructbus_typemmc_bus_type={140.name="mmc",141.dev_attrs=mmc_dev_a

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

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

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