Changes in OpenEmbedded layers
Qualcomm Linux uses OpenEmbedded layers to deliver technology components and reference distributions. The following table lists the changes in the OpenEmbedded layers between Qualcomm Linux 1.0 and Qualcomm Linux 2.0: Table: Changes in OpenEmbedded layers| Qualcomm Linux 1.0 layers | Qualcomm Linux 2.0 layers |
|---|---|
|
|
| OpenEmbedded layer in Qualcomm Linux 1.0 | Corresponding OpenEmbedded layer in Qualcomm Linux 2.0 | Summary of changes in Qualcomm Linux 2.0 | Migration notes |
|---|---|---|---|
meta-qcom | meta-qcom | For Qualcomm Linux 2.0, this layer provides all BSP recipes that Qualcomm has authored. | This layer is compatible with Yocto whinlatter and master. |
meta-qcom-hwe | meta-qcom | The meta-qcom-hwe layer isn’t supported in Qualcomm Linux 2.0. The BSP recipes from this layer are now part of meta-qcom. | If your integration layer has a dependency placed on this layer, remove the dependency as meta-qcom provides all the OpenEmbedded features in Qualcomm Linux 2.0. To remove the dependency, remove qcom-hwe from layer.conf of your OpenEmbedded layer:LAYERDEPENDS_<you-layer> "qcom-hwe" |
meta-qcom-qim-product-sdk | meta-qcom | The meta-qcom-qim-product-sdk layer isn’t supported in Qualcomm Linux 2.0. The recipes present earlier in this layer have been migrated to meta-qcom. | If your integration layer has a dependency placed on this layer, remove the dependency as meta-qcom provides the OpenEmbedded features in Qualcomm Linux 2.0. To remove the dependency, remove qti-qim-product-sdk from layer.conf of your OpenEmbedded layer:LAYERDEPENDS_<you-layer> "qti-qim-product-sdk" |
meta-qcom-realtime | meta-qcom | The meta-qcom-realtime layer isn’t supported in Qualcomm Linux 2.0. The real-time Linux recipes are now part of meta-qcom. | If your integration layer has a dependency placed on this layer, remove the dependency as meta-qcom provides all the OpenEmbedded features in Qualcomm Linux 2.0. To remove the dependency, remove qcom-realtime from layer.conf of your OpenEmbedded layer:LAYERDEPENDS_<you-layer> "qcom-realtime" |
meta-qcom-distro | meta-qcom-distro | This layer provides reference distribution images for Qualcomm Linux. | For Qualcomm Linux 2.0, the key image recipes supported are qcom-multimedia-image and qcom-multimedia-proprietary-image. |
Changes in Qualcomm Linux 2.0 build system
Consider the following key differences between the traditional Qualcomm Linux 1.0 repo-manifest Yocto build workflow and the Qualcomm Linux 2.0 Configuration Automation System (KAS)-based workflow.KAS overview
Qualcomm Linux supports KAS-based build execution. KAS is an open-source tool for BitBake-based projects. It simplifies the process of configuring and launching OpenEmbedded builds using a YAML configuration file. KAS automates the following, making it suitable for both developers and continuous integration/continuous deployment (CI/CD) usage:- Cloning and checking out of necessary layer Git repositories> - Generating the required BitBake configuration files, such as
local.confandbblayers.conf, based on the YAML input - Reducing the number of steps required to set up a workspace by executing the standard BitBake process. For example,
kas build <config.yml>does the following:- Clones the layer repositories
- Sets up the environment
- Starts the BitBake
<image>
- Providing a wrapper kas-container, which can run the build process in Docker
| Parameter | Repo-manifest workflow | KAS workflow |
|---|---|---|
| Machine selection | Controlled through the MACHINE environment variable. | Defined in the machine.yml configuration file. |
| Distribution selection | Controlled through the DISTRO environment variable. | Defined in the distro.yml configuration file. |
| BSP flavor | Controlled explicitly using QCOM_SELECTED_BSP (either base or custom).base includes upstream sources.custom includes Qualcomm-proprietary packages. | No direct equivalent to QCOM_SELECTED_BSP. The BSP flavor is implicitly chosen by selecting the appropriate distro configuration file:qcom-distro-multimedia-image.yml includes upstream sources.qcom-distro.yml includes Qualcomm-proprietary packages. |
| Step | Repo-manifest workflow | KAS workflow |
|---|---|---|
| Uses repo init + repo sync to fetch meta layers based on a manifest file | kas checkout fetches all layers defined in the KAS configuration files. |
| Runs setup-environment to generate local.conf and bblayers.conf, based on MACHINE, DISTRO, and QCOM_SELECTED_BSP | kas build generates local.conf and bblayers.conf, based on machine.yml and distro.yml. |
| Runs bitbake <target> to build the image | kas build automatically runs bitbake to build the target configured in distro.yml. |
Sample KAS configuration file
The following example illustrates sample KAS configuration files found inmeta-qcom and explains how each section maps to the repo-manifest workflow concepts and how KAS interprets them. For more information about the configuration file format, see KAS documentation.
base.yml
Thebase.yml file documents the base configuration used by all build combinations.
machine.yml
Themachine.yml file documents machine-specific configuration. This file generally extends the base.yml configuration.
distro.yml
Thedistro.yml file documents distribution-specific configuration and the targets to be built.
| Section | Description |
|---|---|
| machine | Machine name used in the build. Equivalent to setting MACHINE=<machine> in local.conf. |
| distro | Indicates the distribution to be built. Equivalent to setting DISTRO=<distro> in local.conf. |
| repos | Defines all Yocto/OE meta layers to fetch. Each repository entry includes URL, branch, commit (optional), and a list of layers used from that repo. It corresponds directly to the meta layer <project> elements in the repo-manifest. |
| local_conf_header | Appends fragments to the local.conf generated . Equivalent to what setup-environment injects into local.conf in the repo-manifest workflow. |
| target | Specifies the images to build. Equivalent to running bitbake <target> in the repo-manifest workflow. |
Run builds using KAS-based build system
When using KAS, clone the repository containing the KAS YAML files and then build using one of the following methods:- Run the KAS build command
- Start a KAS shell and then run BitBake
qcom-multimedia-image, run the following command from the KAS shell that appears after the preceding output:
meta-qcom/ci/rb3gen2-core-kit.ymlmeta-qcom/ci/qcm6490.ymlmeta-qcom/ci/base.yml
meta-qcom/ci/qcom-distro.ymlmeta-qcom/blob/master/ci/qcom-distro-multimedia-image.yml
Set up CI with KAS using a sample repository
To set up CI with KAS, use the following sample repo: https://github.com/qualcomm-linux/meta-vendor-example Note To set up your Yocto Project build environment, see Yocto Project Reference Manual. To run a KAS-based build, do the following:- To install the KAS tool, run the following command:
- To clone the
meta-vendor-examplelayer, run the following command: - To build using the KAS configuration for one of the supported boards, run the following command:
Qualcomm Linux 2.0 repo-manifest workflow
A repo-manifest-based workflow is provided for Qualcomm Linux 2.0. The high-level changes in Qualcomm Linux 2.0 are as follows:- A repo is used for syncing meta layers from a manifest.
- The setup environment is used for generating the BitBake configuration. In Qualcomm Linux 2.0, the BitBake configuration is generated based on the
machine.ymlanddistro.ymlconfiguration files. Hence, the setup environment takes these configuration files as input. - BitBake is manually invoked for building images.
Build steps comparison
The following table lists the key differences in build steps between Qualcomm Linux 1.0 and Qualcomm Linux 2.0: Table: Build steps comparison| Step | Qualcomm Linux 1.0 | Qualcomm Linux 2.0 |
|---|---|---|
| Sync (no changes) | Uses repo init -u https://github.com/qualcomm-linux/qcom-manifest -m <manifest-release-tag>.xml && repo sync. | Uses repo init -u https://github.com/qualcomm-linux/qcom-manifest -m <manifest-release-tag>.xml && repo sync. |
| Configure | Uses MACHINE=qcs9100-ride-sx DISTRO=qcom-distro source setup-environment. | Uses source setup-environment --machine meta-qcom/ci/qcs9100-ride-sx.yml --distro meta-qcom/ci/qcom-distro.yml. |
| BitBake build (no changes) | Uses the BitBake <recipe>. | Uses the BitBake <recipe>. |
Changes in overrides
Qualcomm Linux 1.0 supports theqcom-base-bsp and qcom-custom-bsp overrides. It uses these overrides to do the following:
- Use separate kernel trees for
qcom-base-bspandqcom-custom-bsp - Include different sets of recipe packages in the
rootfsimage - Include different sets of device tree binaries in
DTB.bin
qcom-multimedia-image | qcom-multimedia-proprietary-image |
|---|---|
The qcom-multimedia-image recipe adds upstream packages to the rootfs generated. | The qcom-multimedia-proprietary-image recipe adds Qualcomm value-added packages to the rootfs generated. |
- Same kernel tree and kernel binary is used when
qcom-multimedia-imageandqcom-multimedia-proprietary-imageare built. - Same device tree binary and device tree binary overlay are packed in the flattened image tree (FIT) image generated when
qcom-multimedia-imageandqcom-multimedia-proprietary-imageare built. Note
If you’re using theqcom-base-bspandqcom-custom-bspoverrides, discontinue using them in Qualcomm Linux 2.0. To migrate changes that use overrides in Qualcomm Linux 1.0, modify the implementation to use overrides, based on the following examples: Table: Overrides migration examplesAspect Override in Qualcomm Linux 1.0 Qualcomm Linux 2.0 migration example MACHINEOVERRIDE qcom-base-bsp For any conditional inclusion that uses qcom-base-bsp in Qualcomm Linux 1.0 meta-qcom-hwe, it’s moved to qcom-multimedia-image in Qualcomm Linux 2.0. For example, in Qualcomm Linux 1.0, the meta-qcom-hwe/recipes-products/packagegroups/packagegroup-qcom-camera.bb override is used as follows:
RDEPENDS:$:qcom-base-bsp:qcm6490= “libcamera v4l-utils media-ctl yavta”
In Qualcomm Linux 2.0, it’s moved to recipes-products/packagegroups/packagegroup-qcom-test-pkgs.bb, which is included in recipes-products/images/qcom-multimedia-image.bb. That is, the image that includes upstream components.MACHINEOVERRIDE qcom-custom-bsp For any conditional inclusion that uses qcom-custom-bsp in Qualcomm Linux 1.0 meta-qcom-hwe, it’s moved to qcom-multimedia-proprietary-image in Qualcomm Linux 2.0. For example, in Qualcomm Linux 1.0, the meta-qcom-hwe/recipes-products/packagegroups/packagegroup-qcom-camera.bb override is used as follows:
RDEPENDS:$:qcom-custom-bsp:qcs9100 = “camxcommon camxlib camx chicdk cameradlkm”
In Qualcomm Linux 2.0, it’s moved to recipes-products/images/qcom-multimedia-proprietary-image.bb. That is, the image that includes Qualcomm software components.DISTROOVERRIDE qcom-custom-distro For any conditional inclusion that uses qcom-custom-distro in Qualcomm Linux 1.0 meta-qcom-distro, it’s moved to qcom-multimedia-proprietary-image in Qualcomm Linux 2.0. For example, in Qualcomm Linux 1.0, the meta-qcom-distro/recipes-products/packagegroups/packagegroup-qcom-multimedia.bb override is used as follows:
RDEPENDS:$:append:qcom-custom-distro = ”\
packagegroup-qcom-fastcv \
packagegroup-qcom-graphics \
packagegroup-qcom-iot-base-utils \
packagegroup-qcom-video \
“
In Qualcomm Linux 2.0, it’s moved to recipes-products/images/qcom-multimedia-proprietary-image.bb:
CORE_IMAGE_BASE_INSTALL += ” \
camx-dlkm \
camx-kodiak \
camx-lemans \
camx-nhx \
camx-talos \
iris-video-dlkm \
kgsl-dlkm \
libdiag-bin \
qcom-adreno \
qcom-sensors-binaries \
“
Changes in machine configuration
The following table lists the changes in the machine configuration names between Qualcomm Linux 1.0 and Qualcomm Linux 2.0: Table: Machine configuration updates| Machine name in Qualcomm Linux 1.0 | Machine name in Qualcomm Linux 2.0 |
|---|---|
qcs8275-iq-8275-evk.conf | iq-8275-evk.conf |
qcs9075-iq-9075-evk.conf | iq-9075-evk.conf |
qcs6490-rb3gen2-core-kit.conf | rb3gen2-core-kit.conf |
Changes in BitBake variables
The following table lists the BitBake variables used in the machine configuration for Qualcomm Linux 1.0 and Qualcomm Linux 2.0:| Table: BitBake variables in Qualcomm Linux 1.0 and Qualcomm Linux 2.0 | |
|---|---|
| Qualcomm Linux 1.0 BitBake variables | Qualcomm Linux 2.0 BitBake variables |
Uses KERNEL_DEVICETREE with the qcom-base-bsp and qcom-custom-bsp overrides. | Uses KERNEL_DEVICETREE for upstream device trees (DTs), and LINUX_QCOM_KERNEL_DEVICETREE for DTs that aren’t upstreamed and exist only in the linux-qcom kernels. |
Uses KERNEL_TECH_DTBOS to overlay the device tree blob for overlay (DTBO) on the kernel device tree at build time. | The build-time overlays support isn’t required anymore as Qualcomm Linux 2.0 supports multi-DTB FIT images. For more information, see Qualcomm Linux Yocto Guide. |
Uses DBG_CMDLINE and KERNEL_CMDLINE_EXTRA in the inc file, which is added in the machine file. | Uses machine-specific kernel command-line. |
Adds modules using MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS. | Adds modules using packagegroup-qcom-boot-essential. |
Changes in Linux recipes
Qualcomm Linux 2.0 supports a single kernel recipe and its corresponding real-time variant. The following table lists the Linux kernel recipe changes between Qualcomm Linux 1.0 and Qualcomm Linux 2.0: Table: Linux kernel recipe changes| Linux recipe in Qualcomm Linux 1.0 | Linux recipe in Qualcomm Linux 2.0 |
|---|---|
meta-qcom-hwe/recipes-kernel/linux/linux-qcom-base_6.6.bb | meta-qcom/recipes-kernel/linux/linux-qcom_6.18.bb |
meta-qcom-hwe/recipes-kernel/linux/linux-qcom-custom_6.6.bb | meta-qcom/recipes-kernel/linux/linux-qcom_6.18.bb |
meta-qcom-realtime/recipes-kernel/linux/linux-qcom-base-rt_6.6.bb | meta-qcom/recipes-kernel/linux/linux-qcom-rt_6.18.bb |
meta-qcom-realtime/recipes-kernel/linux/linux-qcom-custom-rt_6.6.bb | meta-qcom/recipes-kernel/linux/linux-qcom-rt_6.18.bb |
qcom-multimedia-imageprovides arootfswith the upstream stack.qcom-multimedia-proprietary-imageprovides arootfswith the Qualcomm-maintained components.
Changes in image recipes
Themeta-qcom-distro layer supports all the image recipes used in Qualcomm Linux. Qualcomm Linux 2.0 introduces changes to how the image recipes are managed and organized, and no longer uses BitBake overrides in image recipes.
The following table lists the image recipes defined in the meta-qcom-distro open-embedded layer. The naming convention of these image recipes and their evolution from Qualcomm Linux 1.0 has changed. For example:
- The image recipes no longer use
DISTROOVERRIDESto distinguish between package inclusion in the image. qcom-multimedia-proprietary-imageadds Qualcomm software components.
| Table: Changes in image recipes | ||
|---|---|---|
| Qualcomm Linux Version | Image recipes | Code snippet |
| 1 | qcom-multimedia-image with use of bitbake OVERRIDES qcom-custom-distro | The following example shows the use of override in packagegroup-qcom-multimedia, which is included in qcom-multimedia-image: RDEPENDS:$ = ”\ gstreamer1.0 \ gstreamer1.0-plugins-base \ gstreamer1.0-plugins-good \ gstreamer1.0-plugins-bad \ gstreamer1.0-rtsp-server \ tensorflow-lite \ RDEPENDS:$:append:qcom-custom-distro = ”\ packagegroup-qcom-fastcv \ packagegroup-qcom-graphics \ packagegroup-qcom-iot-base-utils \ packagegroup-qcom-video \ “ Here, the qcom-custom-distro override is used to conditionally include packagegroups. When you run BitBake <image> in a Qualcomm Linux 1.0 workspace, depending on whether the build environment is set up with custom or base override, the rootfs content generated by qcom-multimedia-image changes. |
| 2 | qcom-multimedia-image and qcom-multimedia-proprietary-image | If the qcom-multimedia-proprietary-image image is inspected, it requires qcom-multimedia-image and adds Qualcomm-maintained technology stacks on it. require qcom-multimedia-image.bb CORE_IMAGE_BASE_INSTALL += ” \ camx-dlkm \ camx-kodiak \ camx-lemans \ camx-nhx \ camx-talos \ iris-video-dlkm \ kgsl-dlkm \ libdiag-bin \ qcom-adreno \ qcom-sensors-binaries \ “ The separated organization of image recipes shows how Qualcomm-maintained components are added to the qcom-multimedia-proprietary-image image. |
Changes in reference distro configurations
Qualcomm Linux 2.0 introduces changes in reference distro configurations. In Qualcomm Linux 1.0, the reference distros forqcom-wayland are in the distro folder.
The following table lists the reference distros in Qualcomm Linux 2.0:
Table: Qualcomm Linux 2.0 reference distros
| Qualcomm Linux 2.0 reference distro | Description |
|---|---|
qcom-distro-sota | Enables the OSTree framework for OS updates. If you’re using qcom-wayland in Qualcomm Linux 1.0, use this distro in Qualcomm Linux 2.0. |
qcom-distro-catchall | Enables the OSTree framework for OS updates and SELinux. If you’re using qcom-wayland with SELinux enabled in Qualcomm Linux 1.0, use this distro in Qualcomm Linux 2.0. |
qcom-distro-selinux | Enables the SELinux framework for security; doesn’t enable OSTree. |
qcom-distro | Enables package management on device; the default packaging style enabled in RPM Package Manager (RPM) with DNF front-end. |

