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 setCONFIG_ENABLE_DEFAULT_TRACERS=yCONFIG_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=mCONFIG_MOTORCOMM_PHY=yCONFIG_CANFD_ROCKCHIP2=yCONFIG_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 @@ endifsource "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.oobj-$(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.mkendif+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.mkPRODUCT_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.koinsmod /vendor/lib/modules/rk30_mirroring.koinsmod /vendor/lib/modules/rk29-ipp.koinsmod /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 @@ endifendifBOARD_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 preinstallon property:sys.boot_completed=1chmod 755 /vendor/bin/preinstall.sh
+ insmod /vendor/lib/modules/aic8800_bsp.kostart 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 interfaceif (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 btstrcpy(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:然后就可以上网了


