Программное включение журнала HCI Bluetooth snoop

Существует хорошо известный способ чтобы включить журнал отслеживания HCI Bluetooth в интерфейсе параметров разработчика.
Есть ли способ добиться этого программно?


person JeB    schedule 31.03.2016    source источник


Ответы (1)


Использование параметров разработчика:

  • Если вы включите параметры разработчика, вы также можете включить ведение журнала отслеживания Bluetooth в этих параметрах. После перезагрузки вы должны найти файлы журнала в разделе /data/misc/bluetooth/logs/ (не уверен, что вам нужен root для доступа к этим файлам).

Использование bt_stack.conf (требуется root) - (обновлено для Android 8.0+)


bt_stack.conf находится под /system/etc/bluetooth, а существующие файлы конфигурации также находятся под /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)
  • Отключите, а затем включите Bluetooth — это запустит регистрацию отслеживания HCI.
  • Когда вы решите, что этого достаточно, снова отредактируйте файл, установив BtSnoopLogOutput=false, и перезагрузите Bluetooth — это остановит регистрацию отслеживания HCI.
  • Что я обычно делаю, так это извлекаю соответствующий файл, вношу изменения в моем любимом редакторе (обычно 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.

Вот как выглядят файлы на Android 9.0 r34, MSM Kernel 4.4:

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 API


Обратите внимание, что для этого подхода потребуется, чтобы ваше приложение имело разрешение BLUETOOTH_ADMIN.
Если все в порядке, вы можете использовать тот же код, который использует приложение системных настроек Android.

private void writeBtHciSnoopLogOptions() {
    BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
    adapter.configHciSnoopLog(true);
}

configHciSnoopLog является частью скрытого API BluetoothAdapter class, поэтому убедитесь, что знаете, как его включить:

Использование SL4A


SL4A привносит языки сценариев в Android, позволяя вам редактировать и выполнять сценарии и интерактивные интерпретаторы непосредственно на устройстве Android. Эти сценарии имеют доступ ко многим API-интерфейсам, доступным для полноценных приложений Android, но со значительно упрощенным интерфейсом, облегчающим выполнение задач.

Если ваш образ Android создан с поддержкой SL4A, вы можете использовать следующий метод BluetoothFacade:

@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);
} 

Обратите внимание, что справочник по API на Github устарел, но вы можете видеть последняя версия в официальном репозитории AOSP (Common\src\com\googlecode\android_scripting\facade\bluetooth)

Сценарий Python, который включает журналы отслеживания HCI, будет выглядеть следующим образом:

from android import Android

droid = Android()
droid.bluetoothConfigHciSnoopLog(True)

Когда вы закончите ведение журнала, вы можете найти журнал HCI Snoop в /sdcard/btsnoop_hci.log.

person JeB    schedule 12.04.2016