rk3568-android11-wifi-aic8800

参考博客:RK Android11 WiFi模组 AIC8800 驱动移植流程-CSDN博客

1.DTS修改

复制代码
diff --git a/kernel/arch/arm64/boot/dts/rockchip/rp-wifi-bt-ap6xxx-rk3568.dtsi b/kernel/arch/arm64/boot/dts/rockchip/rp-wifi-bt-ap6xxx-rk3568.dtsi
index 35ce9e8c93..53576a75bf 100644
--- a/kernel/arch/arm64/boot/dts/rockchip/rp-wifi-bt-ap6xxx-rk3568.dtsi
+++ b/kernel/arch/arm64/boot/dts/rockchip/rp-wifi-bt-ap6xxx-rk3568.dtsi
@@ -20,7 +20,7 @@
        wireless_wlan: wireless-wlan {
                compatible = "wlan-platdata";
                rockchip,grf = <&grf>;
-               wifi_chip_type = "ap6398s";
+               wifi_chip_type = "AIC8800";
                status = "okay";
        };

diff --git a/kernel/arch/arm64/configs/rockchip_defconfig b/kernel/arch/arm64/configs/rockchip_defconfig
index 577d03aa80..5fed88d43f 100644
--- a/kernel/arch/arm64/configs/rockchip_defconfig
+++ b/kernel/arch/arm64/configs/rockchip_defconfig
@@ -941,10 +941,10 @@ CONFIG_SCHED_STACK_END_CHECK=y
 # CONFIG_DEBUG_PREEMPT is not set
 CONFIG_ENABLE_DEFAULT_TRACERS=y
 CONFIG_BUG_ON_DATA_CORRUPTION=y
+CONFIG_AIC_WLAN_SUPPORT=y
+CONFIG_AIC_FW_PATH="/vendor/etc/firmware"
+CONFIG_AIC8800_WLAN_SUPPORT=m
+CONFIG_AIC8800_BTLPM_SUPPORT=m
 CONFIG_MOTORCOMM_PHY=y
 CONFIG_CANFD_ROCKCHIP2=y
 CONFIG_NEW_BEEP=y

2.驱动部分:

复制代码
diff --git a/kernel/drivers/net/wireless/rockchip_wlan/Kconfig b/kernel/drivers/net/wireless/rockchip_wlan/Kconfig
index c68755edcb..913d8b1a32 100644
--- a/kernel/drivers/net/wireless/rockchip_wlan/Kconfig
+++ b/kernel/drivers/net/wireless/rockchip_wlan/Kconfig
@@ -52,5 +52,6 @@ endif

 source "drivers/net/wireless/rockchip_wlan/mvl88w8977/Kconfig"
 source "drivers/net/wireless/rockchip_wlan/cywdhd/Kconfig"
+source "drivers/net/wireless/rockchip_wlan/aic8800/Kconfig"

 endif # WL_ROCKCHIP
diff --git a/kernel/drivers/net/wireless/rockchip_wlan/Makefile b/kernel/drivers/net/wireless/rockchip_wlan/Makefile
index 15b6ce2e86..bbcb6267fe 100644
--- a/kernel/drivers/net/wireless/rockchip_wlan/Makefile
+++ b/kernel/drivers/net/wireless/rockchip_wlan/Makefile
@@ -10,3 +10,4 @@ obj-$(CONFIG_RTL8822BS) += rtl8822bs/
 obj-$(CONFIG_MVL88W8977)       += mvl88w8977/
 obj-$(CONFIG_WL_ROCKCHIP)      += rkwifi/rk_wifi_config.o
 obj-$(CONFIG_CYW_BCMDHD)       += cywdhd/
+obj-$(CONFIG_AIC_WLAN_SUPPORT) += aic8800/

2.1 makefile修改路径适配自己,我的是RK3568

3.驱动

详情看资源包

注意不要用pact的,用资料\wifi模块\aic8800d_linux_sdk_V4.0_2025_0808_54809c22\SDIO\driver_fw

编译后得到aic8800_bsp.ko和aic8800_fdrv.ko

4.device部分

复制代码
diff --git a/device/rockchip/common/device.mk b/device/rockchip/common/device.mk
index 32228a0951..8d45b05142 100644
--- a/device/rockchip/common/device.mk
+++ b/device/rockchip/common/device.mk
@@ -904,6 +904,10 @@ ifeq ($(strip $(BOARD_HAVE_BLUETOOTH_RTK)), true)
 include hardware/realtek/rtkbt/rtkbt.mk
 endif

