Arch Linux RTL8852BD 蓝牙驱动问题排查与修复记录


  • 在 Arch Linux 环境中使用笔记本内置 Realtek RTL8852BD 无线网卡时,发现WiFi 功能正常,但是蓝牙适配器无法正常使用。

Arch Linux 下 RTL8852BD 蓝牙驱动问题排查与修复记录

1. 问题背景

在 Arch Linux 环境中使用笔记本内置 Realtek RTL8852BD 无线网卡时,发现
WiFi 功能正常,但是蓝牙适配器无法正常使用。

现象主要表现为:

  • 系统设置中没有蓝牙设备;
  • bluetoothctl list 无任何输出;
  • btmgmt info 无法获取控制器信息;
  • 内核日志中可以看到 Realtek 蓝牙设备被识别,但是没有成功生成可用的
    HCI 控制器。

初步判断:

硬件本身没有损坏,因为 Windows 下蓝牙正常工作,同时 Linux 内核能够识别
USB 蓝牙设备,因此问题集中在:

  • Realtek 蓝牙固件;
  • Linux 蓝牙驱动初始化流程;
  • 固件版本与芯片型号匹配关系。

2. 初步排查过程

首先确认系统环境:

1
2
3
uname -r

pacman -Q linux linux-headers linux-lts linux-lts-headers

确认当前使用的内核以及是否存在多个内核版本。

随后检查蓝牙相关日志:

1
sudo journalctl -k -b | grep -Ei "RTL|8852|firmware|Bluetooth"

日志显示:

Bluetooth: hci0: RTL: examining hci_ver=0b hci_rev=000b lmp_ver=0b lmp_subver=8852
Bluetooth: hci0: RTL: loading rtl_bt/rtl8852bu_fw.bin
Bluetooth: hci0: RTL: loading rtl_bt/rtl8852bu_config.bin

说明:

  • USB 设备已经识别;
  • btusb 驱动已经加载;
  • Realtek 固件加载流程已经启动。

但是后续出现:

Opcode 0xfcf0 failed: -16

导致 HCI 初始化没有完全完成。


3. 初步尝试解决

在定位过程中尝试了一些临时恢复方法。

3.1 重新绑定 btusb 驱动

尝试解除并重新绑定 USB 蓝牙接口:

1
2
3
4
5
6
7
sudo sh -c 'echo 1-5:1.0 > /sys/bus/usb/drivers/btusb/unbind'

sudo sh -c 'echo 1-5:1.1 > /sys/bus/usb/drivers/btusb/unbind'

sudo sh -c 'echo 1-5:1.0 > /sys/bus/usb/drivers/btusb/bind'

sudo sh -c 'echo 1-5:1.1 > /sys/bus/usb/drivers/btusb/bind'

结果:

驱动重新探测成功,可以看到:

Bluetooth: hci0: RTL: loading rtl_bt/rtl8852bu_fw.bin

但是:

bluetoothctl show

仍然无法获取默认控制器。

说明:

问题不是简单的驱动未加载,而是在固件初始化阶段失败。


3.2 重启 bluetooth 服务

尝试:

1
sudo systemctl restart bluetooth

结果没有改变。

原因:

bluetooth.service 只是用户空间蓝牙协议栈,它依赖内核已经创建完成的 HCI
设备。

当前问题发生在:

USB设备
 ↓
btusb
 ↓
Realtek固件初始化
 ↓
HCI注册

因此重启服务无法解决。


3.3 USB 重置与重新加载模块

尝试:

1
2
3
sudo modprobe -r btusb

sudo modprobe btusb reset=1

以及 USB reset:

1
2
3
echo 0 | sudo tee /sys/bus/usb/devices/1-5/authorized

echo 1 | sudo tee /sys/bus/usb/devices/1-5/authorized

结果:

仍然失败。

进一步确认:

问题不是 USB 枚举异常,而是 Realtek 初始化流程问题。


4. 关键定位

通过查看 Windows 分区中的驱动文件,发现 Windows 使用:

rtkbtfilter.inf
rtl8852bd_mp_chip_new.dat

其中:

rtl8852bd_mp_chip_new.dat

是 Realtek 提供给 Windows 驱动使用的芯片配置文件。

Linux 默认使用:

rtl_bt/rtl8852bu_fw.bin
rtl_bt/rtl8852bu_config.bin

