Skip to main content
Targeted diagnosis steps and fixes for the most common failures encountered when working with the Qualcomm® Linux kernel.

Boot failures

Kernel does not boot with a black screen or no serial output

Check first:
  1. Confirm the serial console is configured (console=ttyMSM0,115200n8 in the kernel command line).
  2. Verify efi.bin was flashed successfully by re-running fastboot flash efi efi.bin and check for OKAY responses.
  3. Erase RPMB area in case its persistent state carrying EFI variables is corrupted or misaligned:
  1. Add earlycon to the kernel command line to get output before the UART driver initialises.
See Kernel logging for serial console setup.

Kernel panic at boot

A kernel panic during boot produces a call stack on the serial console. Capture it and identify the faulting function:
Common causes on Qualcomm Linux:

Device tree issues

DTB authentication failure

UEFI firmware authenticates the DTB before passing it to the kernel. An authentication failure prevents the kernel from receiving any device tree. Log signature:
Fix: Flash the correctly signed dtb.bin that matches the current signing key provisioned on the device. Ensure efi.bin and dtb.bin are from the same build.

DTB not found

Fix:
  1. Verify the DTB is included in the packaged dtb.bin: if using legacy concatenated dtb packaging:
    if using FIT-based packaging:
  2. Check that the board DTS file is listed in KERNEL_DEVICETREE in the Yocto machine configuration.
  3. Reflash dtb.bin:

Verify which DTB was loaded at runtime

After a successful boot, confirm the correct device tree was loaded:

DTB identification during boot

Refer common dtb issues for more information on device tree identification.

Module load failures

Invalid module format showing vermagic mismatch

Cause: The module was built against a different kernel version, configuration, or compiler than the running kernel. The vermagic string embedded in the .ko file does not match. Diagnose:
Fix: Rebuild the module against the exact kernel source tree (same KERNEL_SRC, same defconfig and fragments) that produced the running kernel image. If using Yocto, rebuild with bitbake qcom-multimedia-image to keep the module and kernel in sync.

missing .ko file

Diagnose:
Fix: Ensure the module is built (obj-m += my_driver.o in the Makefile) and installed (make modules_install or via Yocto module class).

Module not found and missing from modules.dep

Fix: Run depmod to rebuild the module dependency map after installing new modules:

Module loads but does not work

Check dmesg immediately after insmod for probe errors:
Common patterns: For deferred probe, check which devices are still pending:

Serial console not working

If there is no output on the serial console after flashing a new kernel:
  1. Verify Kconfig:
  2. Verify kernel command line:
  3. Get early boot messages: Add earlycon to the kernel command line. This enables output before the UART driver is fully initialised.
  4. Check the cable and baud rate: Confirm 115200 baud, 8N1, no hardware flow control on both the device and the host terminal.

Remoteproc failures

Firmware load failure

Fix: Ensure all required firmware files are present in /lib/firmware/qcom/<SoC>/:

Capture logs on subsystem crash

To prevent the remoteproc driver from automatically recovering a crashed subsystem (which clears the crash logs), disable recovery before reproducing the crash:
Sample crash log:
Enable coredump to capture a memory snapshot for offline analysis:
Transfer the .elf file to a host and analyse with the Qualcomm Crash Analysis Portal (QCAP). For more detail see Configure the remoteprocessor subsystems.