+ifeq ($(strip $(BOARD_HAVE_BLUETOOTH_AIC)), true)
+include hardware/rockchip/aic/aicbt/aicbt.mk
+endif
+
 ifeq ($(strip $(TARGET_BOARD_PLATFORM_PRODUCT)), box)
     include device/rockchip/common/samba/rk31_samba.mk
     PRODUCT_COPY_FILES += \
diff --git a/device/rockchip/common/init.insmod.cfg b/device/rockchip/common/init.insmod.cfg
index c7f04a5546..b2331efa9f 100644
--- a/device/rockchip/common/init.insmod.cfg
+++ b/device/rockchip/common/init.insmod.cfg
@@ -6,6 +6,7 @@ insmod /vendor/lib/modules/mali_kbase.ko
 insmod /vendor/lib/modules/rk30_mirroring.ko
 insmod /vendor/lib/modules/rk29-ipp.ko
 insmod /vendor/lib/modules/pvrsrvkm.ko
+insmod /vendor/lib/modules/aic8800_bsp.ko
 #insmod /vendor/lib/modules/rknpu.ko
 #insmod /vendor/lib/modules/rknpu-clang.ko
 #insmod /system/lib/modules/rtk_btusb.ko
diff --git a/device/rockchip/common/wifi_bt_common.mk b/device/rockchip/common/wifi_bt_common.mk
index 9e157683b6..fd88e452cf 100644
--- a/device/rockchip/common/wifi_bt_common.mk
+++ b/device/rockchip/common/wifi_bt_common.mk
@@ -38,4 +38,4 @@ endif
 endif

 BOARD_HAVE_BLUETOOTH_RTK := true
-
+BOARD_HAVE_BLUETOOTH_AIC := true
diff --git a/device/rockchip/common/wpa_config.txt b/device/rockchip/common/wpa_config.txt
index 9ca4ac78f4..b678d3d20a 100644
--- a/device/rockchip/common/wpa_config.txt
+++ b/device/rockchip/common/wpa_config.txt
@@ -25,3 +25,8 @@
 -O/data/vendor/wifi/wpa/sockets
 -g@android:wpa_wlan0

+[aic]
+/vendor/bin/hw/wpa_supplicant
+-O/data/vendor/wifi/wpa/sockets
+-puse_p2p_group_interface=1
+-g@android:wpa_wlan0
diff --git a/device/rockchip/rk356x/init.rk356x.rc b/device/rockchip/rk356x/init.rk356x.rc
index acf2cad3a1..691280863b 100755
--- a/device/rockchip/rk356x/init.rk356x.rc
+++ b/device/rockchip/rk356x/init.rk356x.rc
@@ -57,6 +57,7 @@ service vendor.ril-daemon /vendor/bin/hw/rild -l /vendor/lib64/libquectel-ril.so
 # rpdzkj preinstall
 on property:sys.boot_completed=1
        chmod 755 /vendor/bin/preinstall.sh
+       insmod /vendor/lib/modules/aic8800_bsp.ko
        start  preinstall

4.1打开编译hardware里面的内容;

4.2开机加载aic8800_bsp.ko驱动

4.3配置aic模块的wpa配置,设置aic模块的启动参数

5.external部分

复制代码
diff --git a/external/wpa_supplicant_8/wpa_supplicant/main.c b/external/wpa_supplicant_8/wpa_supplicant/main.c
index 04ba5b1371..3fe132def2 100755
--- a/external/wpa_supplicant_8/wpa_supplicant/main.c
+++ b/external/wpa_supplicant_8/wpa_supplicant/main.c
@@ -413,6 +413,7 @@ out:
 #define SSV_MODULE_NAME "[ssv]"
 #define ESP_MODULE_NAME "[esp]"
 #define SPRDWL_MODULE_NAME "[sprdwl]"
