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的基本功能。

相关推荐
游戏开发爱好者81 小时前
日常开发与测试的 App 测试方法、查看设备状态、实时日志、应用数据
android·ios·小程序·https·uni-app·iphone·webview
王码码20351 小时前
Flutter for OpenHarmony 实战之基础组件:第三十一篇 Chip 系列组件 — 灵活的标签化交互
android·flutter·交互·harmonyos
黑码哥1 小时前
ViewHolder设计模式深度剖析:iOS开发者掌握Android列表性能优化的实战指南
android·ios·性能优化·跨平台开发·viewholder
亓才孓2 小时前
[JDBC]元数据
android
独行soc2 小时前
2026年渗透测试面试题总结-17(题目+回答)
android·网络·安全·web安全·渗透测试·安全狮
金融RPA机器人丨实在智能2 小时前
Android Studio开发App项目进入AI深水区:实在智能Agent引领无代码交互革命
android·人工智能·ai·android studio
科技块儿2 小时前
利用IP查询在智慧城市交通信号系统中的应用探索
android·tcp/ip·智慧城市
独行soc2 小时前
2026年渗透测试面试题总结-18(题目+回答)
android·网络·安全·web安全·渗透测试·安全狮
王码码20353 小时前
Flutter for OpenHarmony 实战之基础组件:第二十七篇 BottomSheet — 动态底部弹窗与底部栏菜单
android·flutter·harmonyos
2501_915106323 小时前
app 上架过程,安装包准备、证书与描述文件管理、安装测试、上传
android·ios·小程序·https·uni-app·iphone·webview