You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于BlueZ的蓝牙Just Work模式配对失败:确认值错误

BlueZ Just Work模式配对失败:Confirm value failed (0x04) 排查方案

环境信息

  • 内核:板载Linux 4.9.84 armv7l
  • BlueZ版本:5.65
  • 配对设备:Android 12、iOS 16.6

操作配置

  1. 蓝牙参数配置(通过btmgmt):
    btmgmt power off
    btmgmt connectable on
    btmgmt pairable on
    btmgmt power on
    btmgmt le on
    btmgmt io-cap 0x3  # 设置IO能力为NoInputNoOutput
    btmgmt ssp on      # 启用Secure Simple Pairing
    
  2. L2CAP套接字与特征配置:
    • 将L2CAP套接字的BT_SECURITY设为low
    • 为BLE特征添加加密访问要求

问题现象

未通过bluetoothctl手动创建指定IO能力的Agent,当手机访问带加密要求的特征时,协议栈自动创建Agent处理配对。通过btmon日志可见,配对确认阶段板端返回错误:

Reason: Confirm value failed (0x04)
随后蓝牙连接被断开。同版本BlueZ在Ubuntu虚拟机环境下可正常完成配对。

排查与修复建议

结合环境对比结果,重点排查板载内核的蓝牙相关配置及驱动问题:

1. 内核SSP核心配置检查

Just Work模式属于Secure Simple Pairing(SSP)的子模式,必须确保内核开启以下配置:

  • CONFIG_BT_SSP:SSP核心支持,缺失会导致配对确认值计算逻辑异常
  • CONFIG_BT_LE:BLE功能支持,需与btmgmt le on配置匹配
  • CONFIG_BT_BREDR:若涉及经典蓝牙与BLE混合配对,需开启该选项

2. 蓝牙地址字节序验证

配对确认值的计算依赖蓝牙设备地址的字节序,部分ARM板卡的驱动可能存在地址字节序反转问题:

  • 通过hciconfig hci0查看板端蓝牙地址,对比控制器硬件规格书标注的实际地址字节序
  • 检查内核蓝牙驱动中对地址的解析、传递逻辑,确保与手机端使用一致的字节序参与计算

3. 加密算法支持检查

确认值计算依赖AES-CBC加密,需确保内核开启:

  • CONFIG_CRYPTO_AES:AES加密算法核心支持
  • CONFIG_CRYPTO_CBC:CBC模式支持,SSP配对流程需该模式完成加密运算

4. 蓝牙驱动兼容性排查

Linux 4.9的部分老旧蓝牙驱动(如hci_uart)存在SSP配对的兼容性bug:

  • 尝试更新板载蓝牙驱动至适配Linux 4.9的最新稳定版本
  • 对比Ubuntu虚拟机使用的蓝牙驱动版本,排查驱动实现差异

5. 手动Agent验证

跳过自动Agent创建逻辑,手动创建指定IO能力的Agent测试配对:

bluetoothctl
agent NoInputNoOutput
default-agent

若手动创建Agent后配对成功,说明自动Agent创建流程存在异常,需检查BlueZ在板端的编译配置(是否启用自动Agent相关模块)

内容的提问来源于stack exchange,提问作者ayezang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 13:02:25