android wifi驱动适配

1、获取驱动

一般是通过客户向原厂获取到该款wifi的驱动。

2、编译修改

Kconfig修改:

路径:longan/kernel/linux-4.9/drivers/net/wireless/Kconfig

复制代码
--- a/drivers/net/wireless/Kconfig
+++ b/drivers/net/wireless/Kconfig
@@ -116,5 +116,6 @@ source "drivers/net/wireless/uwe5622/Kconfig"
source "drivers/net/wireless/rtl8822bs/Kconfig"
source "drivers/net/wireless/rtl8723ds/Kconfig"
source "drivers/net/wireless/rtl8821cs/Kconfig"
+source "drivers/net/wireless/ssv6x5x/Kconfig"

Makefile修改:

复制代码
   --- a/drivers/net/wireless/Makefile
  +++ b/drivers/net/wireless/Makefile
   obj-$(CONFIG_SPARD_WLAN_SUPPORT) += uwe5622/
  +obj-$(CONFIG_SSV6158)   += ssv6x5x/

3、驱动移植

将获取到的ssv6x5x wifi驱动放到对应的驱动目录下

复制代码
longan/kernel/linux-4.9/drivers/net/wireless

4、内核配置

make ARCH=arm64 menuconfig 手动进行修改。或者按如下方法修改代码:

路径:longan/kernel/linux-4.9/arch/arm64/configs/sun50iw9p1smp_h616_android_defconfig

复制代码
CONFIG_AIC8800_WLAN_SUPPORT=m
CONFIG_AIC8800_BTSDIO_SUPPORT=m
+CONFIG_SSV6X5X=m

5、依赖

查看原厂提供的驱动移植指南,确认是否要依赖一些特殊属性。

(1)ssv6x5x WiFi 驱动配置,config 需要进行配置如下。如要 ssv6x5x buildin 到内核(前提是cfg80211/mac80211 都需要 buidin 到内核),buildin 选 Y,编成 module 选 M"。

(2)内核需支持 MAC80211 & cfg80211,buildin 选 Y,编成 module 选 M。"

那么这里就需要在配置中加上80211的配置。

路径:longan/kernel/linux-4.9/arch/arm64/configs/sun50iw9p1smp_h616_android_defconfig

复制代码
# CONFIG_CFG80211_WEXT is not set
# CONFIG_LIB80211 is not set
-# CONFIG_MAC80211 is not set
+CONFIG_MAC80211=y
+CONFIG_MAC80211_HAS_RC=y
+CONFIG_MAC80211_RC_MINSTREL=y
+CONFIG_MAC80211_RC_MINSTREL_HT=y
+CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y
+CONFIG_MAC80211_RC_DEFAULT="minstrel_ht"

6、ssv适配

android的ssv适配:保证\android\hardware目录下ssv文件有适配

7、 使能P2P功能

路径:android/hardware/aw/wireless/wlan/config/p2p_supplicant_overlay.conf

复制代码
--- a/wlan/config/p2p_supplicant_overlay.conf
+++ b/wlan/config/p2p_supplicant_overlay.conf
@@ -1,3 +1,4 @@
+p2p_no_group_iface=1
disable_scan_offload=1

路径:android/external/wpa_supplicant_8/wpa_supplicant

复制代码
   --- a/wpa_supplicant/wpa_supplicant.c
   +++ b/wpa_supplicant/wpa_supplicant.c
   @@ -5807,6 +5807,11 @@ static int wpa_supplicant_init_iface(struct wpa_supplicant *wpa_s,
         * Doing it here as it determines whether l2_packet_init() will be done
           * during wpa_supplicant_driver_init().
            */
   +
   +       if (strstr(wpa_s->ifname, "wlan")) {
   +               wpa_s->drv_flags = wpa_s->drv_flags | WPA_DRIVER_FLAGS_DEDICATED_P2P_DEVICE;
   +       }

8、wifi驱动识别与检测

这里有两种方式,一种是强制设置(一个SDK只能支持一种wifi驱动,不建议使用),一种是自适应识别。

(1)强制设置:android\device\softwinner\XXX\BoardConfig.mk 中对wifi的几个变量进行强制设置(这里的xxx是方案名)

文件路径:android/device/softwinner/{DEVICE}/{PRODUCT}

BoardConfig.mk 文件决定 android 要加载哪一款 Wi‑Fi 模组,以及是否支持蓝牙

复制代码
# wifi and bt configuration

# 1. Wifi Configuration

BOARD_WIFI_VENDOR := xxx //Wi‑Fi 模组厂商

BOARD_USR_WIFI := xxx // Wi‑Fi 模组型号

WIFI_DRIVER_MODULE_PATH := "/vendor/lib/modules/xxx.ko" // Wi‑Fi 驱动 ko 的路径

WIFI_DRIVER_MODULE_NAME := "xxx" // Wi‑Fi 驱动名称 (加载驱动后 lsmod 的名字)

WIFI_DRIVER_MODULE_ARG := "" // Wi‑Fi 驱动加载所需参数

# 2. Bluetooth Configuration

BOARD_BLUETOOTH_VENDOR := xxx // 蓝牙模组厂商

BOARD_HAVE_BLUETOOTH_NAME := xxx //蓝牙模组型号

(2)自适应识别:android/hardware/aw/wireless/hwinfo/libhwinfo.c 中加入"ssv6x5x"即可完成自动识别

9、重新编译测试

完成以上步骤后,开始进行编译,解决编译问题打包完成后,开始测试wifi的基本功能。

相关推荐
灯塔@kuaidao9 小时前
平台交叉编译名词解释与基础流程
android
__Witheart__10 小时前
3568 Android otg模式下adb热拔插不识别
android·adb·rockchip
明天…ling12 小时前
Upload-Labs (Pass1-Pass21) 完整通关思路与源码分析
android·网络安全·渗透测试·burpsuite·upload-labs·文件上传绕过·靶场复现
__Witheart__12 小时前
3568 Android ntp校时使用
android·rockchip
wddptwd2813 小时前
android studio 报错怎么处理 java.lang.NullPointerException
android·java·android studio
美狐美颜SDK开放平台13 小时前
直播APP开发,美颜SDK和相机SDK有什么区别?
android·深度学习·数码相机·ios·直播美颜sdk·视频美颜sdk
唐诺15 小时前
Android Open Accessory (AOA) 协议完全解析
android·usb·aoa
我命由我1234516 小时前
Android 开发 - 广播组件(标准广播、有序广播、静态注册广播、分钟到达广播、网络变更广播...)
android·java·开发语言·网络·java-ee·android studio·android-studio
A富得流油的咸鸭蛋17 小时前
安卓鸿蒙面试
android·面试·harmonyos
wardenlzr17 小时前
@IntDef 替代 enum:Android 官方推荐的轻量常量方案
android·性能