二者格式和初始化方式不同。

因此:

Windows 驱动可以正常运行,并不能说明 Linux 固件一定匹配。


5. 最终解决方案

最终采用 Realtek Windows 固件转换方案。

5.1 获取 Windows 固件文件

Windows 分区只读挂载:

1
sudo mount -o ro /dev/nvme0n1p3 /tmp/win_mount

找到:

Windows/System32/DriverStore/FileRepository/
rtkbtfilter.inf_xxxxx/
rtl8852bd_mp_chip_new.dat

复制出来:

1
cp rtl8852bd_mp_chip_new.dat ~/repo/AI/temp/

5.2 提取 Linux 可用固件

下载转换工具:

1
git clone https://github.com/mihaits/rtl8852bd-bt-linux.git

执行:

1
2
3
python extract-firmware.py \
~/repo/AI/temp/rtl8852bd_mp_chip_new.dat \
-o /tmp/rtl8852bd_eco4.bin

生成 Linux 蓝牙固件。


5.3 安装固件和驱动

执行:

1
sudo ./install.sh ~/repo/AI/temp/rtl8852bd_mp_chip_new.dat

安装脚本完成:

  • 固件转换;
  • 固件复制到 Linux firmware 目录;
  • 驱动环境配置。

重新检查:

1
bluetoothctl list

成功出现蓝牙控制器。


6. 原理分析

6.1 Linux 蓝牙驱动结构

RTL8852BD 蓝牙工作流程:

用户空间
 |
bluetoothctl
 |
bluez
 |
bluetoothd
 |
Kernel Bluetooth Stack
 |
btusb
 |
btrtl
 |
USB Bluetooth Controller
 |
RTL8852BD Firmware

其中:

  • bluez:Linux 蓝牙协议栈;
  • btusb:USB 蓝牙通用驱动;
  • btrtl:Realtek 芯片初始化支持;
  • firmware:芯片运行所需程序。

6.2 为什么加载固件还失败?

日志:

loading rtl_bt/rtl8852bu_fw.bin

只能说明:

固件文件成功读取。

但是后面的:

Opcode 0xfcf0 failed

说明:

芯片执行初始化命令失败。

也就是说:

文件存在
    ≠
固件兼容

Realtek 不同芯片:

  • RTL8852B
  • RTL8852BE
  • RTL8852BD
  • RTL8852BU

虽然名称接近,但是内部固件版本、配置表可能不同。


7. 后续维护与 DKMS 关系

此次安装如果涉及 DKMS:

查看:

1
dkms status

内核升级时:

pacman -Syu
        |
        v
kernel更新
        |
        v
DKMS hook触发
        |
        v
重新编译模块
        |
        v
安装到新kernel目录

因此正常情况下:

  • 更新系统不会影响驱动;
  • 新内核安装后 DKMS 会自动重新构建;
  • 重启后蓝牙应该自动出现。

如果只是 firmware 文件:

由于 firmware 位于:

/usr/lib/firmware

不会因为内核升级消失。


8. 总结

此次问题最终定位为:

RTL8852BD 蓝牙芯片在 Linux 下默认 firmware
与实际硬件版本不完全匹配,导致 btusb 驱动能够加载设备,但是 HCI
初始化失败。

解决路线:

  1. 确认 USB 设备正常;
  2. 分析 kernel log;
  3. 排除 bluetooth.service 和 USB 枚举问题;
  4. 从 Windows 驱动中获取 Realtek 原始 .dat 固件;
  5. 使用转换工具生成 Linux firmware;
  6. 使用安装脚本部署;
  7. 重启后蓝牙恢复。

这次排查也进一步理解了 Linux 蓝牙驱动链路:

硬件
 ↓
USB枚举
 ↓
btusb
 ↓
Realtek btrtl
 ↓
Firmware
 ↓
HCI Controller
 ↓
BlueZ
 ↓
应用程序

任何一层异常,都可能表现为”没有蓝牙适配器”。

Arch Linux RTL8852BD 蓝牙驱动问题排查与修复记录

https://goko-son626.github.io/post/rtl8852bd-bluetooth-fix.html

作者

GoKo Mell

发布于

2026-07-22

更新于

2026-07-23

许可协议

评论

:D 一言句子获取中...