+#define AIC_MODULE_NAME "[aic]"

 int read_wpa_param_config(char *module_name, char *file_path) {
        char *wpa_param[50] = {0};
@@ -492,6 +493,9 @@ int main(int argc, char *argv[])
                } else if (0 == strncmp(wifi_type, "SPRDWL", 6)) {
                        wpa_printf(MSG_INFO,"Start sprdwl_wpa_supplicant\n");
                        ret = read_wpa_param_config(SPRDWL_MODULE_NAME,argv[1]);
+               } else if (0 == strncmp(wifi_type, "AIC", 3)) {
+                       wpa_printf(MSG_INFO,"Start aic_wpa_supplicant\n");
+                       ret = read_wpa_param_config(AIC_MODULE_NAME,argv[1]);
                } else {
                        wpa_printf(MSG_INFO,"Start wpa_supplicant\n");
                        sprintf(module_type,"[%s]",wifi_type);

WiFi芯片类型前缀为AIC时,加载对应的aic的wpa_supplicant参数

6.frameworks部分

复制代码
diff --git a/frameworks/opt/net/wifi/libwifi_hal/rk_wifi_ctrl.cpp b/frameworks/opt/net/wifi/libwifi_hal/rk_wifi_ctrl.cpp
index 95e5ed0ab6..5e7c07aed7 100755
--- a/frameworks/opt/net/wifi/libwifi_hal/rk_wifi_ctrl.cpp
+++ b/frameworks/opt/net/wifi/libwifi_hal/rk_wifi_ctrl.cpp
@@ -73,6 +73,7 @@ static wifi_device supported_wifi_devices[] = {
        {"RTL8822BE",   "10ec:b822"},
        {"MVL88W8977",  "02df:9145"},
        {"SPRDWL",      "0000:0000"},
+       {"AIC8800",     "c8a1:0082"},
 };
 int get_wifi_device_id(const char *bus_dir, const char *prefix)
diff --git a/frameworks/opt/net/wifi/libwifi_hal/wifi_hal_common.cpp b/frameworks/opt/net/wifi/libwifi_hal/wifi_hal_common.cpp
index 4b6c6ec215..2703e7bbc3 100755
--- a/frameworks/opt/net/wifi/libwifi_hal/wifi_hal_common.cpp
+++ b/frameworks/opt/net/wifi/libwifi_hal/wifi_hal_common.cpp
@@ -55,6 +55,7 @@ extern "C" int delete_module(const char *, unsigned int);
 #define MLAN_DRIVER_MODULE_PATH         WIFI_MODULE_PATH"mlan.ko"
 #define MVL_DRIVER_MODULE_PATH          WIFI_MODULE_PATH"sd8xxx.ko"
 #define RK912_DRIVER_MODULE_PATH         WIFI_MODULE_PATH"rk912.ko"
+#define AIC8800_DRIVER_MODULE_PATH       WIFI_MODULE_PATH"aic8800_fdrv.ko"
 #define SPRDWL_DRIVER_MODULE_PATH       WIFI_MODULE_PATH"sprdwl_ng.ko"
 #define DRIVER_MODULE_PATH_UNKNOW       ""

@@ -80,6 +81,7 @@ extern "C" int delete_module(const char *, unsigned int);
 #define BCM_DRIVER_MODULE_NAME          "bcmdhd"
 #define MVL_DRIVER_MODULE_NAME          "sd8xxx"
 #define RK912_DRIVER_MODULE_NAME         "rk912"
+#define AIC8800_DRIVER_MODULE_NAME       "aic8800_fdrv"
 #define SPRDWL_DRIVER_MODULE_NAME       "sprdwl"
 #define DRIVER_MODULE_NAME_UNKNOW       ""

@@ -164,6 +166,7 @@ wifi_ko_file_name module_list[] =
        {"MVL88W8977",      MVL_DRIVER_MODULE_NAME,       MVL_DRIVER_MODULE_PATH, MVL88W8977_DRIVER_MODULE_ARG},
         {"RK912",         RK912_DRIVER_MODULE_NAME,     RK912_DRIVER_MODULE_PATH, UNKKOWN_DRIVER_MODULE_ARG},
        {"SPRDWL",          SPRDWL_DRIVER_MODULE_NAME, SPRDWL_DRIVER_MODULE_PATH, UNKKOWN_DRIVER_MODULE_ARG},
+       {"AIC8800",         AIC8800_DRIVER_MODULE_NAME,   AIC8800_DRIVER_MODULE_PATH, UNKKOWN_DRIVER_MODULE_ARG},
        {"UNKNOW",       DRIVER_MODULE_NAME_UNKNOW,    DRIVER_MODULE_PATH_UNKNOW, UNKKOWN_DRIVER_MODULE_ARG}

 };

注意:{"AIC8800", "c8a1:0082"},一定要小写的 c8a1;

6.1 supported_wifi_devices 结构体数组中添加WiFi名称以及对应的vid:pid

6.2 check_wifi_chip_type_string(wifi_type)函数,尝试获取wifi芯片类型wifi_type

