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

相关推荐
城东米粉儿15 分钟前
Android KMP 笔记
android
冬奇Lab1 小时前
WMS核心机制:窗口管理与层级控制深度解析
android·源码阅读
松仔log2 小时前
JetPack——Paging
android·rxjava
城东米粉儿3 小时前
Android Kotlin DSL 笔记
android
城东米粉儿3 小时前
Android Gradle 笔记
android
城东米粉儿3 小时前
Android Monkey 笔记
android
城东米粉儿3 小时前
Android 组件化 笔记
android
编程小风筝3 小时前
Android移动端如何实现多线程编程?
android
城东米粉儿4 小时前
Android 模块化 笔记
android