《电子技术应用》
您所在的位置:首页 > 嵌入式技术 > 其他 > Linux设备驱动程序架构分析之MMC/SD(六)

Linux设备驱动程序架构分析之MMC/SD(六)

2015-04-29
关键词: Mini2440 MMC/SD

一、s3cmci_ops分析

在上一篇文章中我们分析了Mini2440 MMC/SD驱动的probe函数s3cmci_probe。在该函数中初始化了struct mmc_host指针变量mmc,其中,设置mmc->ops为s3cmci_ops,s3cmci_ops定义在drivers/mmc /host/s3cmci.c文件中:

捕获.PNG

struct mmc_host是mmc core层与host层的接口,mmc_host.ops是控制host完成用户请求的接口函数集,其类型是struct mmc_host_ops,该结构体定义在include/linux/mmc/host.h文件中:

捕获.PNG

捕获.PNG

request函数用于处理用户的请求。

set_ios函数用于设置SDI的控制参数,如时钟、总线宽度等等。

get_ro函数用于探测SD卡是否有写保护。

get_cd函数用于探测卡是否已插入插槽。

enable_sdio_irq函数用于启动或禁用SDI中断。

需要注意的是,为什么没有对MMC/SD进行读写的read和write函数呢?这是因为Linux块设备的读写操作是通过request函数完成的。

那么对于Mini2440,它的s3cmci_ops中的成员函数在什么时候会被调用呢?举例如下:

在drivers/mmc/core/core.c文件中:

捕获.PNG

捕获.PNG

可以看到255行,调用了host->ops->request函数,即s3cmci_request函数。

再比如,在drivers/mmc/core/core.c文件中:

捕获.PNG

可以看到,970行,调用了host->ops->set_ios函数,即s3cmci_set_ios函数。

下面我们就来看一下s3cmci_ops的各个成员函数的实现。

s3cmci_get_ro函数定义在drivers/mmc/host/s3cmci.c文件中:

捕获.PNG

本站内容除特别声明的原创文章之外,转载内容只为传递更多信息,并不代表本网站赞同其观点。转载的所有的文章、图片、音/视频文件等资料的版权归版权所有权人所有。本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如涉及作品内容、版权和其它问题,请及时通过电子邮件或电话通知我们,以便迅速采取适当措施,避免给双方造成不必要的经济损失。联系电话:010-82306118;邮箱:aet@chinaaet.com。