1.先注册
dhd_mudule_init dhd_linux.c
dhd_bus_register dhd_sdio.c
bcmsdh_register bcmsdh_linux.c
sdio_function_init bcmsdh_sdmmc_linux.c
sdio_register_driver bcmsdh_sdmmc_linux.c (标准的sdio注册函数)
bcmsdh_sdmmc_probe bcmsdh_sdmmc_linux.c(注册,然后上电时候网卡被发现时候调用)
bcmsdh_probe bcmsdh_linux.c
通过drvinfo.attach调用上面dhd_bus_register注册的dhdsdio_probe函数从而调用下面两个函数
dhd_attach 主要工作是创建和初始化dhd_info_t和net_device两个结构,然后调用dhd_add_if将已经初始化的net_device结构变量添加到dhd_info_t的iflist列表中。
dhd_net_attach进一步初始化net_device结构变量,例如填充netdev_ops、ethtool_ops、dev_addr,还初始化无线设备特有的get_wireless_stats、 wireless_handlers最后调用register_netdev向网络子系统注册该接口。
2.错误分析
2、有打印SD/MMC initialization started......,但sdio设备初始化不成功 :
2.1 No any SD/MMC card detected!, 则检查wifi模块供电及WL_REG_ON管脚的电平正确与否。
2.2 出现读写SD_MMC_ERROR_TIMEOUT, 则检查wifi模块与cpu间的sdio接口硬件连接有没问题。
2.3 出现读写SD_MMC_ERROR_DATA_CRC, 则需要在sdio总线的data0~3上加外置上拉电阻。
3、dhd -i wlan0 wlmsglevel 0x7ffff查看log