保姆级教程:为老旧全志A33开发板(Android 6.0)添加RTL8723BU蓝牙支持,从内核到HAL全流程
2026/5/4 9:59:58 网站建设 项目流程

全志A33开发板蓝牙功能扩展实战:RTL8723BU从驱动移植到系统集成的完整指南

老旧硬件焕发新生总是令人兴奋的——特别是当你手头那块积灰的全志A33开发板突然获得蓝牙连接能力时。本文将带你深入Android 6.0系统底层,从内核驱动编译到HAL层适配,逐步实现RTL8723BU USB蓝牙模块的完整支持。不同于简单的步骤罗列,我们会剖析每个修改背后的设计逻辑,确保你不仅知道怎么做,更明白为什么这样做。

1. 开发环境准备与驱动源码处理

在开始前,请确认已搭建好全志A33的标准编译环境,包括:

  • 官方推荐的Ubuntu 14.04 LTS系统
  • 已同步完整的Android 6.0源码树
  • 安装必要的交叉编译工具链

关键步骤解析

  1. 获取Realtek官方提供的驱动包20150528_RTL8723BU_BT_android5.0_V3.0_P11_FW_svn14422-BTCOEX20150119-5844.zip,解压后重点关注两个核心文件:

    rtk_btusb.h # 驱动头文件 rtk_btusb.c # 主驱动实现
  2. 将驱动文件放置到内核源码的正确位置:

    cp rtk_btusb.[ch] kernel/drivers/bluetooth/
  3. 修改Kconfig和Makefile以启用驱动编译选项:

    # drivers/bluetooth/Kconfig 新增 config BT_RTKBTUSB tristate "RTK HCI USB driver" depends on USB help RTK Bluetooth HCI USB driver # drivers/bluetooth/Makefile 新增 obj-$(CONFIG_BT_RTKBTUSB) += rtk_btusb.o

提示:全志A33默认使用Linux 3.4内核,需特别注意驱动兼容性。若遇到编译错误,可能需要根据内核版本调整驱动代码中的API调用。

2. 内核配置与模块编译

正确的内核配置是驱动正常工作的基础。除了启用RTL8723BU驱动外,还需确保相关子系统支持:

# .config 关键配置项 CONFIG_BT_RTKBTUSB=m # 模块方式编译 CONFIG_UHID=y # HID协议支持 CONFIG_TUN=y # PAN网络支持 CONFIG_INPUT_UINPUT=y # 用户输入设备模拟

编译内核模块的典型命令序列:

./build.sh kernel # 全志专用编译脚本 make -C linux-3.4 M=drivers/bluetooth modules # 单独编译蓝牙驱动

验证生成的驱动模块:

ls -l out/sun8iw5p1/android/common/lib/modules/3.4.39/rtk_btusb.ko

常见问题排查

  • 若模块加载失败,使用dmesg | grep bluetooth查看内核日志
  • 确保USB控制器驱动已正确加载(lsmod | grep dwc2

3. Android系统层适配

3.1 设备树配置

修改device/softwinner/astar-d7/BoardConfig.mk启用蓝牙支持:

BOARD_HAVE_BLUETOOTH := true BOARD_HAVE_BLUETOOTH_RTK := true BLUETOOTH_HCI_USE_RTK_H5 := true BOARD_BLUETOOTH_BDROID_BUILDCFG_INCLUDE_DIR := device/softwinner/astar-d7/bluetooth

3.2 初始化脚本调整

init.sun8i.rc中添加驱动加载和权限设置:

on early-fs insmod /system/vendor/modules/rtk_btusb.ko on boot chmod 0660 /dev/rtk_btusb chown bluetooth net_bt_stack /dev/rtk_btusb

3.3 SELinux策略配置

确保设备节点访问权限正确:

# ueventd.sun8i.rc /dev/rtk_btusb 0660 bluetooth net_bt_stack # file_contexts /dev/rtk_btusb u:object_r:hci_attach_dev:s0

4. HAL层实现与固件集成

4.1 蓝牙协议栈配置

创建bt_vendor.conf配置文件:

# device/softwinner/astar-d7/bluetooth/bt_vendor.conf UartPort = /dev/rtk_btusb FwPatchFilePath = /system/vendor/modules/ FwPatchFileName = rtlbt_fw

4.2 自定义HAL实现

关键步骤:

  1. hardware/realtek/bluetooth/libbt-vendor/下新建usb目录结构
  2. 实现专用的USB版libbt-vendor:
# usb/Android.mk LOCAL_SRC_FILES := \ src/bt_vendor_rtk.c \ src/upio.c LOCAL_MODULE := libbt-vendor_usb

关键代码修改点

// usb/include/vnd_buildcfg.h #define BLUETOOTH_UART_DEVICE_PORT "/dev/rtk_btusb"

4.3 固件集成

astar_d7.mk中添加蓝牙固件支持:

$(call inherit-product, hardware/realtek/bt/firmware/rtl8723b/device-rtl.mk) PRODUCT_COPY_FILES += \ frameworks/native/data/etc/android.hardware.bluetooth.xml:system/etc/permissions/android.hardware.bluetooth.xml

5. 系统集成与功能验证

完整编译流程:

mmm hardware/realtek/bluetooth/libbt-vendor/ make -j8

验证步骤清单

  1. 驱动加载检查:

    lsmod | grep rtk_btusb ls /dev/rtk_btusb
  2. HAL库生成验证:

    ls /system/lib/libbt-vendor_usb.so
  3. 蓝牙服务状态:

    logcat | grep Bluetooth getprop | grep bluetooth
  4. 实际功能测试:

    • 扫描周围设备
    • 文件传输测试
    • 音频设备连接

当你在开发者选项里看到"蓝牙HCI snoop日志"选项,在设置菜单中能正常开启蓝牙并搜索到周边设备时,这场硬件升级之旅就圆满成功了。记得最后用hciconfig -a命令检查设备信息,确认固件版本和连接状态符合预期。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询