首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >以编程方式启用HCI蓝牙窥探日志

以编程方式启用HCI蓝牙窥探日志
EN

Stack Overflow用户
提问于 2016-03-31 06:37:07
回答 1查看 4.9K关注 0票数 2

有一个众所周知的道路可以从开发人员选项UI中启用HCI蓝牙窥探日志。

有什么方法可以通过编程来实现这一点吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-12 13:17:19

使用开发人员选项:

  • 如果您启用了开发人员选项,那么您也可以在这些选项下启用蓝牙窥探日志记录。重新启动后,您应该在/data/misc/bluetooth/logs/下找到日志文件(不确定是否需要根用户访问这些文件),

使用bt_stack.conf (需要root用户)-(为Android 8.0+更新)

bt_stack.conf/system/etc/bluetooth下找到,现有的conf文件也在/data/misc/bluedroid下找到。

在大多数情况下,您必须使用以下步骤禁用verity:

  • adb -s <DEVICE> root
  • adb -s <DEVICE> disable-verity
  • adb -s <DEVICE> reboot (应用更改)
  • 在重新启动之后,再次输入root:adb -s <DEVICE> root
  • 然后重装,adb -s <DEVICE> remount
  • 您还可以使用命令mount -o rw,remount <PARTITION>重新装入
  • 然后,您将能够推送文件,然后您可以进行更改+重新启动。
  • 编辑bt_stack.conf文件(设置BtSnoopLogOutput=true)
  • 禁用然后启用蓝牙-这将启动HCI窥探日志记录
  • 当您决定足够时,再次编辑文件,同时设置BtSnoopLogOutput=false和重置蓝牙-这将停止HCI窥探日志记录。
  • 我通常要做的是拉出相应的文件,在fav编辑器(通常是vi或VSCode)中进行更改,然后使用以下命令将其推回去。
  • adb -s <DEVICE> pull /system/etc/bluetooth/bt_stack.conf
  • adb -s <DEVICE> push bt_stack.conf /system/etc/bluetooth/.
  • 除了BTSnoop logging之外,还可以使用bt_stack.conf启用所有堆栈跟踪。

在Android9.0 r34上,MSMKernel4.4上的文件如下所示:

代码语言:javascript
运行
复制
root@console:/system/etc/bluetooth# cat bt_stack.conf
                                                             
# Enable trace level reconfiguration function
# Must be present before any TRC_ trace level settings
TraceConf=true

# 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.
TRC_BTM=2
TRC_HCI=2
TRC_L2CAP=2
TRC_RFCOMM=2
TRC_OBEX=2
TRC_AVCT=2
TRC_AVDT=2
TRC_AVRC=2
TRC_AVDT_SCB=2
TRC_AVDT_CCB=2
TRC_A2D=2
TRC_SDP=2
TRC_SMP=2
TRC_BTAPP=2
TRC_BTIF=2
TRC_BNEP=2
TRC_PAN=2
TRC_HID_HOST=2
TRC_HID_DEV=2

# This is Log configuration for new C++ code using LOG() macros.
# See libchrome/base/logging.h for description on how to configure your logs.
# sample configuration:
#LoggingV=--v=0
#LoggingVModule=--vmodule=*/btm/*=1,btm_ble_multi*=2,btif_*=1

# PTS testing helpers

# Secure connections only mode.
# PTS_SecurePairOnly=true

# Disable LE Connection updates
#PTS_DisableConnUpdates=true

# Disable BR/EDR discovery after LE pairing to avoid cross key derivation errors
#PTS_DisableSDPOnLEPair=true

# SMP Pair options (formatted as hex bytes) auth, io, ikey, rkey, ksize
#PTS_SmpOptions=0xD,0x4,0xf,0xf,0x10

# PTS AVRCP Test mode
#PTS_AvrcpTest=true

# SMP Certification Failure Cases
# Set any of the following SMP error values (from smp_api_types.h)
# to induce pairing failues for various PTS SMP test cases.
# Setting PTS_SmpFailureCase to 0 means normal operation.
# Failure modes:
#
#  SMP_PASSKEY_ENTRY_FAIL = 1
#  SMP_PAIR_AUTH_FAIL = 3
#  SMP_CONFIRM_VALUE_ERR = 4
#  SMP_PAIR_NOT_SUPPORT = 5
#  SMP_PAIR_FAIL_UNKNOWN = 8
#  SMP_REPEATED_ATTEMPTS = 9
#  SMP_NUMERIC_COMPAR_FAIL = 12
#PTS_SmpFailureCase=0

使用隐藏的Android

请注意,此方法将要求您的应用程序具有BLUETOOTH_ADMIN权限。

如果可以的话,您可以使用同样的代码安卓系统设置应用程序。

代码语言:javascript
运行
复制
private void writeBtHciSnoopLogOptions() {
    BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
    adapter.configHciSnoopLog(true);
}

configHciSnoopLog是隐藏的班级 API的一部分,所以请确保您知道如何启用它:

使用SL4A

SL4A允许您直接在Android设备上编辑和执行脚本和交互式解释器,从而将脚本语言引入Android。这些脚本可以访问许多完全成熟的Android应用程序可用的API,但是它的界面非常简化,可以很容易地完成任务。

如果您的Android映像是支持SL4A的,则可以使用以下BluetoothFacade方法

代码语言:javascript
运行
复制
@Rpc(description = "Enable or disable the Bluetooth HCI snoop log")
public boolean bluetoothConfigHciSnoopLog(
        @RpcParameter(name = "value", description = "enable or disable log")
        Boolean value
        ) {
    return mBluetoothAdapter.configHciSnoopLog(value);
} 

请注意,Github上的API参考已经过时了,但是您可以在官方的AOSP 存储库 (Common\src\com\googlecode\android_scripting\facade\bluetooth)中看到最新的内容。

启用HCI窥探日志的Python脚本如下所示:

代码语言:javascript
运行
复制
from android import Android

droid = Android()
droid.bluetoothConfigHciSnoopLog(True)

完成日志记录后,您可以在/sdcard/btsnoop_hci.log中找到HCI Snoop日志。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36325874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档