内核版本 4.9.118
网卡驱动 博通 bcmdhd 驱动
平台 全志H6 orangepi 3 开发板
我看的这个驱动不知道是不是orangepi 官方自己修改后的驱动
orangepi 3 的4.9版本内核的设备树 和平常看到的设备树表示方式也不同。
一般我见到的都是 对不同的板子有不同的dts 文件,该文件包含有描述SOC 内部外设信息的dtsi文件,如果自己要添加或者修改直接修改dts文件即可,但我使用的这个版本的设备树的所有文件都在同一个dts文件中,修改的话也是直接修改该文件。
首先设备驱动需要初始化。于是找到了最开始的初始化函数 module_init(dhd_module_init);
分析后得到如下流程
dhd_module_init //模块初始化
->dhd_wifi_platform_register_drv
->wifi_ctrlfunc_register_drv
->dhd_wlan_init_plat_data
->dhd_wlan_init_gpio //return 0
->sunxi_wlan_get_oob_irq
->sunxi_wlan_get_oob_irq_flags
->dhd_wifi_platform_load
->wl_android_init
->wl_netlink_init
->dhd_wifi_platform_load_sdio
->wifi_platform_set_power
->plat_data->set_power //dhd_wlan_set_power
->wifi_platform_bus_enumerate
->plat_data->set_carddetect //dhd_wlan_set_carddetect
->sunxi_wlan_get_bus_index
->sunxi_mmc_rescan_card
->mmc_detect_change
分析到这里 最重要的就来了
mmc_detect_change 函数 这个函数实现对mmc总线的扫描,以检测mmc总线上设备的变化,实现sd卡的热插拔
进一步分析后可以得到如下流程