当前位置: 首页 > news >正文

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:然后就可以上网了

http://www.dtcms.com/a/569341.html

相关文章:

  • 东城区网站排名seo网站 动态 静态
  • 网站就业技术培训机构seo需要掌握什么技能
  • CUDA C++编程指南(4)——硬件实现
  • Nacos集群部署实战:3节点+Nginx+MySQL高可用方案
  • 深入理解五种 IO 模型与非阻塞 IO:从原理到场景选型
  • 大专生升学与职业发展路径探析:从专升本到能力进阶
  • 12. PLC与继电器控制系统的区别
  • QT项目踩坑点!!!注意
  • ECCV 即插即用 | 频域全局视野 + 先验局部细节 = SOTA级图像修复!FADformer架构全解析
  • 做网站是用ps还是ai英文网站建设教程
  • 做网站怎么兼职上海企业网络营销推广多少钱
  • OpenCV 的 BackgroundSubtractorMOG2 原理
  • 【机器学习的4种学习范式】
  • 网站客户案例app开发用什么工具
  • 蓝牙钥匙 第39次 汽车售后服务中的权限管理:维修技师临时权限、服务模式与诊断数据访问控制
  • openEuler 22.03-Docker离线安装教程
  • 统一服务入口-Gateway
  • 济南做网站的公司哪家好网站建设工作半年通报
  • 为什么要GetWorld()?
  • HBase安装配置
  • 【开题答辩实录分享】以《基于Java的校园心理咨询服务系统的设计与实现》为例进行答辩实录分享
  • 佛山网站建设的品牌2345网址导航下载安装到桌面
  • 场外衍生品系统开发实战:TRS收益互换与场外个股期权架构解析
  • 网站需求分析模板浅谈电子商务网站建设与规划
  • Spring Boot整合MQTT
  • 《Nginx进阶实战:反向代理、负载均衡、缓存优化与Keepalived高可用》
  • 第6章 结构体与方法
  • 为什么 transformers 要 import TensorFlow
  • 网站建设要学哪些软件偃师网络营销的概念
  • 【AI学习-comfyUI学习-翻译文本工作流-各个部分学习-第二步】