# 调试

此信息解释了如何定制基于 Yocto 的工作区，以及解决常见问题和问题。

## 调试工具

`<workspace>/layers/poky/meta` 目录中定义的 `packagegroup-core-tools-debug` 添加了调试工具作为 `rootfs` 的一部分。`<workspace>/layers/meta-qcom-hwe/recipes-devtools` 目录包含附加的软件包组配方，即 `packagegroup-core-tools-debug.bbappend`。该 Append 文件将 `ltrace`，`perf`，`sysstat`，和 `valgrind` 工具添加到该软件包组。更多信息，请参阅[调试 Linux 用户空间问题](https://docs.qualcomm.com/bundle/publicresource/topics/80-70022-12/using_open_source_debug_tools.html)。

## 创建用于调试的编译版本

要在发出 Yocto BitBake 编译指令之前生成导出 `DEBUG_BUILD=1` 的调试 build，运行以下命令：

DEBUG_BUILD=1 bitbake qcom-multimedia-image
    Copy to clipboard

要了解在 `DEBUG_BUILD` 设为 **1** 时使用哪些内核的 defconfig 和 config 片段，可参见[内核配方](https://docs.qualcomm.com/doc/80-70022-27SC/topic/qualcomm_linux_metadata_layers_overview.html#kernel-recipes-section)下的内核配置。

## 验证 QDL 和 ModemManager

如果您使用的是包含 `systemd` 的 Linux 分发包，请使用 `systemctl` 命令停止 `ModemManager`。以下为 Ubuntu 22.04 的示例：

1. 若要验证 `ModemManager` 状态，请运行以下命令：

systemctl status ModemManager
        Copy to clipboard

ModemManager.service - Modem Manager
        Loaded: loaded (/lib/systemd/system/ModemManager.service; enabled; vendor preset: enabled)
        Active: active (running) since Tue 2023-11-28 16:28:15 IST; 3 months 4 days ago
        Main PID: 1338 (ModemManager)
        Tasks: 3 (limit: 4915)
        CGroup: /system.slice/ModemManager.service
                └─1338 /usr/sbin/ModemManager --filter-policy=strict
        Copy to clipboard

ps aux | grep -i modemmanager
        Copy to clipboard

root      1338  0.0  0.0 434332  9544 ?        Ssl   2023  10:39 /usr/sbin/ModemManager --filter-policy=strict
        Copy to clipboard
2. 要停止 `ModemManager`，请运行以下命令：

systemctl stop ModemManager
        systemctl status ModemManager
        Copy to clipboard

ModemManager.service - Modem Manager
        Loaded: loaded (/lib/systemd/system/ModemManager.service; enabled; vendor preset: enabled)
        Active: inactive (dead) since Sun 2024-03-03 20:08:32 IST; 4s ago
        Process: 1338 ExecStart=/usr/sbin/ModemManager --filter-policy=strict (code=exited, status=0/SUCCESS)
        Main PID: 1338 (code=exited, status=0/SUCCESS)
        Copy to clipboard
3. `ps aux` 命令不显示 `/usr/sbin/ModemManager` 的任何条目。如果您需要 `ModemManager`，则您刷写完成后必须重新启动它并验证它是否已启动：

systemctl start ModemManager
        systemctl status ModemManager
        Copy to clipboard

ModemManager.service - Modem Manager
        Loaded: loaded (/lib/systemd/system/ModemManager.service; enabled; vendor preset: enabled)
        Active: active (running) since Sun 2024-03-03 20:11:46 IST; 43s ago
        Main PID: 14785 (ModemManager)
        Tasks: 3 (limit: 4915)
        CGroup: /system.slice/ModemManager.service
                └─14785 /usr/sbin/ModemManager --filter-policy=strict
        Copy to clipboard

ps aux | grep -i modemmanager
        Copy to clipboard

root     14785  4.6  0.0 434332  9160 ?        Ssl  20:11   0:00 /usr/sbin/ModemManager --filter-policy=strict
        Copy to clipboard

## 验证新添加的层被编译版本排除

如果 BitBake 没有解析新添加的层，则该层的配方不会包含在镜像中。

1. 运行以下命令，并验证是否在输出中看到该层：

bitbake -e | grep ^BBLAYERS=
        Copy to clipboard
2. 如果找不到该层，请确认 `conf/bblayers.conf` 文件的内容，以确保该层包含在此处：

# These layers hold recipe metadata not found in OE-core, but lack any machine or distro content
        BASELAYERS ?= " \
          ${WORKSPACE}/layers/meta-openembedded/meta-oe \
          ${WORKSPACE}/layers/meta-openembedded/meta-filesystems \
          ${WORKSPACE}/layers/meta-openembedded/meta-networking \
          ${WORKSPACE}/layers/meta-openembedded/meta-perl \
          ${WORKSPACE}/layers/meta-openembedded/meta-python \
          ${WORKSPACE}/layers/meta-openembedded/meta-gnome \
          ${WORKSPACE}/layers/poky/meta \
          ${WORKSPACE}/layers/poky/meta-poky \
          ${WORKSPACE}/layers/meta-security \
          ${WORKSPACE}/layers/meta-selinux \
          ${WORKSPACE}/layers/meta-virtualization \
        "
        
        # These layers hold machine specific content, aka Board Support Packages
        BSPLAYERS ?= " \
          ${WORKSPACE}/layers/meta-qcom-hwe \
          ${WORKSPACE}/layers/meta-qcom \
        "
        
        # Add your overlay location to EXTRALAYERS
        # Make sure to have a conf/layers.conf in there
        EXTRALAYERS ?= "${WORKSPACE}/layers/meta-qcom-extras"
        
        BBLAYERS = " \
          ${WORKSPACE}/layers/meta-qcom-distro \
          ${EXTRALAYERS} \
          ${BASELAYERS} \
          ${BSPLAYERS} \
        "
        Copy to clipboard

## 验证 QA 问题：版本回退

当 `base` 和 `custom` 编译版本使用相同的工作区时，你会观察到以下特征：

ERROR: <package>-<version> do_packagedata_setscene: QA Issue: Package
    version for package wpa-supplicant-src went backwards which would break
    package feeds (from 0:2.10.qcom-r0 to 0:2.10-r0) [version-going-backwards]
    Copy to clipboard

例如：

ERROR: wpa-supplicant-2.10-r0 do_packagedata_setscene: QA Issue: Package
    version for package wpa-supplicant-src went backwards which would break
    package feeds (from 0:2.10.qcom-r0 to 0:2.10-r0) [version-going-backwards]
    Copy to clipboard

此质量保证 (QA) 问题出现在 `meta-qcom-hwe` 层中的 `custom` 配方变体中。例如，`wpa_supplicant` 配方的版本设置为 `2.10.qcom`。该版本中 `.qcom` 表示配方编译了与 `poky/meta/recipes-connectivity` 中的配方不同的源代码树。

当你编译 `custom` 变体后编译 `base` 变体，BitBake 编译系统检测到版本正在从 `wpa-supplicant_2.10` 回到 `wpa-supplicant-2.10.qcom`。BitBake 警告说，如果您将这种回归用于创建 package feeds，可能会导致问题。

若要避免此 QA 问题或设置包源而不会出现问题，请执行以下任一操作：

- 为 `base` 和 `custom` 变体创建不同的工作区并编译变体。
- 在同一工作区中，创建单独的生成目录，如下所示：

    | 对于编译变体 | 创建编译目录的命令 | 已创建的 build 目录 |
    | --- | --- | --- |
    | `base` | MACHINE=qcs9100-ride-sx DISTRO=qcom-wayland QCOM_SELECTED_BSP=base \<br>        source setup-environment build-qcom-wayland-base<br>        Copy to clipboard | `/<workspace>/Qualcomm_Linux/build-qcom-wayland-base/` |
    | `custom` | MACHINE=qcs9100-ride-sx DISTRO=qcom-wayland QCOM_SELECTED_BSP=custom \<br>        source setup-environment build-qcom-wayland-custom<br>        Copy to clipboard | `/<workspace>/Qualcomm_Linux/build-qcom-wayland-custom/` |

Last Published: Nov 04, 2025

[Previous Topic
创建编译版本以优化启动 KPI](https://docs.qualcomm.com/bundle/publicresource/80-70022-27SC/topics/creating_a_build_to_optimize_the_boot_kpi.md) [Next Topic
参考资料](https://docs.qualcomm.com/bundle/publicresource/80-70022-27SC/topics/references.md)