浅析Linux下sdio接口对sd卡硬件检测流程
mmc_alloc_host()申请平台SD单元对应的mmc_host结构体->INIT_DELAYED_WORK(&host->detect, mmc_rescan)创建该平台SD单元对应的sdio设备插入检测内核work_queue工作队列函数mmc_rescan->mmc_rescan()这是一个共用函数,如果有4个SD卡控制器在你的arm平台上,那么4个SD控制器将分别对应4个
mmc_alloc_host()申请平台SD单元对应的mmc_host结构体->
INIT_DELAYED_WORK(&host->detect, mmc_rescan)创建该平台SD单元对应的sdio设备插入
检测内核work_queue工作队列函数mmc_rescan->mmc_rescan()这是一个共用函数,如果有4个SD卡控制器在你的arm平台上,
那么4个SD控制器将分别对应4个mmc_host结构体,分别对应4个sdio设备插入检测内核work_queue工作队列,
但工作队列都将调用mmc_rescan()这1个函数,所以linux内核的面向对象的类共用机制做得很好->
使用mmc_alloc_host()函数申请的平台mmc_host结构体,没有对其分配bus总线指针,仅分配了它所属的parent,即这个mmc不属于某个bus,
所以这个mmc_host对应的dev也不会从任何bus总线上分配到任何driver驱动,这也是应该的.
mmc_attach_sdio()->mmc_attach_bus(host, &mmc_sdio_ops);
mmc_sdio_init_card()->sdio_init_func()->sdio_alloc_func()->这样当detect到sdio设备之后,
将分配dev对应的sdio_func结构题,
调用sdio_read_func_cis()的cistpl_manfid()来填充sd卡的vendor,这样当wlan驱动probe的时候,
就会和wlan驱动的id表中的vendor尝试匹配,如果成功,那么wlan驱动将接管该检测到的sd卡
更多推荐
所有评论(0)