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