浅析sd卡设备申请和驱动绑定简单流程
sd卡插入之后,首先GPIO8发生中断,执行mmc_rescan()分配该sd卡的mmc_card结构体,该sd结构体分配的bus总线为mmc_bus_type,也就是该mmc_card结构体会尝试从mmc_bus总线的drivers链表上获取与mmc_card结构体从sd卡硬件读取出来的vendor值相匹配的driver,如果找到,那么说明该mmc_card有driver来驱动sd单元,否则没有,sd单元,即:mmc_card结构体,经过上述的过程之后,mmc_rescan()继续细致初始化sd单元的子功能单元-func,函数sdio_alloc_func()申请到的sdio_func子功能单元所属bus总线为sdio_bus_type,对于wlan驱动来说,wlan仅仅使用了sdio_func,所以wlan驱动程序也就仅仅实现了sdio_func子功能单元驱动,没有去实现mmc_card结构体的驱动,所以一个sd接口设备会有2种驱动,分别位于2条不同的bus总线上,一个是mmc_card结构体设备位于的mmc_bus_type总线上的driver驱动,一个是sdio_func子功能们所在的sdio_bus_type总线上的driver驱动,设备驱动应该分别实现这2条总线下的相应驱动,但实际并不是这样,我们只关心我们用的上的总线,所以我们的wlan仅仅实现了sdio_bus_type总线上的sdio_func子功能驱动,另外drivers\mmc\card\block.c为sd卡支持fat文件系统的驱动文件,具体由module_init(mmc_blk_init)初始化[gliethttp_20080629].
阅读(2909) | 评论(0) | 转发(1) |