从零到一:在RK3588 Android12上实战RTL8723DU WiFi蓝牙双模驱动移植

张开发
2026/4/10 11:03:33 15 分钟阅读

分享文章

从零到一:在RK3588 Android12上实战RTL8723DU WiFi蓝牙双模驱动移植
1. 开篇为什么需要RTL8723DU驱动移植最近在折腾RK3588开发板时发现原厂Android12系统居然不支持RTL8723DU这个WiFi蓝牙双模模块。这就像买了辆跑车却发现油箱盖打不开——硬件明明在那里就是用不了。不过别担心经过两周的实战我总结出一套完整的移植方案现在手把手教你从零开始搞定这个驱动适配。RTL8723DU这个芯片挺有意思它同时集成了802.11n WiFi和蓝牙4.2功能通过USB2.0接口与主控通信。相比常见的SDIO接口方案USB接口的驱动适配要特别注意供电管理和枚举过程。我在移植过程中踩过不少坑比如系统启动时模块未初始化、蓝牙设备无法被识别等问题后面都会详细说明解决方案。2. 准备工作搭建开发环境2.1 硬件清单检查首先确认你的装备齐全RK3588开发板我用的Rock 5BRTL8723DU模块注意确认是USB接口版本串口调试工具推荐CP21025V/3A电源WiFi工作时电流较大特别提醒连接模块时一定要检查USB接口的DP/DM线序我有次接反导致模块发烫差点烧毁芯片。建议用万用表测量VBUS电压是否稳定在5V±5%。2.2 软件环境配置Android12源码编译环境需要至少16GB内存和200GB磁盘空间。我推荐使用Ubuntu 20.04 LTS具体配置步骤如下# 安装基础工具链 sudo apt update sudo apt install -y git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip # 配置repo工具 mkdir ~/bin curl https://storage.googleapis.com/git-repo-downloads/repo ~/bin/repo chmod ax ~/bin/repo记得把Android源码的repo镜像源换成国内源否则下载会非常慢。我在~/.bashrc中添加了export REPO_URLhttps://mirrors.tuna.tsinghua.edu.cn/git/git-repo3. 驱动源码获取与修改3.1 获取官方驱动源码Realtek官方其实没有直接提供RTL8723DU的Android驱动但我们可以从8723DS的驱动修改而来。经过对比测试这两个型号的RF电路基本相同主要区别在接口协议层。我从Realtek官网下载了最新版的Linux驱动版本v5.12.0下载后解压得到以下关键目录rtl8723du/ ├── core/ ├── hal/ ├── include/ ├── os_dep/ └── platform/3.2 关键代码修改点USB接口适配由于RK3588的USB控制器采用DWC3架构需要在os_dep/linux/usb_intf.c中添加以下设备ID{USB_DEVICE(0x0BDA, 0xD723)}, /* RTL8723DU VID/PID */电源管理优化在hal/hal_intf.c中修改唤醒延迟参数解决Android深度休眠后WiFi断连的问题rtw_set_ps_mode(padapter, PS_MODE_ACTIVE, 0, 0, WOWLAN); rtw_btcoex_IpsNotify(padapter, IPS_NONE);蓝牙共存配置在hal/btc/halbtc8723d.c中调整WiFi/BT的时分复用参数pBtCoexist-btInfo.bBtCtrlAggBufSize FALSE; pBtCoexist-btInfo.bRejectAggPkt TRUE;4. 系统级集成与编译4.1 内核配置调整首先确保内核配置支持USB网卡和蓝牙设备make ARCHarm64 rockchip_defconfig然后修改.config文件添加以下配置项CONFIG_USB_NET_RTL8152y CONFIG_BT_HCIBTUSBy CONFIG_RTL8723DUm4.2 Android系统集成在device/rockchip/common/init.connectivity.rc中添加模块加载指令on boot insmod /vendor/lib/modules/rtl8723du.ko insmod /vendor/lib/modules/rtk_btusb.ko在BoardConfig.mk中启用WiFi特性BOARD_WLAN_DEVICE : rtl8723du WPA_SUPPLICANT_VERSION : VER_0_8_X4.3 编译与烧录技巧使用以下命令进行分步编译# 单独编译内核 ./build.sh -K # 编译驱动模块 make -C kernel/ Mdrivers/net/wireless/rtl8723du modules # 全系统编译 ./build.sh -AUCK烧录时建议先擦除flashrkdeveloptool db rk3588_spl_loader_v1.08.111.bin rkdeveloptool ul rk3588_spl_loader_v1.08.111.bin rkdeveloptool wl 0 out/u-boot.img5. 调试与性能优化5.1 常见问题排查WiFi频繁断连检查内核日志中的错误dmesg | grep wlan0如果看到RX descriptor error需要调整USB DMA缓冲区大小// 在drivers/net/wireless/rtl8723du/os_dep/linux/usb_intf.c中 rtw_usb_rx_init(dev, 10, 6); // 原参数是(dev, 6, 4)蓝牙无法被发现修改rtk_coex参数echo 1 /sys/kernel/debug/rtk_btusb/coex_enable5.2 性能调优参数通过iwpriv工具调整传输功率iwpriv wlan0 set_txpower 15 # 设置15dBm发射功率 iwpriv wlan0 set_channel 6 # 锁定6信道蓝牙吞吐量优化hciconfig hci0 up hcitool cmd 0x3f 0x1d 0x01 0x00 0x006. 实测效果与稳定性验证经过一周的压力测试在以下场景表现稳定2.4GHz WiFi连续传输72小时无断流蓝牙键盘耳机同时连接无卡顿系统休眠唤醒后自动重连成功率100%实测传输速率测试项数值WiFi TX吞吐量72MbpsWiFi RX吞吐量65Mbps蓝牙音频延迟28ms双模共存ping抖动5ms最后分享一个实用技巧在init.rc中添加以下脚本可以自动修复权限问题service fix_bt_permission /system/bin/sh /vendor/etc/fix_bt.sh class main user root oneshot整个移植过程中最耗时的其实是蓝牙HCI协议层的调试有时候一个参数不对就会导致设备枚举失败。建议大家在修改驱动时做好版本管理每个重要改动都打上tag方便回溯问题。

更多文章