BT BlueZ软硬件环境介绍
本文是“Bluetooth Bring-up 系列”的入门篇,主要介绍在 Linux 平台下,如何理解和构建完整的 BlueZ 软硬件运行环境。本文既面向做底层驱动移植的工程师,也适用于调试 i.MX8、RK3588、QCS6490 等平台的嵌入式开发者。
一、什么是 BlueZ?
- 支持 Bluetooth Classic(BR/EDR)与 BLE(Bluetooth Low Energy);
- 与 Linux 内核驱动(btusb、hci_uart、btqca 等)紧密耦合;
- 用户态服务进程为 bluetoothd;
- 通过 bluetoothctl、btmgmt 等工具进行管理。
BlueZ 对应 Android 的 Bluetooth Stack(Fluoride),但在纯 Linux 系统中,它承担了全部蓝牙控制与通信功能。
二、硬件环境概述
2.1 常见蓝牙模块接口类型
接口类型 | 特点 | 示例模块 |
---|---|---|
UART (HCI H4) | 最常见,易调试;通过 BT_EN、HOST_WAKE、WAKE 等信号控制 | QCA2066、QCC512x、BCM4345 |
USB (HCI USB) | 插拔式模块,驱动为 btusb | QCA9377、RTL8761B |
PCIe (HCI PCI) | 新一代高速接口,用于 Wi-Fi/BT Combo | QCNFA765、WCN7851 |
SDIO/SPI | 较少用于蓝牙控制,更多是 Wi-Fi | —— |
2.2 控制信号定义(以 UART 模块为例)
信号名称 | 方向 | 功能说明 |
---|---|---|
BT_EN | 主控 → 模块 | 蓝牙上电使能信号 |
BT_WAKE | 主控 → 模块 | 唤醒蓝牙控制器 |
BT_HOST_WAKE | 模块 → 主控 | 蓝牙唤醒主控信号 |
UART_TX/RX/CTS/RTS | 双向 | 数据与流控接口 |
建议在 bring-up 初期通过 GPIO 工具确认信号翻转逻辑,避免上电死机或 HCI 初始化失败。
2.3 硬件环境介绍
我们当前使用的开发板环境如下图所示,也是我们后续所有示例的主要参考办。
相关开发板的购买链接:https://www.nxp.com/design/design-center/development-boards-and-designs/8MPLUSLPD4-EVK
三、固件与驱动加载流程
3.1 Kernel 驱动层结构
Linux 内核蓝牙驱动通常包括以下模块:
模块名 | 功能 | 说明 |
---|---|---|
hci_uart | 通用 UART HCI 驱动 | 与 btattach 配合 |
btusb | USB 接口驱动 | 自动识别蓝牙 USB 设备 |
btqca | Qualcomm 平台辅助模块 | 管理 QCA 固件加载、校准 |
btrtl | Realtek 平台固件驱动 | 提供下载补丁与 |
3.2 蓝牙固件加载示例(以 QCC2076 为例)
下载Yocto代码
git clone git@github.com:Qingzong-MA/imx-yocto-bsp.git -b L6.6.52
编译代码
DISTRO=fsl-imx-xwayland MACHINE=imx8mpevk source imx-setup-release.sh -b build
bitbake imx-image-full
烧录固件(这里不做详细讲解)
进行 i.MX8MP 启动 UART HCI 接口
hciattach /dev/ttymxc0 qca 3000000 -t120 flow
启动 BlueZ 服务
systemctl start bluetooth
查看 hci 设备是否上线
hciconfig -a
如果加载成功,会看到:
hci0: Type: Primary Bus: UART
BD Address: 00:00:00:00:5A:AD ACL MTU: 1024:7 SCO MTU: 240:4
UP RUNNING PSCAN
四、BlueZ 软件栈结构
4.1 整体架构图
4.2 BlueZ 常用工具
工具名 | 主要功能 | 示例命令 |
---|---|---|
hciconfig | 显示蓝牙设备状态 | hciconfig -a |
hcitool | 扫描、连接、读写特征值 | hcitool scan |
bluetoothctl | CLI 交互式蓝牙管理 | scan on, pair, connect |
btmgmt | 低层蓝牙管理工具 | btmgmt info |
五、Bring-up 环境配置流程
5.1 核心流程
- 加载驱动:确认 btusb / hci_uart / btqca 模块已插入
- 加载固件:在 /lib/firmware/qca/ 下放置对应 .bin 文件 (当前代码已经包含了相关固件)
- 启动 BlueZ 服务:systemctl start bluetooth
- 确认 HCI 设备:hciconfig -a
- 扫描设备:
bluetoothctl[bluetooth]# scan on
5.2 典型验证项
- 是否能扫描到手机/耳机;
- 是否能配对、连接;
- A2DP 播放音频是否正常;
- BLE 广播是否正确。