打开蓝牙debug hci log

时间:2024-04-17 17:59:21

 

 

Android4.2之前抓取hci log都是通过hcidump命令完成的,但是Android4.2 Bluetooth引入了Bluedroid,这是一个新的蓝牙协议栈。所以抓取hci log的方法也改变了。

在我的Bluetooth计划里,本来是没打算写这篇blog的,但是在留言里看见有人问,所以写出来分享给那些目前还不会的。

Android 4.2之后, Bluetooth控制hcidump 的写开关和默认保存的hci log的路径,以及各种级别的log 开关是在/etc/bluetooth/bt_stack.conf 文件里. 如果你需要hci log,那你首先需要从手机把这个文件adb pull出来,然后修改这个文件的内容,然后adb push回去。文件里你修改的BtSnoopFileName这个值就是你需要的hci log文件路径。

bt_stack.conf的文件内容如下

# Enable BtSnoop logging function
# valid value : true, false
BtSnoopLogOutput=true //默认是false,如果需要抓取hcidump 的话,改成 true

# BtSnoop log output file
BtSnoopFileName=/sdcard/btsnoop_hci.log //默认写hcidump 的路径,btsnoop_hci.log 就是hcidump的log。可以按照你自己的需要修改。



# Trace level configuration
#   BT_TRACE_LEVEL_NONE    0    ( No trace messages to be generated )
#   BT_TRACE_LEVEL_ERROR   1    ( Error condition trace messages )
#   BT_TRACE_LEVEL_WARNING 2    ( Warning condition trace messages )
#   BT_TRACE_LEVEL_API     3    ( API traces )
#   BT_TRACE_LEVEL_EVENT   4    ( Debug messages for events )
#   BT_TRACE_LEVEL_DEBUG   5    ( Full debug messages )
#   BT_TRACE_LEVEL_VERBOSE 6    ( Verbose messages ) - Currently supported for TRC_BTAPP only.

//下面默认值是2,哪个模块需要抓取更多的log,可以把值改成你想要的.

比如说,你想看各个模块的log,你就全改成5 Full debug messages
TRC_BTM=5
TRC_HCI=5
TRC_L2CAP=5
TRC_RFCOMM=5
TRC_OBEX=5
TRC_AVCT=5
TRC_AVDT=5
TRC_AVRC=5
TRC_AVDT_SCB=5
TRC_AVDT_CCB=5
TRC_A2D=5
TRC_SDP=5
TRC_GATT=5
TRC_SMP=5
TRC_BTAPP=5
TRC_BTIF=5

 

 

 

 

这里介绍一种在Android上捕获蓝牙数据包的方法

1. 前提

首先你要有一部Android手机 
然后你的Android系统版本要在4.4及以上

我没有做过Android开发,不清楚开发者们是如何抓蓝牙包的 
不过我知道可以使用hcidump来抓取蓝牙数据包 
这里并不介绍这种方法(后续可能会去了解一下)

2. 开启功能

在开发者选项中有一个功能
- [Enable Bluetooth HCI snoop log/启用蓝牙 HCI 信息收集日志]
开启它

3. 抓包

然后你可以进行各种蓝牙操作,结束后的抓包文件就在 
/sdcard/btsnoop_hci.log

将它拷贝出来放在电脑上,就可以用Wireshark直接看了

可以使用比如bthci_acl, btl2cap, bthfp等过滤器来过滤数据包查看你所关心的协议