Skip to main content
The standalone workflow lets you compile, test, and deploy kernel changes without building the full Yocto image. All required cross-compilation and image-packaging tools are bundled in the kmake-image Docker container.

Limitations and caveats

The standalone workflow builds and packages the kernel and modules only. It does not produce a root file system. To build or modify out-of-tree kernel modules that depend on the full Yocto BSP, use the Yocto-based workflow instead.
  • Toolchain: the kmake-image Docker image provides an aarch64 cross-toolchain, systemd ukify, and image-packaging scripts. No host toolchain installation is needed.
  • DTB packaging: when building standalone, you must package the DTB manually using a static ITS configuration from the qcom-dtb-metadata repository. The Yocto build handles this automatically via meta-qcom.
  • Source revision: to match the exact source used in a release build, check the SRCREV field in meta-qcom/recipes-kernel/linux/linux-qcom_6.18.bb.

Access kernel sources

Clone the kernel repository directly:
Table: Kernel branches

Set up the Docker toolchain

Clone and build the kmake-image container:
Set up shell aliases for convenience. Add these to your shell profile to persist across sessions:

Gather build artifacts

Create an artifacts/ directory to hold the ramdisk, boot binaries, and DTB metadata required to assemble the final images:
Get the initramfs ramdisk
Get systemd-boot binaries
Get DTB metadata When building standalone, DTBs must be packaged manually using a static ITS configuration. Clone the qcom-dtb-metadata repository to get the required qcom-metadata.dts and qcom-next-fitimage.its files:

Build the kernel and modules

Configure and build the kernel using the standard Qualcomm® configuration fragments, then install modules into a staging directory:
Package the built kernel modules (DLKMs) into the ramdisk:

Package the boot images

Generate efi.bin (ESP partition) The efi.bin image contains systemd-boot, the kernel (packaged as a UKI type-2 image), and the initramfs:
Generate dtb.bin (DTB partition) Build a FIT-based dtb.bin for all targets that support device tree:
Both efi.bin and dtb.bin are placed in the images/ directory and are ready to flash.

Kernel Image Build Script

Above build and package steps are wrapped under a build.sh script which is part of docker, to automate building and packaging a bootable kernel image into efi.bin, dtb.bin, and boot.img. To use this alternative build.sh script run following:
  • The —dtb argument is mandatory. It specifies the Device Tree Blob to be packed into the kernel image. Above command shows using qcs6490-rb3gen2.dtb as an example.
  • Initialize CMDLINE to set your kernel cmdline parameter else a default generic is used.

Flash and boot

Put the device into fastboot mode, then flash both images:
After the device reboots, verify the running kernel version as described in Install & boot the kernel.