# 调试蓝牙问题

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

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

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

## 调试 BlueZ 协议栈

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

1. 启用 SSH 以访问您的主机设备。有关说明，请参阅[使用 SSH 登录](https://docs.qualcomm.com/bundle/publicresource/topics/80-70022-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.222
        Copy to clipboard
4. 输入以下密码来连接 SSH：

oelinux123
        Copy to clipboard

### 启用 BlueZ 日志

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

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

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

    **示例**

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

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

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

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

systemctl restart bluetooth
        Copy to clipboard

### 收集 BlueZ 日志

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

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

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

### 收集嗅探日志

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

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

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

    **示例**

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

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

### 启用 PulseAudio 日志

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

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

systemctl status pulseaudio
        Copy 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.service
        Copy to clipboard
3. 将 `-vvvv` 选项附加至文件中的以下行：

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

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

systemctl restart pulseaudio
        Copy to clipboard

### 启用 ofono 服务日志

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

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

systemctl status ofono
        Copy 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.service
        Copy to clipboard
3. 将 `-d` 选项附加至文件中的以下行：

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

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

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

### 收集 SSR dump 日志

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

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

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

cat /sys/class/devcoredump/disabled
        Copy to clipboard

    返回：

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

echo 0 > /sys/class/devcoredump/disabled
        Copy to clipboard
- 要手动收集 SSR 日志，请执行以下操作：

Note

要手动收集 SSR 崩溃 dump，请确保设备蓝牙已打开。

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

hcitool cmd 0x3f 0c 26
            Copy 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

        触发的崩溃会在 `/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 文件。

Note

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

Last Published: Nov 03, 2025

[Previous Topic
执行蓝牙 MAP 客户端功能](https://docs.qualcomm.com/bundle/publicresource/80-70022-13SC/topics/bluez-perform-bluetooth-map-client-functions.md) [Next Topic
参考资料](https://docs.qualcomm.com/bundle/publicresource/80-70022-13SC/topics/references_acronyms.md)