# 调试

Source: [https://docs.qualcomm.com/doc/80-70017-13SC/topic/bt_debugging.html](https://docs.qualcomm.com/doc/80-70017-13SC/topic/bt_debugging.html)

要调试蓝牙问题，使用主机日志或空口日志 (OTA)。主机日志包括 Logcat 和 BTSnoop (协议栈)/HCI 日志。这些日志可用于初始调试。

下表列出了调试不同蓝牙问题所需的日志：

| 问题类型 | Logcat | BTSnoop/HCI | 内核日志 | OTA | PulseAudio | 子系统重启 (SSR) 日志 |
| --- | --- | --- | --- | --- | --- | --- |
| 通用 | 必填 | 必填 | 不需要 | 推荐 | 不需要 | 不需要 |
| 蓝牙控制器 | 不需要 | 推荐 | 不需要 | 必填 | 不需要 | 必填 |
| 蓝牙开启/关闭 | 必填 | 不需要 | 不需要 | 不需要 | 不需要 | 必填 |
| Crash | 必填 | 不需要 | 必填 | 不需要 | 不需要 | 必填 |
| 音频 | 不需要 | 必填 | 不需要 | 必填 | 必填 | 不需要 |

## 调试 BlueZ 堆栈

Source: [https://docs.qualcomm.com/doc/80-70017-13SC/topic/bt_debugging.html](https://docs.qualcomm.com/doc/80-70017-13SC/topic/bt_debugging.html)

在启用或收集日志之前，请执行以下操作：

1. 启用 SSH 以访问您的主机设备。相关说明，可参见[使用 SSH 登录](https://docs.qualcomm.com/bundle/publicresource/topics/80-70017-254/how_to.html#use-ssh)。
2. 将 DUT 和远程设备放置在蓝牙附近。
3. 在命令提示符下使用以下命令运行 SSH： 

        ssh root@<device_IP_address>Copy to clipboard

    **示例**

如果设备的 IP 地址为 `10.92.160.222`，则运行以下命令：

        ssh root@10.92.160.222Copy to clipboard
4. 输入以下密码来连接 SSH： 

        oelinux123Copy to clipboard

### 启用 BlueZ 日志

要启用 BlueZ 日志，请在 SSH 中执行以下操作：

1. 通过运行以下命令启用读写权限：

        mount -o remount rw /Copy to clipboard
2. 在文本编辑器中打开蓝牙服务文件。 
    **示例**

    要在 VI 编辑器中打开 bluetooth.service 文件，请运行以下命令：

        vi /lib/systemd/system/bluetooth.serviceCopy to clipboard
3. 将 `-d` 选项附加至文件中的以下行：

        ExecStart=/usr/libexec/bluetooth/bluetoothd -dCopy to clipboard
4. 保存该文件。
5. 通过运行以下命令重新加载 Bluetooth daemon：

        systemctl daemon-reloadCopy to clipboard
6. 通过运行以下命令重新启动蓝牙：

        systemctl restart bluetoothCopy to clipboard

### 收集 BlueZ 日志

- 要收集 BlueZ 用户空间日志，请在 SSH中运行以下命令：

        journalctl -f -u bluetooth.service > /var/log/bluetooth.logCopy to clipboard
- 要收集所有日志，请在 SSH 中运行以下命令：

        journalctl -f > /var/log/full.logCopy to clipboard

### 收集窥探日志

要收集监听日志，请在 SSH 中执行以下操作:

1. 运行 `hcidump` 工具。
2. 通过运行以下命令保存文件：

        hcidump --save-dump=<filename.log>Copy to clipboard

    **示例**

要将监听日志保存到 snoop.log 文件，请运行以下命令：

        hcidump --save-dump=/var/log/snoop.logCopy to clipboard

### 启用 PulseAudio 日志

要启用 PulseAudio 日志，请在 SSH 中执行以下操作：

1. 通过运行以下命令验证 PulseAudio 的状态：

        systemctl status pulseaudioCopy to clipboard

    **示例输出**

sh-5.1# systemctl status pulseaudio
        * pulseaudio.service - PulseAudio Sound Service
            Loaded: loaded (/lib/systemd/system/pulseaudio.service; enabled; vendor preset: enabled)
            Active: active (running) since Sun 1980-01-06 00:00:10 UTC; 27min ago
            Main PID: 1607 (pulseaudio)
            Tasks: 14 (limit: 6234)
            Memory: 19.8M
            CGroup: /system.slice/pulseaudio.service
                    '- 1607 /usr/bin/pulseaudio -- system -- daemonize=no -v
        
        Jan 06 00:00:11 qcm6490 pulseaudio[1607]: session_close: 1376 exit, ret e
        Jan 06 00:00:11 qcm6490 pulseaudio[1607]: freeFrontEndIds: 7243: stream ty .. .110
        Jan 06 00:80:11 qcm6490 pulseaudio[1607]: close: 514: Enter. deviceCount 1 ... ER)
        Jan 06 00:00:11 qcm6490 pulseaudio[1607]: Reset path: speaker-vbat
        Jan 06 00:00:11 qcm6490 pulseaudio[1607]: close: 528: Exit. deviceCount e ... s 0
        Jan 06 00:00:11 qcm6490 pulseaudio[1607]: GetConcurrencyInfo: 5471: stream ... wed
        Jan 06 00:80:11 qcm6490 pulseaudio[1607]: GetConcurrencyInfo: 5471: stream ... wed
        Jan 06 00:00:11 qcm6490 pulseaudio[1607]: GetConcurrencyInfo: 5471: stream ... wed
        Jan 06 00:00:11 qcm6490 pulseaudio[1607]: deregisterStream: 3690: stream type 1
        Jan 06 00:00:11 qcm6490 pulseaudio[1607]: pal_stream_close: 306: Exit. status 0
        Hint: Some lines were ellipsized, use -l to show in full.
        sh-5.1#Copy to clipboard
2. 在文本编辑器中打开 PulseAudio 服务文件。 
    **示例**

    要在 VI 编辑器中打开 pulseaudio.service 文件，请运行以下命令：

        vi /lib/systemd/system/pulseaudio.serviceCopy to clipboard
3. 将 `-vvvv` 选项附加至文件中的以下行：

        /usr/bin/pulseaudio --system --daemonize=no -vvvvCopy to clipboard
4. 保存该文件。
5. 通过运行以下命令重新加载 Bluetooth daemon：

        systemctl daemon-reloadCopy to clipboard
6. 通过运行以下命令重新启动 PulseAudio：

        systemctl restart pulseaudioCopy to clipboard

### 启用 ofono 服务日志

要启用 ofono 服务的日志，请在 SSH 中执行以下操作：

1. 通过运行以下命令验证 ofono 服务的状态：

        systemctl status ofonoCopy to clipboard

    **示例输出**

sh-5.1# systemctl status ofono
        * ofono.service - Telephony service
            Loaded: loaded (/lib/systemd/system/ofono.service; enabled; vendor preset: enabled)
            Active: active (running) since Sun 1980-01-06 00:00:00 UTC; 30min ago
            Main PID: 990 (ofonod)
            Tasks: 1 (limit: 6234)
            Memory: 3.8M
            CGroup: /system.slice/ofono.service
                    `- 990 /usr/sbin/ofonod -n
        
        Jan 06 00:00:00 qcm6490 systemd[1]: Started Telephony service.
        sh-5.1# |Copy to clipboard
2. 在文本编辑器中打开 ofono 服务文件。
    **示例**

    要在 VI 编辑器中打开 ofono.service 文件，请运行以下命令：

        vi /lib/systemd/system/ofono.serviceCopy to clipboard
3. 将 `-d` 选项附加至文件中的以下行：

        ExecStart=/usr/sbin/ofonod -n -dCopy to clipboard
4. 保存该文件。
5. 通过运行以下命令重新加载 Bluetooth daemon：

        systemctl daemon-reloadCopy to clipboard
6. 运行以下命令重启 ofono 服务：

        systemctl restart ofonoCopy to clipboard
7. 验证服务状态以验证它是否正在使用指定的标志运行。

### 收集 SSR dump日志

在 Qualcomm Linux 软件中，如果任何蓝牙子系统模块 crash，SSR 功能会在蓝牙驱动程序中收集所需的固件 crash
                dump。然后，它会重启蓝牙子系统。故障 dump 文件位于 /var/spool/crash/ 目录中。

考虑以下关于 SSR 日志记录的要点：

- 要验证 SSR 日志是否已启用或禁用，请运行以下命令：

        cat /sys/class/devcoredump/disabledCopy to clipboard

返回：
    - `1`：SSR 日志记录已禁用。
    - `0`：SSR 日志记录已启用。
- 要启用 SSR 日志，请运行以下命令：

        echo 0 > /sys/class/devcoredump/disabledCopy to clipboard
- 要手动收集 SSR 日志，请执行以下操作：
注释： 要手动收集 SSR 故障 dump，请确保设备蓝牙已打开。

    1. 运行 `hcitool` 工具。
    2. 通过运行以下命令将  crash 命令发送至控制器：

            hcitool cmd 0x3f 0c 26Copy to clipboard

        **示例输出**

hcitool cmd 0x3f 0c 26
            < HCI Command: ogf 0x3f, ocf 0x000c, plen 1
              26
            > HCI Event: 0xff plen 246
              01 09 A5 7A 01 02 84 BD 4C 00 00 00 00 7C 0C 01 10 0C 8B 00
              00 00 02 00 61 0C 8B 00 00 0C FC 00 00 AC 08 02 00 B8 04 02
              00 08 08 08 08 09 09 09 09 10 10 10 10 11 11 11 11 04 00 00
              00 80 FF 06 00 CC DE 06 00 67 0C 01 10 4A 0F 01 10 00 00 00
              00 02 00 00 00 A0 E8 DE 06 00 0C 8B 00 00 0C FC 00 00 AC 08
              02 00 84 16 02 00 3F 42 01 10 04 00 00 00 06 00 00 00 0C 8B
              00 00 0C FC 00 00 3F 00 00 00 BD AE 02 00 04 00 00 00 FF FF
              00 00 0C 8B 00 00 0C FC 00 00 3F 00 00 00 B1 BB 0D 10 90 FD
              01 00 90 2B 01 00 10 36 01 00 4C 09 02 00 90 FD 01 00 15 C6
              0D 10 90 2B 01 00 49 E2 02 10 00 00 00 00 00 00 00 10 35 D5
              A5 2D 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02
              02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02
              02 02 02 02 02 02
            Copy to clipboard

        触发的 crash 会在 /var/spool/crash/ 目录中生成一个 BIN
                                文件。

        **示例输出**

ls -l /var/spool/crash/
            total 904
            -r--------. 1 root root 458888 Jan  1 00:53 hci0_1970-01-01_00-53-36.bin
            -r--------. 1 root root 458888 Jan  1 00:58 hci0_1970-01-01_00-58-18.bin
            Copy to clipboard
    3. 确保在 /var/spool/crash/ 目录中生成 BIN 文件。

注释：
- 仅高级版本支持 SSR 功能。
- 如果您发现任何超时或蓝牙硬件错误，请联系 Qualcomm 并共享 BIN 文件。

## 调试 Fluoride 协议栈

Source: [https://docs.qualcomm.com/doc/80-70017-13SC/topic/bt_debugging.html](https://docs.qualcomm.com/doc/80-70017-13SC/topic/bt_debugging.html)

要使用 Fluoride 堆栈调试软件中的蓝牙问题，请使用主机日志或 OTA 日志。

### 主机日志

**前提条件**

确保启用 SSH 来访问您的主机设备。相关说明，可参见[使用 SSH 登录](https://docs.qualcomm.com/bundle/publicresource/topics/80-70017-254/how_to.html#use-ssh)。

**步骤**

请执行以下操作，以便从 DUT 获取蓝牙日志：

1. 关闭设备蓝牙。
2. 使用以下命令在命令提示符下运行 SSH：

        ssh root@<device_IP_address>Copy to clipboard

    **示例**

    如果设备的 IP 地址为 `10.92.160.222`，则运行以下命令：

        ssh root@10.92.160.222Copy to clipboard
3. 输入以下密码来连接 SSH：

        oelinux123Copy to clipboard
4. 按如下方式获取 Logcat 日志：
    1. 通过运行以下命令从设备中拉取蓝牙协议栈配置文件 bt\_stack.conf：

            scp -r root@<IP_address>:/etc/bluetooth/bt_stack.conf <destination_file_path>Copy to clipboard

        要将文件拉取到PC的当前文件路径，请在命令中输入 `<destination_file_path>` 作为 `.`。

注释： 当提示输入密码时，输入 `oelinux123` 以通过安全复制协议 (SCP) 验证文件传输。

        **示例**

        设备的 IP 地址是 `10.92.160.222`。请运行以下命令，以便从设备拉取 `bt_stack.conf` 文件：

            scp -r root@10.92.160.222:/etc/bluetooth/bt_stack.conf .Copy to clipboard
    2. 通过在蓝牙协议栈配置文件 `bt_stack.conf` 中配置以下参数，将日志级别更改为详细：

            TRC_HCI=6
            TRC_L2CAP=6
            TRC_RFCOMM=6
            TRC_OBEX=6
            TRC_AVCT=6
            TRC_AVDT=6
            TRC_AVRC=6
            TRC_AVDT_SCB=6
            TRC_AVDT_CCB=6
            TRC_A2D=6
            TRC_SDP=6
            TRC_SMP=6
            TRC_BTAPP=6
            TRC_BTIF=6
            TRC_BNEP=6
            TRC_PAN=6
            TRC_HID_HOST=6
            TRC_HID_DEV=6Copy to clipboard
    3. 通过运行以下命令将蓝牙协议栈配置文件推送到设备：

            scp -r bt_stack.conf root@<IP_address>:/etc/bluetooth/bt_stack.confCopy to clipboard

        **示例**

        设备的 IP 地址是 `10.92.160.222`。请运行以下命令，以便将 `bt_stack.conf` 文件推送至设备：

            scp -r bt_stack.conf root@10.92.160.222:/etc/bluetooth/bt_stack.confCopy to clipboard
    4. 通过运行以下命令收集 Logcat 日志：

            journalctl -f > all_logs.txtCopy to clipboard
    5. 通过运行以下命令拉取 Logcat 文件：

            scp -r root@<IP_address>:<source_file_path_of_all_logs.txt> <destination_file_path>Copy to clipboard

        要将文件拉取到 PC 的当前文件路径，请在命令中输入 `<destination_file_path>` 作为 `.`。

        **示例**

设备的 IP 地址是 `10.92.160.222`。要将 Logcat 文件 all\_logs.txt 拉取到当前文件路径，运行以下命令：

            scp -r root@10.92.180.250:/home/root/all_logs.txt .Copy to clipboard
5. 通过运行以下命令拉取 BTSnoop 日志：

        scp -r root@<IP_address>:/etc/bluetooth/btsnoop_hci.log <destination_file_path>Copy to clipboard

    HCIDUMP/BTSnoop 日志可用于确定与应用、蓝牙主机、蓝牙芯片组还是对端设备有关的问题。

    要将文件拉取到 PC 的当前文件路径，请在命令中输入 `<destination_file_path>` 作为 `.`。

    **示例**

设备的 IP 地址是 `10.92.160.222`。请运行以下命令，以便拉取 `btsnoop_hci.log` 文件：

        scp -r root@10.92.160.222:/etc/bluetooth/btsnoop_hci.log .Copy to clipboard

如果存在复合设备 USB，则 Q6 会处理唤醒的主机，连接 USB，然后将崩溃 dump 发送到主机。

在独立模式下，蓝牙会唤醒主机并发送崩溃 dump。

### OTA 日志

OTA 日志也称为嗅探器日志。使用 FTS/Ellisys 嗅探器工具捕获蓝牙 OTA 日志，以调试某些芯片组或对端设备问题以及环境问题。

Last Published: Jan 23, 2025

[Previous Topic
执行蓝牙 HFP 音频网关功能](https://docs.qualcomm.com/bundle/publicresource/80-70017-13SC/topics/perform-bluetooth-hfp-ag-functions.md) [Next Topic
参考资料](https://docs.qualcomm.com/bundle/publicresource/80-70017-13SC/topics/references_acronyms.md)