博通 bcmdhd 网卡驱动分析

本文主要探讨了在全志H6 orangepi 3开发板上,使用内核4.9.118版本的博通bcmdhd网卡驱动。在分析过程中,发现该驱动的设备树结构与众不同,所有配置集中在单一dts文件中。驱动初始化从module_init(dhd_module_init)开始,深入研究后揭示了mmc_detect_change函数在实现mmc总线设备热插拔中的关键作用,通过延迟任务队列执行mmc_rescan函数,确保中断触发后能正确响应。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

内核版本 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卡的热插拔

进一步分析后可以得到如下流程


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值