Android子系统之蓝牙调试

文章目录

1.资料快车

1)Android12蓝牙开发避坑指南:从HCI到Bluedroid的完整流程解析

2)BLE蓝牙协议:抓包实战(HCI+空口)

https://mp.weixin.qq.com/s/BxxavrMMZkWq417dOsYjIQ

2.从架构角度看调试

1) Android Bluetooth组件

2)分析手段汇总

1)从上到下,不同层级采用不同的方式;

3)hci与空中报文对比?

空中报文可以抓取更底层的数据(controller中的 RF、BB、LM层的协议数据),空中报文是最终的手段!

1.hci

2.空中报文

3.基本调试

1)日志

复制代码
日志分类:btsnoop日志、Bluedroid日志(logcat)和内核日志


如何查看各层级的日志?

1.查看BMS服务日志
adb logcat -s BluetoothManagerService

2.服务层日志
adb logcat -s AdapterService

3.native层
adb logcat -s bluetoothd

4.组合命令
adb logcat -v threadtime | grep -E "BluetoothManagerService|AdapterService| bt_btif"

5.追踪BT的系统调用情况
adb shell ps -A | grep bluetooth
strace -p 1671 -f -e trace=openat,read,write,ioctl 2>&1

6.hcitool和hciconfig工具(AOSP没有内置)。它们允许你直接操作HCI设备。

7.
Notepad++ logcat搜索策略:
1.按照层级来过滤 - 需要明确每一层的关键字
1)比如bluetooth | bt_hci
2.最大范围搜索:
1)两个关键字: bluetooth / bt
从下往上检索,出现异常后,后续不会打印或连续报错

Notepad++ dmesg搜索策略
1.厂商名称 | bluetooth | bt
2.AIC driver LOG检索
关键字:aic_btusb


属性开启蓝牙框架日志
setprop persist.log.tag.bluetooth VERBOSE

logcat -v time > /data/bt_logcat_version_1.log &
dmesg --follow > /data/bt_dmesg_version_1.log &

2)配置文件

复制代码
1.Bluetooth MAC地址
/vendor/etc/bluetooth/bt_addr.conf

2.

4.btsnoop日志(HCI cmd)

复制代码
1.btsnoop是蓝牙标准的数据包捕获格式,记录主控和控制器之间的所有HCI命令、事件和数据包,是分析蓝牙问题的终极武器
2.
1) 启用蓝牙HCI snoop log(需要开发者选项已开启)
adb shell setprop persist.bluetooth.btsnoopenable true
或直接在开发者选项中打开"蓝牙数据包捕获"

2)协议栈等级配置,默认2,最高6
AN13及以上:/system/apex/com.android.btservices/etc/bluetooth/bt_stack.conf
AN13以下:/system/etc/bluetooth/bt_stack.conf
比如:
TRC_BTM=2

3)设置如下,关开蓝牙生效,掉电失效
Android 11以下: setprop persist.bluetooth.btsnoopenable true                                       
Android 11及以上:  setprop persist.bluetooth.btsnooplogmode full

1.重启蓝牙服务以使设置生效
adb shell stop bluetooth
adb shell start bluetooth
 
4) 开始你的蓝牙操作(连接、传输等)
 
5) 抓取日志文件,常见位置:
在(/data/misc/bluetooth/logs/;/data/misc/bluedroid一般在此两个路径下)路径下的cfa/log后缀

5)打开btsnoop日志
1、btsnoop文件是二进制格式,你需要专门的工具来查看。你可以像分析网络流量一样,看到每一帧HCI数据,包括命令(Command)、事件(Event)、ACL数据(Data)和SCO语音数据。
2、Ellisys Bluetooth Analyzer工具(建议使用,分类清晰):
https://kb.cvte.com/pages/viewpage.action?pageId=204680185
3、Wireshark没有Ellisys Bluetooth Analyzer好用

6)技巧:
使用Ellisys Bluetooth Analyzer导出cvs让AI分析异常

5.空中报文(Bluetooth packets)

1)同样使用Ellisys来抓取:https://kb.cvte.com/pages/viewpage.action?pageId=203506122

2)BLE广播抓包工具比较便宜-nRF52840,BR/EDR则需要双模 ellisys BEX400 (昂贵) - 因为跳频技术(1s跳1600多次),而wifi连上路由器之后固定信号,蓝牙抓包必须使用高精度仪器;

3)由于蓝牙是采用跳频技术,需要使用MAC来抓

6.利用AI分析复杂且枯燥的协议帧

1)蓝牙协议栈相当庞大,我们应当掌握整体框架,细节分析交给AI,那样才是最高效的!