ok6410的mmc卡驱动分析.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
ok6410的MMC卡驱动分析  内核已经存在SD卡的驱动,所以仅需要添加SD卡设备到设备列表注册就可以了。但是从头到尾分析一下MMC的驱动对于理解linux的驱动设计  思想是很有帮助的。mmc分为控制器和mmc卡,所以也有两个驱动  1. core文件夹的core.c先创建一个工作队列,再注册总线和类。  2. 接着card文件夹的block.c再申请主设备号,并将块设备的驱动挂载到上面的总线上(mmc_register_driver)。  3. host文件夹中sdhci-s3c.c再注册platform驱动,板文件注册platform设备,所以platform总线会调用该驱动的probe。  4. probe中主要先由板文件得到硬件资源,申请后记录到一个结构体中struct sdhci_s3c *sc;这个主要用来方便实现操作函数。  5. probe再申请控制器结构体host,并初始化一些成员,关键是指定了操作函数集合sdhci_s3c_ops。  其实sdhci_alloc_host分配了sdhci_host和mmc_host两个结构体,并将sdhci_host的mmc成员指向mmc_host。  6. probe再调用sdhci_add_host(host),实际上又调用了mmc_add_host将这个控制器设备添加到内核中。  7. 总结:  其实这个host设备和字符驱动中的cdev作用差不多,仅用platform_driver与设备匹配后再在cdev的fops中做真正的硬件工作。  所以这个添加的host也是做真正的工作:探测到mmc卡并初始化一个card结构体挂载到总线上。总线用最前面的块设备驱动来匹配,  最终肯定是用一个块设备来表示卡。那么块设备驱动中的函数是怎样调用到这个控制器host的函数呢?  很简单,仅需要用一个指针指向host就可以了。  还有,在platform_driver的probe中添加到内核的控制器设备host添加到哪里了?它又是如何完成上面的探测工作呢?  由下面,host仅需要探测卡和发送数据命令即可,工作简单,所以就放在/sys/class/mmc/下的mmc0文件。而不需要把控制器也  挂载到总线上,因为它不需要什么驱动,不像I2C控制器也挂载在总线上并要驱动。  探测工作主要依靠工作队列,中断,定时器来完成的,不需要深究。

文档评论(0)

137****0427 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档