7.hardware部分

复制代码
diff --git a/hardware/broadcom/wlan/bcmdhd/wifi_hal/common.h b/hardware/broadcom/wlan/bcmdhd/wifi_hal/common.h
index c29806a196..45f00cd6c3 100644
--- a/hardware/broadcom/wlan/bcmdhd/wifi_hal/common.h
+++ b/hardware/broadcom/wlan/bcmdhd/wifi_hal/common.h
@@ -242,6 +242,7 @@ enum {
        BROADCOM_WIFI,
        SSV_WIFI,
        RK912_WIFI,
+       AIC_WIFI,
 };

 wifi_error wifi_register_handler(wifi_handle handle, int cmd, nl_recvmsg_msg_cb_t func, void *arg);
diff --git a/hardware/interfaces/bluetooth/1.0/default/vendor_interface.cc b/hardware/interfaces/bluetooth/1.0/default/vendor_interface.cc
index 268d62f9e3..a7e27a4bdb 100644
--- a/hardware/interfaces/bluetooth/1.0/default/vendor_interface.cc
+++ b/hardware/interfaces/bluetooth/1.0/default/vendor_interface.cc
@@ -29,6 +29,7 @@

 static const char* VENDOR_LIBRARY_NAME = "libbt-vendor.so";
 static const char* VENDOR_REALTEK_LIBRARY_NAME = "libbt-vendor-realtek.so";
+static const char* VENDOR_AIC_LIBRARY_NAME = "libbt-vendor-aic.so";
 static const char* VENDOR_LIBRARY_SYMBOL_NAME =
     "BLUETOOTH_VENDOR_LIB_INTERFACE";

