概述
文章目录
- 环境说明
- 一. 修改wifi驱动
- 1. 修改reg_on和host_wake引脚
- 2. 屏蔽扫卡操作
- 3. 将wifi驱动代码放到linux内核中进行编译
- 二. 配置内核
- 1. CFG80211配置
- 2. sdio配置
- 3. 配置wifi驱动模块
- 4. 编译内核和wifi驱动模块
- 三. 修改uboot中 sdio口复用
- 四. 在板子上调试 wifi驱动
环境说明
- 平台:hi3516cv500
- wifi模块:AP6255 (sdio接口)
- kernel版本:4.9.37
- wifi驱动版本:bcmdhd.100.10.545.x
一. 修改wifi驱动
1. 修改reg_on和host_wake引脚
将reg_on和host_wake引脚修改为我们自己板子上连接到hi3516cv500的GPIO口,具体修改如下:
找到dhd_gpio.c文件:将其中的 gpio_wl_reg_on
和gpio_wl_host_wake
引脚修改为自己板子上的GPIO口,如我的 reg_on 引脚接到的是 GPIO0_4
,那么 gpio_wl_reg_on
就是 0x8+4 = 4,我的HOST_WAKE接的是 GPIO0_5
,gpio_wlhost_wake
就是 0x8+5 = 5。
2. 屏蔽扫卡操作
扫卡操作驱动里调用的是linux内核中的接口,这个版本的驱动中用的比较老的接口,与当前4.9版本的接口对应不上,可以直接屏蔽掉,linux开机时内核中会进行扫卡操作。
文件:dhd_gpio.c 函数名:dhd_wlan_set_carddetect()
需要屏蔽的地方:将截图中红色划线的函数进行注释,不然编译不过。
3. 将wifi驱动代码放到linux内核中进行编译
- 将驱动代码放到如下路径:/linux-4.9.37.y/drivers/net/wireless/bcmdhd
- Makefile中增加wifi驱动代码编译:
路径:/linux-4.9.37.y/drivers/net/wireless/Makefile
- Kconfig 中增加bcmdhd驱动配置选项:
Kconfig路径:/linux-4.9.37.y/drivers/net/wireless/Kconfig
二. 配置内核
1. CFG80211配置
2. sdio配置
我们的wifi模块是接的sdio1,需要在设备树中将sdio1打开:
将disable
状态改成okay
。
文件路径:arch/arm/boot/dts/hi3516cv500-demb.dts
还要在设备树中添加sdio中断状态:
文件路径:arch/arm/boot/dts/hi3516cv500.dtsi
3. 配置wifi驱动模块
这里建议配置成模块,方便调试,sdio使用内部中断,In-Band Interrupt
。
4. 编译内核和wifi驱动模块
make ARCH=arm CROSS_COMPILE=arm-himix200-linux- uImage -j12
make ARCH=arm CROSS_COMPILE=arm-himix200-linux- modules
生成的wifi驱动文件为bcmdhd.ko
。
三. 修改uboot中 sdio口复用
具体操作可参见 Hi3516CV500_SDK_V2.0.2.0/package/osdrv/readme_cn.txt
中uboot编译。
将单板Excel表格中添加sdio复用寄存器配置,关于GPIO复用寄存器配置说明前面章节中已经说明,这里不再复述。
四. 在板子上调试 wifi驱动
- 重新烧写上面编译过的uboot,uImage。
- 将
bcmdhd.ko
(wifi驱动),fw_bcm43455c0_ag_apsta.bin(固件),nvram_ap6255.txt放到板子上。 - 加载驱动:`insmod bcmdhd.ko “firmware_path=/opt/fw_bcm43455c0_ag_apsta.bin nvram_path=/opt/nvram_ap6255.txt”
- 若加载成功,
ifconfig -a
会出现wlan0
网络设备:
后面章节我们会继续讲解在调试过程中遇到的问题以及排查方法。
最后
以上就是虚幻星星为你收集整理的海思wifi驱动一的全部内容,希望文章能够帮你解决海思wifi驱动一所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复