# 调试

调试提供了一组常见的日志记录和调试技术来解决 Qualcomm TEE、可信和客户端应用程序以及安全设备中的问题。

Note

在 SELinux Permissive 模式下运行所有 SSH 命令。将来会支持 Enforcing 模式。关于如何连接至设备的说明，请参阅 [Qualcomm Linux 编译指南 ➝ 如何 ➝ 登录 SSH](https://docs.qualcomm.com/bundle/publicresource/topics/80-70017-254/how_to.html#use-ssh)。

## 调试 Qualcomm TEE

Qualcomm TEE 内核日志（也称为 TrustZone 诊断日志）可用于调试在 Qualcomm TEE 中发生的错误。

TrustZone 诊断日志在 Linux 内核驱动程序中可用，该驱动程序可重定向日志。

1. 通过 SSH 以 root 用户的身份连接到设备。
2. 使用以下命令采集 TrustZone 日志：

cat /proc/tzdbg/log > tzbsp_log.txt
        Copy to clipboard

`tzbsp_log.txt` 中的错误代码以十六进制编码。您可以运行以下工具将 `tzbsp_log.txt` 从十六进制解码为字符串。

1. 导航到 `<TZ.XF.X.X path>/trustzone_images/ssg/bsp/tz/build/tz/A53_64/<BuildFlavor>`
2. 使用 python 3 运行以下命令。

python3 print_tz_log.py -l tzbsp_log.txt -e errorCodesDict.txt -t <TZ.XF.X.X path> -o tzbsp_log_decode.txt
        Copy to clipboard

    例如：

Python3 print_tz_log.py -l tzbsp_log.txt -e errorCodesDict.txt -t //crmhyd/nsid-hyd-05/TZ.XF.5.0-07927-KODIAKAAAAANAAZT-1 -o tzbsp_log_decode.txt
        Copy to clipboard

关于设备日志收集，TrustZone 诊断日志缓冲区是 RAM dump 的一部分，可以使用 crash dump 解析工具中的 TZ.XF 软件中的 `qsee.elf` 对其进行解析。对于离线或设备外日志收集，TrustZone diag 日志缓冲区是 RAM dump 的一部分，可以使用 TZ.XF 软件的 `qsee.elf` (trustzone\_images/ssg/bsp/qsee/build/${tz\_bid:EACAANAA}) 在 crash dump 解析工具中对其进行解析。

**使用安全 crash dump 进行调试**

您可以使用 RAM 转储来调试 Qualcomm TEE。Qualcomm TEE 的执行区域 dump 是通过安全 crash dump 收集的。

使用阶段 2 sec.elf 触发熔丝的设备称为启用了安全启动的设备。请参阅 [Sectools v2: Secure Debug User Guide](https://docs.qualcomm.com/bundle/80-NM248-23/resource/80-NM248-23_REV_AA_Sectools_v2__Secure_Debug_User_Guide.pdf)，以便在这些设备上进行调试。

Note

*SecTools* 指南可供具有授权访问权限的许可开发者使用。

## 调试受信程序和客户端程序

受信任的应用程序日志（也称为 Qualcomm TEE 日志）用于调试受信任应用程序中的错误。请使用内核和 journalctl 日志，以便调试客户端应用程序中的错误。

对于在线或设备上的日志收集，Linux 在运行时收集 Qualcomm TEE/内核日志。您可以使用 SSH 连接至设备并使用以下命令：

- 要从 Linux 收集 Qualcomm TEE 日志，请执行以下操作：

cat /proc/tzdbg/qsee_log > qsee_log.txt
        Copy to clipboard
- 关于客户端应用程序，收集内核和 logcat 日志：

cat /dev/kmsg > kernel_log.txt
        journalctl > journalctl.txt
        Copy to clipboard
- 对于脱机或设备外日志收集，Qualcomm TEE 日志与内核和 journalctl 日志一起在 RAM dump 中提供。

## 在安全设备上调试

作为安全启动过程的一部分，熔断调试禁用熔丝会禁用设备上的调试功能。这包括子系统上的 RAM dump、INV 和 NINV 调试。

调试策略功能允许控制启用了安全启动的设备的调试功能。

调试策略镜像支持调试功能，例如商业安全设备上的 JTAG 重新启用（INV 调试）、RAM dump 和 TrustZone 日志（NINV 调试）。

出于安全原因，设备的序列号控制安全 RAM dump、Qualcomm TEE 日志和 JTAG 的调试策略。

在 Qualcomm TEE 子系统上启用 JTAG 会禁用设备在硬件密钥生成方面的安全性。因此，现有的安全存储（如用户数据、SFS 和 RPMB）将无法访问。有时，设备可能会提示恢复出厂设置。使用以下命令在安全设备上进行调试：

<meta>/common/sectoolsv2/ext/<platform>/sectools.exe secure-debug --security-profile <meta>/common/sectoolsv2/<chipset>_security_profile.xml --generate --outfile apdp_out.mbn --all-flags --sign --signing-mode LOCAL --oem-id=0x1 --root-certificate=./RSA-OEM-KEYS/qpsa_rootca.cer  --ca-certificate=./RSA-OEM-KEYS/qpsa_attestca.cer --ca-key=./RSA-OEM-KEYS/qpsa_attestca.key --oem-product-id=0xabcd --serial-number=0xabcdabcd
    Copy to clipboard

确保正确配置 OEM\_ID、PRODUCT\_ID、序列号和密钥以及证书路径。

关于更多信息，请参阅 [Sectools v2: Secure Debug User Guide](https://docs.qualcomm.com/bundle/80-NM248-23/resource/80-NM248-23_REV_AA_Sectools_v2__Secure_Debug_User_Guide.pdf)。

Note

*SecTools* 指南可供具有授权访问权限的许可开发者使用。

**在设备上刷写 APDP**

要在设备上刷写 APDP，请运行以下命令

Fastboot flash apdp_a <path to apdp.mbn>
    Copy to clipboard

| 阶段 | 完全 dump | 完全 dump | 完全 dump | 迷你 dump |
| --- | --- | --- | --- | --- |
| 阶段 | 程序（DCC 和扫描 dump）<br><br><br>aDSP/Video/RPM/ SLPI | Modem/Qualcomm TEE/安全 dump | TZDiag | – |
| 非安全 | 无需调试策略 | 无需调试策略 | 无需调试策略 | 无需调试策略 |
| 安全阶段 1 | 无需 APDP 镜像 | 无需 APDP 镜像 | 无需 APDP 镜像 | 无需 APDP 镜像 |
| 安全阶段 2 | `--nonsecure-crash-dumps` | –带有设备序列号的离线崩溃转储 | QCS6490/QCS5430：“–logs”和设备序列号 QCS9075：“–tz-diag-logs” 和设备序列号<br><br><br>或<br><br><br>使用以下命令加密的 TZ Diag<br><br><br>`--nonsecure-crash-dumps` + devcfg 中用于 TZDiag 加密的公钥/指数值可以在以下位置配置：<br><br><br><br>> <br>> <br>> `/trustzone_images/ssg/securemsm/trustzone /qsee/mink/oem/config<chipset>/oem_config.xml` | > <br>> <br>> <ul class="simple"><br>> <li><p>Apps minidump：</p></li><br>> </ul><br>> <br>> `--apps-encrypted-mini-dumps`<br>> <ul class="simple"><br>> <li><p>Modem 和 WLAN：<br>> * <code class="docutils literal notranslate"><span class="pre">--mpss-encrypted-mini-dumps</span></code><br>> * <code class="docutils literal notranslate"><span class="pre">--wlan-encrypted-mini-dumps</span></code></p></li><br>> <li><p>aDSP minidump：<code class="docutils literal notranslate"><span class="pre">--adsp-encrypted-mini-dumps</span></code></p></li><br>> <li><p>cDSP minidump: <code class="docutils literal notranslate"><span class="pre">--cdsp-encrypted-mini-dumps</span></code></p></li><br>> </ul><br><br><br><br>请参阅 [KBA-191202045020-1 (ZIP)](https://docs.qualcomm.com/bundle/KBA-191202045020-1/resource/KBA-191202045020-1.zip)。有关详细信息，请参阅 [MiniDump Software User Guide](https://docs.qualcomm.com/bundle/80-P8754-71/resource/80-P8754-71_REV_H_MiniDump_Software_User_Guide.pdf)。 |

Note

*SecTools* 和 [\*](https://docs.qualcomm.com/doc/80-70017-11SC/topic/debug.html#id4)MiniDump 指南可供具有授权访问权限的许可开发者使用。

## Qualcomm TEE/TrustZone 在安全设备上进行对话日志收集

在安全设备上，默认情况下禁用从 Linux 收集的 Qualcomm TEE/TrustZone 日志。Qualcomm为日志记录提供了加密日志功能。请按照以下步骤启用此功能：

1. 使用以下命令生成用于加密的 RSA 密钥：

openssl genrsa -out rsa_key 2048
        Copy to clipboard
2. 使用以下方法显示 RSA 密钥信息和模数：

openssl rsa -in rsa_key -text
        openssl rsa -in rsa_key -modulus
        Private-key: (2048 bit)
        modulus: 00:a0:48:99:99:83:26:65:57:fc:75:52:25:45:53:
        92:fc:27:29:cb:14:35:94:7c:89:bc:d4:0a:c6:3d:
        0d:6d:8a:7d:72:1d:e3:4f:f0:32:66:41:a9:f6:c1:
        2f:79:aa:58:ea:57:3b:29:6d:cf:40:33:4e:ad:ec:
        bf:78:44:4b:28:52:c8:e3:6e:77:01:e5:a3:c6:25:
        65:8c:8b:cc:32:20:2d:29:58:03:f0:d5:b7:f4:c0:
        d6:09:b2:8e:59:c1:3c:ac:e5:61:04:36:78:e3:da:
        95:b3:e3:b7:71:90:50:ee:a9:70:5a:15:1a:af:d9:
        a5:4f:c2:70:f1:f8:f1:67:d1:78:0e:b8:95:6e:93:
        73:6a:23:f1:31:e1:e2:49:ff:18:54:a3:73:d0:70:
        91:de:7a:92:53:11:aa:cb:b0:f9:d0:e1:83:9f:74:
        67:bc:1a:89:6d:b1:d2:de:4f:ab:3c:1c:63:c9:bc:
        75:f0:c0:80:fc:db:73:d1:8a:e3:f4:60:57:dd:66:
        f1:3a:fa:18:ed:7f:47:72:3e:49:50:94:8e:19:ae:
        6b:69:62:3d:74:ca:44:fb:d4:1c:1d:59:43:30:31:
        0d:fb:ab:70:44:9d:d9:d0:ce:cb:43:f3:2a:98:a4:
        83:e7:76:ae:a8:b8:ea:63:64:e1:11:1b:99:92:b3: 9b:3f
        publicExponent: 65537 (0x10001)
        Copy to clipboard

Note

模数在 `pub_mod in oem_config.xml` 文件中使用。`pub_exp` 指数通常为 65537。0x10001 被称为 `publicExponent`。
3. 在 `trustzone_images/ssg/securemsm/trustzone/qsee/mink/oem/config/<chipset>/ oem_config.xml` 文件中设置 RSA 公钥（指数和模数）。

    通过使用：将以下行添加至 `oem_config.xml` 文件来启用此功能

<driver name="NULL">
        <global_def>
        <var_seq name="pub_mod" type=DALPROP_DATA_TYPE_STRING>
        a048999983266557fc755225455392fc2729cb1435947c89bcd40ac63d0d6d
        8a7d721de34ff0326641a9f6c12f79aa58ea573b296dcf40334eadecbf7844
        4b2852c8e36e7701e5a3c625658c8bcc32202d295803f0d5b7f4c0d609b28e
        59c13cace561043678e3da95b3e3b7719050eea9705a151aafd9a54fc270f1
        f8f167d1780eb8956e93736a23f131e1e249ff1854a373d07091de7a925311
        aacbb0f9d0e1839f7467bc1a896db1d2de4fab3c1c63c9bc75f0c080fcdb73
        d18ae3f46057dd66f13afa18ed7f47723e4950948e19ae6b69623d74ca44fb
        d41c1d594330310dfbab70449dd9d0cecb43f32a98a483e776aea8b8ea6364e1111b9992b39b3f
        </var_seq>
        <var_seq name="pub_exp" type=DALPROP_DATA_TYPE_STRING>
        000000000000000000000000000000000000000000000000000000000000000
        000000000000000000000000000000000000000000000000000000000000000
        000000000000000000000000000000000000000000000000000000000000000
        000000000000000000000000000000000000000000000000000000000000010001
        </var_seq>
        </global_def>
        Copy to clipboard

Note

更新 `oem_config.xml` 文件中的公钥时，请确保没有因记事本或写字板编辑器而在其间插入新行字符、制表符或空格。
4. 使用以下命令从 `trustzone_images/ssg/securemsm/trustzone/qsee/mink/oem/config/<chipset>/oem_config.xml` 文件启用加密功能配置标志：

< props name="OEM_log_encr_enable" type=DALPROP_ATTR_TYPE_UINT32>
        1
        </props>
        Copy to clipboard
5. 要构建 TrustZone devcfg 映像，请输入 OEM\_ID 字段值并签署 `devcfg.mbn` 映像。
6. 使用以下命令刷新已签名的 `devcfg.mbn` 图像：

fastboot flash devcfg_a devcfg.mbn
        Copy to clipboard

Note

`devcfg.mbn` 适用于 QCS6490，`devcfg_iot.mbn` 适用于 QCS9100。

7. 使用以下方式收集 Qualcomm TEE/TrustZone 日志：

cat /proc/tzdbg/qsee_log > qsee_log.txt
        cat /proc/tzdbg/log > tz_log.txt
        Copy to clipboard

## QualcommTEE/TrustZone diag日志解密步骤

1. 从 [KBA-200917004544-1 (ZIP)](https://docs.qualcomm.com/bundle/KBA-200917004544-1/resource/KBA-200917004544-1.zip) 下载 Python 解密工具 `decrypt_tzdiag_qsee_log_tools.py`。
2. 请运行以下命令，以便安装：

Python Version 3.x
        pip install pycryptodome
        pip install cryptography
        Copy to clipboard
3. 请运行以下命令，以便解密：

python decrypt_tzdiag_qsee_log_tools.py -pk <RSA private key file> -a RSA -I <input encrypted qsee/tz diag log collected from device> -o <decrypted qsee/tzdiag log filename>
        Copy to clipboard
4. 解密成功后：

    1. 将 Qualcomm TEE 日志的纯文本导航为可读的字符串格式。
    2. 使用以下命令将十六进制编码的错误代码转换为字符串：

print_tz_log.py
            Copy to clipboard

Last Published: Apr 27, 2025

[Previous Topic
定制](https://docs.qualcomm.com/bundle/publicresource/80-70017-11SC/topics/customize.md) [Next Topic
示例](https://docs.qualcomm.com/bundle/publicresource/80-70017-11SC/topics/examples-lru.md)

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