1、源码获取
可以通过瑞芯微公司提供的ftp文档服务器中查找对应u***wifi驱动源码或找模块供应商要到wifi模块驱动源码
2、拷贝源码
将上面提取到的u*** wifi驱动拷贝到内核drivers/net/wireless/rockchip_wlan/rtl8812au目录中
3、修改内核config文件
打开arch/arm64/configs/rockchip_defconfig
修改内容:
CONFIG_CFG80211=y
CONFIG_MAC80211=y
CONFIG_WIFI_LOAD_DRIVER_WHEN_KERNEL_BOOTUP=n
#CONFIG_AP6XXX=y
CONFIG_RTL8188EU=n
CONFIG_WIFI_BUILD_MODULE=y
CONFIG_RTL8812AU=m
4、添加Makefile与Kconfig
driversnetwirelessrockchip_wlanMakefile
obj-$(CONFIG_RTL8812AU) += rtl8812au/
driversnetwirelessrockchip_wlanKconfig
source "drivers/net/wireless/rockchip_wlan/rtl8812au/Kconfig"
5、修改代码生成方式,使用动态加载模块
#ifdef CONFIG_RTL_WIRELESS_SOLU
tiON
if (type < WIFI_RTL_SERIES) {
/*if (enable > 0)
ret = rockchip_wifi_init_module_rtkwifi();
else
rockchip_wifi_exit_module_rtkwifi();*/
return ret;
}
#endif
注释调驱动其他加载方式
//#ifdef CONFIG_WIFI_BUILD_MODULE
module_init(rockchip_wifi_init_module_rtkwifi);
module_exit(rockchip_wifi_exit_module_rtkwifi);
/*#else
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 1, 0))
#ifdef CONFIG_WIFI_LOAD_DRIVER_WHEN_KERNEL_BOOTUP
late_initcall(rockchip_wifi_init_module_rtkwifi);
module_exit(rockchip_wifi_exit_module_rtkwifi);
#else
EXPORT_SYMBOL(rockchip_wifi_init_module_rtkwifi);
EXPORT_SYMBOL(rockchip_wifi_exit_module_rtkwifi);
#endif
#else
#ifdef CONFIG_ANDROID_4_2
module_init(rockchip_wifi_init_module);
module_exit(rockchip_wifi_exit_module);
#else
EXPORT_SYMBOL(rockchip_wifi_init_module);
EXPORT_SYMBOL(rockchip_wifi_exit_module);
#endif
#endif
#endif*/
6、驱动编译方式
方式一:
rk3399编译u*** wifi驱动采用ko的方式在系统中加载,使用对应的脚本进行编译,脚本文件
device/rockchip/common/build_wifi_ko.sh
方式二:
在内核中输入命令
make ARCH=arm64 modules -j8
在驱动代码目录下会生成对应的ko文件
7、上层驱动加载
上层驱动加载直接在代码中insmod对应的ko文件
将u***wifi的ko文件拷贝到系统/sys/lib/modules目录下,开启wifi会自动加载wifi驱动。
在编译系统时build_wifi_ko.sh脚本会将编译生成ko文件拷贝到对应的目录下。
8、问题分析
在编译生成ko驱动后,拷贝到Android系统/sys/lib/modules目录下,开启wifi发现wifi开启失败,上层服务调用失败。
打开u***wifi驱动LOG打印,发现上层做系统调用时驱动对上层应用返回过空指针
查找rtw_cfgvendor_lstats_get_info函数,发现该函数由CONFIG_RTW_CFGVEDNOR_LLSTATS宏控制
在u***wifi驱动的Makefile中关闭上述宏
#EXTRA_CFLAGS += -DCONFIG_RTW_CFGVEDNOR_LLSTATS
再次编译u***wifi驱动代码,更换ko文件,重新启动系统,wifi开启成功。
原作者:小忽悠0011
0