Linux 下 Realtek WiFi/BT 二合一模组详解

📡 Linux 下 Realtek WiFi/BT 二合一模组详解

  1. 模组架构特点
    Realtek 常见的二合一模组(如 RTL8821CS、RTL8852BE 等)通常集成:
  • WiFi:通过 SDIO 或 PCIe 总线连接,驱动加载后自动枚举。
  • 蓝牙:通过 UART 接口连接,需要额外初始化才能在系统中出现 hci0。

这种架构导致 WiFi 和蓝牙的初始化方式完全不同。


  1. WiFi 初始化流程
  • 接口:SDIO 总线(或 PCIe)。
  • 驱动:内核自动加载 cfg80211 + Realtek WiFi 驱动。
  • 固件:通常位于 /lib/firmware/rtlwifi/。
  • 特点:即插即用,驱动加载后即可枚举网卡设备(如 wlan0)。

👉 因此 WiFi 部分通常能自动工作,不需要额外操作。


  1. 蓝牙初始化流程(UART 接口)

3.1 硬件接口

  • 蓝牙部分通过 UART 暴露为 /dev/ttySx 或 /dev/ttyAMAx。
  • 需要绑定到 HCI 层才能生成 hci0。

3.2 驱动依赖

  • 内核必须启用:
    • CONFIGBTHCIUART → HCI UART 驱动
    • CONFIGBTHCIUART_H4/H5 → 协议支持
    • CONFIGBTHCIUART_RTL → Realtek 专用支持

3.3 固件加载

  • 固件位于 /lib/firmware/rtl_bt/,例如:
    • rtl8821cs_fw.bin
    • rtl8821cs_config.bin
  • 驱动会在初始化时自动下载固件到芯片。

3.4 hciattach 初始化

必须用 hciattach 将 UART 设备绑定到蓝牙协议栈:
bash sudo hciattach /dev/ttyS1 rtk_h5 115200

  • /dev/ttyS1 → 蓝牙 UART 节点
  • rtk_h5 → Realtek H5 协议
  • 115200 → 波特率(部分芯片用 1.5Mbps)

执行成功后,系统会生成 hci0。

3.5 启动 Bluetooth 服务

确认 systemd 服务:
bash sudo systemctl start bluetooth systemctl status bluetooth hciconfig -a

此时 hci0 应该可见。


  1. 常用工具与层次关系
    | 工具 | 层次/作用 | 示例命令 |
    |-----------------|----------------------------|----------|
    | rfkill | 射频开关控制 | rfkill unblock bluetooth |
    | systemctl | 管理 bluetoothd 服务 | systemctl start bluetooth |
    | hciattach | UART → HCI 绑定 | hciattach /dev/ttyS1 rtk_h5 115200 |
    | hciconfig | 查看适配器状态 | hciconfig -a |
    | bluetoothctl | 扫描/配对/连接设备 | bluetoothctl → scan on |

  1. 自动化方案
    手动运行 hciattach 不方便,可以通过:
  • systemd 服务:编写 /etc/systemd/system/hciattach.service,在开机时自动运行。
  • udev 规则:检测到 UART 设备后自动执行初始化。

示例 systemd 单元:

`ini

Unit

Description=Attach Realtek Bluetooth HCI UART

After=dev-ttyS1.device

Service

ExecStart=/usr/bin/hciattach /dev/ttyS1 rtk_h5 115200

Restart=always

Install

WantedBy=multi-user.target

`


  1. 常见问题与排查
  • 看不到 hci0 → 没有执行 hciattach 或固件缺失。
  • rfkill 阻塞 → 用 rfkill list 检查并解锁。
  • 波特率错误 → 不同芯片需要不同波特率。
  • 固件缺失 → 确认 /lib/firmware/rtl_bt/ 下有对应文件。
  • 日志检查:
    bash dmesg | grep -i rtl dmesg | grep -i hci

✅ 总结

  • WiFi(SDIO) → 自动枚举,驱动加载即可使用。
  • 蓝牙(UART) → 需要 hciattach 绑定、固件下载、启动 bluetoothd 才能生成 hci0。
  • 调试流程:确认 UART → 加载驱动 → hciattach → 固件 → systemd 服务 → bluetoothctl。
  • 自动化:推荐用 systemd/udev 脚本开机自动初始化。
相关推荐
小鱼仙官9 分钟前
Ubuntu C++ NTP校时程序
linux·c++·ubuntu
RisunJan9 分钟前
Linux命令-vgdisplay(显示卷组详细属性)
linux·运维·数据库
深念Y34 分钟前
RIO-UL00(EMUI 4.1 / Android 6.0.1 / arm64)开机自启动 sshd
android·linux·华为·安卓·chroot·sshd·emui
Escalating_xu38 分钟前
【Linux线程】线程控制全解析:终止、join/detach、cancel、线程栈与 NPTL(下篇)
java·linux·运维
老当益壮梁奶奶1 小时前
Linux软件编程学习笔记(二)Linux文件IO编程入门:从fopen到fgetc
linux·c语言·c++·笔记·学习
sunoo-2291 小时前
C 语言文件 IO 全攻略:从基础函数到实战踩坑(BMP 读取 + 词典查询)
linux·c语言·前端·笔记·vscode·学习
草莓熊Lotso1 小时前
【Linux网络加餐】手动部署:SSH 与 Web 服务实战 + 底层原理全解析
linux·运维·网络·人工智能·python·langchain·ssh
CHHH_HHH1 小时前
【Linux系统篇】深入解析Linux文件系统:从磁盘寻址到软硬链接
linux·服务器·开发语言·后端·ubuntu
XiaQ09192 小时前
Linux 常用命令学习笔记(用户管理篇):用户、组与权限的钥匙
linux·开发语言·笔记·学习
刚入门的大一新生2 小时前
Linux-Linux的进程状态
linux·运维·服务器