@@ -197,7 +198,11 @@ bool VendorInterface::Open(InitializeCompleteCallback initialize_complete_cb,
   // Initialize vendor interface
   if (wifi_type[0] == 0)
          check_wifi_chip_type_string(wifi_type);
-  if ((0 == strncmp(wifi_type, "RTL", 3)) ||
+
+    if ((0 == strncmp(wifi_type, "AIC", 3))) {
+    ALOGE("%s try to open %s \n", __func__, VENDOR_AIC_LIBRARY_NAME);
+    strcpy(vendor_lib_name, VENDOR_AIC_LIBRARY_NAME);
+  } else if ((0 == strncmp(wifi_type, "RTL", 3)) ||
       (0 == strncmp(wifi_type, "SSV", 3))) { // for ssv6051 wifi + rtl8761 bt
     strcpy(vendor_lib_name, VENDOR_REALTEK_LIBRARY_NAME);
   } else {
diff --git a/hardware/interfaces/wifi/1.4/default/wifi_chip.cpp b/hardware/interfaces/wifi/1.4/default/wifi_chip.cpp
index 44cc907608..43696defb8 100755
--- a/hardware/interfaces/wifi/1.4/default/wifi_chip.cpp
+++ b/hardware/interfaces/wifi/1.4/default/wifi_chip.cpp
@@ -119,7 +119,7 @@ std::string getP2pIfaceName() {
            if (wifi_type[0] == 0) {
            check_wifi_chip_type_string(wifi_type);
     }
-    if (0 == strncmp(wifi_type, "AP", 2)) {
+    if (0 == strncmp(wifi_type, "AP", 2)|| 0 == strncmp(wifi_type, "AIC", 3)) {
                property_set("vendor.wifi.direct.interface", "p2p-dev-wlan0");
                property_get("wifi.direct.interface", buffer.data(), "p2p-dev-wlan0");
     } else {

7.1 BOARD_HAVE_BLUETOOTH_AIC := true

8.handware添加驱动

aic8800d_linux_sdk_V4.0_2025_0808_54809c22\SDIO\driver_fw\aic

注意:一定要把所有的/dev/ttyS8改对

然后可以看到对应的库.so(libbt-vendor-aic.so)

9.忽略部分

复制代码
//vendor\rockchip\common\wifi\wifi.mk
AIC_WIFI_KO_FILES := $(shell find $(TOPDIR)kernel/drivers/net/wireless/aic8800 -name "*.ko" -type f)
BOARD_VENDOR_KERNEL_MODULES += \
$(foreach file, $(AIC_WIFI_KO_FILES), $(file))

代码作用,将aic8800*.ko复制到对应的vendor/lib/modules路径下面;然后我将驱动从

建议:\kernel\drivers\net\wireless\aic8800

实际:\kernel\drivers\net\wireless\rockchip_wlan\aic8800

10.把固件预支进系统

11.调试遇到问题

aic8800_bsp.ko加载不上

关闭obj-$(CONFIG_BCMDHD) += rkwifi/

复制代码
//kernel\drivers\net\wireless\rockchip_wlan\Makefile
- obj-$(CONFIG_BCMDHD)	+= rkwifi/
+#obj-$(CONFIG_BCMDHD)	+= rkwifi/

11.2 蓝牙打不开

显示使用的是ttyS1;

因为硬件是使用ttyS8;

把所有ttyS改成ttyS8

12.总结:

12.1:要有驱动文件(wifi的aic8800_bsp.ko 和蓝牙的 aic8800_fdrv.ko)

12.2:要有蓝牙的so库(libbt-vendor-aic.so

12.3:要有资源文件

12.4:然后就可以上网了

补充:

复制代码
diff --git a/device/rockchip/rk356x/init.rk356x.rc b/device/rockchip/rk356x/init.rk356x.rc
index 691280863b..ecc11e9fe4 100755
--- a/device/rockchip/rk356x/init.rk356x.rc
+++ b/device/rockchip/rk356x/init.rk356x.rc
@@ -40,6 +40,7 @@ on init
     write /proc/sys/net/core/rps_sock_flow_entries 32768
     #write /proc/sys/net/core/rmem_max 12582912
     #write /proc/sys/net/core/rmem_default 12582912
+    insmod /vendor/lib/modules/aic8800_bsp.ko


 on property:cts_gts.status=true
@@ -57,7 +58,6 @@ service vendor.ril-daemon /vendor/bin/hw/rild -l /vendor/lib64/libquectel-ril.so
 # rpdzkj preinstall
 on property:sys.boot_completed=1
        chmod 755 /vendor/bin/preinstall.sh
-       insmod /vendor/lib/modules/aic8800_bsp.ko

--- a/kernel/arch/arm64/boot/dts/rockchip/pro-rk3568.dts
+++ b/kernel/arch/arm64/boot/dts/rockchip/pro-rk3568.dts
@@ -41,7 +41,7 @@

 /*************************SATA***********************/
 //#include "rp-wifi-bt-ap6xxx-rk3568.dtsi"
-#include "wz-wifi-bt-aic8800-rk3568.dtsi.dtsi"
+#include "wz-wifi-bt-aic8800-rk3568.dtsi"
--- a/kernel/drivers/net/wireless/rockchip_wlan/Makefile
+++ b/kernel/drivers/net/wireless/rockchip_wlan/Makefile
@@ -1,5 +1,5 @@
 # SPDX-License-Identifier: GPL-2.0
-obj-$(CONFIG_BCMDHD)   += rkwifi/
+# obj-$(CONFIG_BCMDHD) += rkwifi/

优化了一些问题,头文件多了。dtbi;

关闭rkwifi;

优化开机顺序,这样开机自启就有了。

相关推荐
ShiMetaPi10 天前
操作【GM3568JHF】FPGA+ARM异构开发板 使用指南:串口
arm开发·单片机·嵌入式硬件·fpga开发·rk3568
闻道且行之12 天前
KickPi RK3568平台SPI内核驱动开发
驱动开发·rk3568·kernel·spi·kickpi
mucheni17 天前
迅为RK3568开发板OpenHarmony系统南向驱动开发手册-UART应用开发编译源码
rk3568
Ching·20 天前
linux系统编程(十③)RK3568 socket之 TCP 服务器的实现【更新客户端断开重连依旧可以收发】
linux·服务器·tcp/ip·rk3568
Ching·20 天前
linux系统编程(十)RK3568 socket之 UDP的实现
linux系统编程·rk3568·嵌入式开发
Ching·20 天前
linux系统编程(十②)RK3568 socket之 TCP 客户端的实现
linux·tcp/ip·rk3568
ShiMetaPi24 天前
操作【GM3568JHF】FPGA+ARM异构开发板 使用指南:音频接口
arm开发·嵌入式硬件·fpga开发·rk3568
Ching·1 个月前
RK3568入门之VScode远程连接开发板,直接开发板上面编程和实验
linux·ide·vscode·编辑器·rk3568
Industio_触觉智能1 个月前
瑞芯微RK35XX系列FFmpeg硬件编解码实测,详细性能对比!
ffmpeg·rk3588·rk3568·编解码·rk3562·rk3576