这里比较关键的是 mmc_rescan 这个函数,它能够探测出 sdio 总线上的器件如:sdio设备、sd卡、emmc 等,函数
系统初始化时会主动调用 mmc_rescan 来探测一次设备,spa
以后会调用延时 work: mmc_schedule_delayed_work(&host->detect, HZ) 以固定的频率来探测设备,以保证有设备接入时能够第一时间被检测到,这种机制属于热插拔,而这种检测的方式相似于 USB 的中断传输方式。code
host->detect 被初始化为: INIT_DELAYED_WORK(&host->detect, mmc_rescan),因此系统中在一直循环调用 mmc_rescan。blog
图示的 sdio 设备是以 broadcom 无线网卡驱动为例的,当初就是想分析 wifi 驱动,因此就牵连出了这么多,接口
最后发现 broadcom 的驱动略庞大,貌似把 mac80211 给取替了,io
因此后来转头先分析 USB 接口的无线网卡,搞起来就就轻松许多,待这款网卡彻底基本分析透彻后写出随笔,再回来搞 broadcom。class