
BT_HCI log获取/解析方法
背景
针对APP的蓝牙通信,客户要求对应出现的BUG,获取HCI log并进行分析
简介
蓝牙的 HCI Log(Host Controller Interface Log)是一个用来记录蓝牙通信过程中的底层信息和事件的日志文件。
它对开发者和调试人员来说非常重要,帮助他们了解蓝牙设备在通信过程中的内部状态和操作。
HCI概述
HCI(Host Controller Interface)(主机控制接口)是蓝牙协议的一种,
它是蓝牙协议栈与蓝牙芯片之间的协议。
虽然它与空中传输的封包不同,但无需昂贵的分析仪,也能进行一定程度的解析。
HCI是蓝牙协议栈中主机(Host)和控制器(Controller)之间的通信接口。它提供了主机与蓝牙硬件之间进行数据交换和控制的机制。具体来说,HCI分为两个部分:
HCI命令:主机通过这些命令向控制器发送请求,控制器根据请求执行相应操作(如设备连接、断开连接、设备扫描等)。
HCI事件:控制器在执行操作时,向主机发送事件,告知主机操作的结果和当前状态。
为了理解起来更简单,将蓝牙核心系统架构抽象为3层:
User Application(Host)
User Application即应用层,也被称为Host,我们调用Bluetooth API就属于应用层,例如,BluetoothAdapter中提供的接口。
HCI (Host controller Interface)
上层在调用蓝牙API时,不会直接操作蓝牙底层(Controller)相关接口,而是通过HCI下发对应操作的Command给Controller,然后底层执行命令后返回执行结果,即Controller发送Event给HCI,HCI再通知给应用层,HCI起到了一个中间层的作用。
Controller
Controller是在最底层,可以理解为我们手机上的蓝牙芯片。
HCI Log 的作用
HCI Log 是记录和分析这些命令和事件的一种工具。
在分析Android应用程序与Bluetooth设备连接问题时,这个工具非常有用。
应用程序通常无法明确显示Bluetooth连接断开的详细原因,或者无法判断是从哪一方断开的连接。
在这种情况下,使用该工具来识别断开的原因和断开源非常方便。
HCI Log 记录的内容
HCI Log 会记录以下类型的信息:
HCI命令:包括命令的发送时间、命令类型、参数等信息。
HCI事件:包含事件的发生时间、事件类型、相关数据(如连接状态、设备地址、信号强度等)。
数据包交换:记录从主机到控制器、控制器到主机的数据包,帮助分析数据传输的可靠性。
错误信息:如果在蓝牙通信过程中发生错误,HCI Log 会记录相关的错误代码和描述。
HCI Log 的使用场景
调试:当蓝牙设备出现连接问题、通信中断或设备不响应时,开发者可以查看 HCI Log 来排查问题,找出发生错误的原因。
性能分析:开发者可以通过 HCI Log 评估蓝牙设备的性能,例如连接时间、数据传输速度等。
设备兼容性:HCI Log 可以帮助检测设备之间的兼容性问题,例如不同厂商的蓝牙设备在通信时是否存在不兼容的情况。
获取 HCI Log
获取 HCI Log 的方式取决于使用的操作系统和工具。常见的获取方式有:
在 Android 设备上,开发者可以通过启用开发者选项中的蓝牙日志来获取 HCI Log。
在 Linux 上,使用
hcidump
或bluetoothd
等工具来抓取 HCI Log。在 Windows 或 macOS 中,可以通过蓝牙开发工具或特定的调试工具(如Wireshark)来获取相关的 HCI 数据。
获取 HCI Log(Android)
进入【设置】 > 【设备信息】 > 连续点击【版本号】7次,即可进入开发者模式。
将 Bluetooth HCI 嗅探日志开启
[设置] > [系统] > [开发者选项]
选择开启 Bluetooth HCI 嗅探日志。
注意! 请务必选择“有效”!
选择“有效(已过滤)”时,设备之间的数据发送接收日志会被过滤掉,重要的通信部分的日志将无法查看。
例如,在蓝牙低能耗(Bluetooth Low Energy)情况下,GATT通信部分(如写入/通知/指示等)会被过滤掉,无法查看。
重启蓝牙模块
将蓝牙关闭后再打开。
这样可以启用HCI嗅探日志。
进行蓝牙操作以获取日志
使用Android终端和蓝牙设备进行操作,以获取所需的日志。
生成错误报告
选择 [设置] > [系统] > [开发者选项] > [错误报告]
选择“对话型报告”(完全报告也可以,但需要等更久)
完成生成错误报告后,请点击此通知并分享(如通过电子邮件等)。
解压后进入路径
/FS/data/misc/bluetooth/logs
使用Wireshark解析
打开 btsnoop_hci.log
文件并使用 Wireshark 进行日志分析。
关于详细的分析方法,请参考 Bluetooth SIG 发布的规格文档。