1、目的
明确
Android平台上wifi自动兼容原理和注意事项,按照本文档wifi提供的完全自动兼容说明生成固件后,即可支持相应的
WiFi模块,并且一套固件可以支持多个WIFI模块。
按照本文提供的方法,android 平台 wifi 可实现完全自动兼容,android 和
kernel 无需任何额外配置。
1.1 Kernel 注意事项
wifi 完全自动兼容方案,AP6xxx 系列 wifi 和
REALTEK 系列 wifi 驱动必须采用 module 方式,不能 build in 到内核 kernel.img 中;如果希望采用 build in 驱动到内核,参考第 7 章节进行;采用自动兼容方案需要确认各 andorid 平台内核使用的 conifig;确认 defconfig 是将 wifi 驱动编译成 ko modules 的配置,defconfig 参考如下配置,如下配置基于 SDK 对外最新内核代码:
CONFIG_WL_ROCKCHIP=y
CONFIG_WIFI_BUILD_MODULE=y
# CONFIG_WIFI_LOAD_DRIVER_WHEN_KERNEL_BOOTUP is not set
CONFIG_AP6XXX=m
CONFIG_RTL_WIRELESS_SOLUTION=y
CONFIG_
RTL8188EU=m
CONFIG_RTL8188FU=m
CONFIG_
RTL8189ES=m
CONFIG_RTL8189FS=m
CONFIG_
RTL8723BS=m
CONFIG_
RTL8723BU=m
CONFIG_RTL8723CS=m
CONFIG_RTL8723DS=m
Device Drivers --->
Network device support ---> Wireless LAN ---> Rockchip Wireless LAN support --->
板级 dts 无需配置 WIFI 芯片类型(配置了也可以),因为加载 wifi 驱动不依赖 wifi_chip_type节点,如果 WIFI 没有根据 RK 发布的硬件参考设计,板级 dts 先确认如下信息:
(注意 kernel4.4 及以后的内核 wifi power 脚改到 sdio 中配置 reset-gpios)
说明:目前 WIFI 完全兼容方案,基于 RK 发布的 WIFI 参考设计,WIFI 上电管脚默认高电平有效,具体项目需要确认 WIFI 供电管脚和高低有效情况。
如果一套固件要做到全部兼容 RK support list 中的 WIFI,硬件板型的 WIFI 供电管脚(所有板子硬件型号要保持一致)以及 SDIO 电平都需要提前确认,在本文第四章节有详细介绍硬件注意事项。
1.2 Android 注意事项
1.编译 kernel时会自动编译 wifi ko 文件,编译 Android 的时候会自动将 wifi ko 文件拷贝到vendor.img 中,存放在/vendor/lib/modules/目录下。
2、WIFI兼容原理简要说明
2.1 WIFI 芯片识别流程
1. 开机对 wifi 模块上电,并自动进行扫描 sdio 操作。
2. 系统启动打开 wifi 操作时,分别对系统 sys/bus/sdio(sdio wifi), sys/bus/usb(usb wifi),sys/bus/pic (pcie wifi )文件系统下的 uevent 进行读取。
3. 获取到 wifi 芯片 vid pid 加载相应的 wifi ko 驱动。
4. 识别到 wifi 类型后加载不同的 wpa_supplicant 参数启动 wifi。
核心代码目录:
android /Frameworks/opt/net/wifi
kernel/net/rfkill/rfkill-WLAN.c
hardware/Broadcom
external/wpa_supplicant_8
3、新增 WIFI 模块调试
目前对外发布的 andriod SDK,WIFI 自动兼容框架已经搭建完毕,如果客户需要自行调试其他模块,只需按照本章节提到的修改地方进行修改即可。
3.1 WIFI 驱动移植
RK 平台上所有的 WIFI 模块驱动都是放到内核 kernel/drivers/net/wireless/rockchip_wlan 目录,一般移植新的 WIFI 驱动,需要在 kernel/drivers/net/wireless 目录添加相应的 wifi 模块的 Kconfig 和Makefile,有的模块还需要修改 wifi 驱动的 Kconfig 和 Makefile(根据特定的 wifi 模块驱动),如果采用 Realtek 的模块,可以参考 Rockchip_Introduction_REALTEK_WIFI_Driver_Porting_CN&EN.pdf 文档。
内核能正确编译出 wifi ko 驱动文件,wifi ko 文件在编译 kernel 的时候会自动编译。
注意:由于目前 wifi 驱动是采用 ko 方式,如果有修改内核网络相关配置,一定要重新编译ko,否则很可能导致 wifi ko 和内核网络协议栈不匹配。
更多详细内容请下载附件查看