参考博客: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;
优化开机顺序,这样开机自启就有了。