# 除錯

此資訊說明如何自訂基於 Yocto 的工作空間，並解決一般問題和議題。

## 除錯工具

在 `<workspace>/layers/poky/meta` 目錄中定義的 `packagegroup-core-tools-debug` 會將除錯工具新增為 `rootfs` 的一部分。`<workspace>/layers/meta-qcom-hwe/recipes-devtools` 目錄中包含附加的套件群組配方 `packagegroup-core-tools-debug.bbappend`。此附加檔案會將 `ltrace` 、 `perf` 、 `sysstat` 和 `valgrind` 工具加入此套件群組。如需更多資訊，請參閱 [對 Linux 使用者空間問題進行除錯](https://docs.qualcomm.com/bundle/publicresource/topics/80-70020-12/using_open_source_debug_tools.html)。

## 創建一個用於除錯的建置

若要產生除錯建置以在執行 Yocto BitBake 建置指令前export `DEBUG_BUILD=1`，請執行以下命令：

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

要了解當 `DEBUG_BUILD` 設置為 **1** 時使用哪些核心程式 defconfig 和配置片段，請參閱核心程式配置，參見 [核心配方](https://docs.qualcomm.com/doc/80-70020-27TC/topic/qualcomm_bsp_metadata_layers.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 未解析新增的層，則該層的配方不會加入映像檔中。執行下列命令並驗證您是否在輸出中看到該層：

bitbake -e | grep ^BBLAYERS=
    Copy to clipboard

如果找不到該層，請確認 `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 會警告這種版本回退可能會在建立套件來源時造成問題。

為了避免這個 QA 問題，或順利設置套件來源，請採取以下任一作法：

- 為 `base` 和 `custom` 建置版本創建不同的工作區。
- 在相同的工作區中，創建單獨的建置目錄，如下所示：

    | 對於建置版本 | 創建置建目錄的命令 | 已建立建置目錄 |
    | --- | --- | --- |
    | `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: Dec 23, 2025

[Previous Topic
建立具有最佳化開機 KPI 的建置](https://docs.qualcomm.com/bundle/publicresource/80-70020-27TC/topics/creating_a_build_for_optimized_boot_kpi.md) [Next Topic
參考資料](https://docs.qualcomm.com/bundle/publicresource/80-70020-27TC/topics/references.md)