Skip to main content
Dragonwing · Qualcomm
Category

Short deck for the post. Keep this aligned with the card summary on the tutorials landing page.

Author or team·Month DD, YYYY·← All posts

Introduction

The IQ9 EVK packs 8 Cortex-A78 cores at 1.9 GHz, 12 GB RAM, and 110 GB storage — powered by a single USB-C cable and easy to carry around. I was short of a local ARM build machine, and the IQ9 EVK was right there. So why not? This blog covers two things:
  1. Local ARM build — using the IQ9 EVK itself as the ARM native build machine for mainline kernel
  2. Mainline kernel debugging — more importantly, the board runs what it builds, making it a self-contained platform for mainline kernel bring-up and debugging

1. Local ARM Build on IQ9 EVK

The IQ9 EVK ships with Qualcomm Linux (QLI 2.0) — a Yocto-based image designed for running prebuilt apps. It’s locked down by design: no apt-get, no opkg.
To get a proper build environment, flash Ubuntu using Flash Using Qualcomm Launcher
Install build dependencies:
Clone and build mainline kernel natively on the board:
With 8 cores and 12 GB RAM, the build runs comfortably on the board itself — no cross-compilation needed.

2. Mainline Kernel Debugging on IQ9 EVK

We only have one IQ9 EVK — no backup machine, no second board. The goal: debug mainline kernel without bricking the board, with a clean fallback to the release Ubuntu image.

What we tried (and why it didn’t work)

a. kexec — the IQ9 watchdog kicks in and forces a reboot before the debug kernel can fully boot. b. fastboot boot — not supported on IQ9 yet, and requires a separate host machine anyway. c. GRUB menu with concatenated kernel + DTB — DTB couldn’t be passed through correctly this way.

What worked: custom GRUB menu entry

Add a new GRUB entry pointing to the debug kernel and DTB:
Deploy the build artifacts:
At boot, when the console shows:
Select *Ubuntu_debug to boot into the mainline kernel.

Verify

Mainline kernel 7.2-rc5 is up and running. The release Ubuntu entry remains intact in GRUB — if anything goes wrong, just reboot and select the default entry. No bricks. 🎉 On the next reboot, GRUB defaults back to the release Ubuntu image automatically — no manual intervention needed. This gives us a safe, repeatable loop:
  • Boot into Ubuntu_debug to test mainline kernel
  • Reboot → back to stable release automatically
  • Iterate, fix, repeat
This workflow makes it straightforward to debug the latest mainline kernel and send patches. For example, one of the first things I caught: reboot doesn’t work on mainline kernel for IQ9 — a quick find, thanks to a clean and low-risk debug environment. Enjoy! 🚀