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

相关推荐
千里马学框架1 天前
一起学 Android 14:ShellTransition 屏幕旋转过程深度剖析
android·智能手机·性能优化·framework·性能·屏幕旋转·rotation
美狐美颜SDK开放平台1 天前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
AFinalStone1 天前
Android7 SystemUI源码解析(七)Keyguard锁屏模块深度解析
android·systemui
致远ccc1 天前
Google Play 上架前如何测试 App?多国家 Android 环境测试
android·app测试·googleplay·多国家应用测试
ttyyttemo1 天前
Kotlin 协程中的 Job 结构化并发与取消
android
sun0077001 天前
tbox 4g/5g切换,导致wan ip 改变,导致车机旧网络不可用。需要重启车机才行
android
其实防守也摸鱼1 天前
内网穿透与反向代理:原理、工具与实战指南
android·大数据·运维·安全·网络安全·自动化·渗透
AFinalStone1 天前
Android7 SystemUI 源码解析(四)NavigationBar 导航栏与 SystemBars
android·systemui
JMchen1 天前
属性动画原理与高级动画实现
android·kotlin·canvas
AFinalStone1 天前
Android7 SystemUI 源码解析(二)启动流程深度解析
android·systemui