Skip to content

Releases: Rabs9/radxa-cubie-a7a-kernel

Package update: linux-headers 6.6.98-6 (no image change)

Choose a tag to compare

@Rabs9 Rabs9 released this 06 Sep 02:50

A single-package update. No image change, no kernel change, no device tree
change — nothing here needs a reflash.


What was wrong

linux-headers-6.6.98-a7a could not build a single module.

The kernel is cross-compiled on an x86-64 host, and install-extmod-build copies
that host's scripts/ directory into the package. So fixdep, modpost and
kallsyms shipped as x86-64 binaries inside an arm64 package. On the board
every out-of-tree build — DKMS included — died immediately:

/bin/sh: 1: scripts/basic/fixdep: Exec format error
make[2]: *** [scripts/Makefile.build:243: …/maxio.o] Error 126

That is the one job the headers package exists to do, so in practice it did not
work at all. It affects every release up to and including 6.6.98-5.

What changed

The board can rebuild those tools for itself in seconds. It just needed one
missing piece and something to run it.

  • tools/include is now shipped (~330 KB). install-extmod-build omits it,
    and modpost's file2alias.c cannot compile without it — which is why the
    problem was not fixable on the board before.
  • The postinst rebuilds the host tools on install. It reads the ELF machine
    field of fixdep and modpost, and if either is not aarch64 it rebuilds both,
    generates scripts/module.lds from the shipped .S, and writes
    scripts/mod/elfconfig.h.

The package deliberately still ships the cross-built tools and repairs them at
install time, rather than carrying hand-built binaries. Each machine then
produces its own.

It never fails an install. With no compiler present it prints what to run and
exits cleanly, so the headers remain installable on a minimal image:

linux-headers-6.6.98-a7a: the shipped build tools are for the build host's
  architecture and could not be rebuilt - gcc is not installed.
  Run: apt install build-essential   then: dpkg-reconfigure linux-headers-6.6.98-a7a

Installing

sudo dpkg -i linux-headers-6.6.98-a7a_6.6.98-6_arm64.deb

You should see it repair itself as it configures:

linux-headers-6.6.98-a7a: rebuilding kbuild host tools for aarch64
  scripts/basic/fixdep: ok
  scripts/mod/modpost: ok

Verifying the download

sha256sum linux-headers-6.6.98-a7a_6.6.98-6_arm64.deb
# bd11938755be9acdd71bf3c87ce1e7d37279b5450602fa76fff5279ad4da9f81

gpg --verify linux-headers-6.6.98-a7a_6.6.98-6_arm64.deb.asc \
             linux-headers-6.6.98-a7a_6.6.98-6_arm64.deb

Signed with ed25519/EF8243C0E3ADC6EA, fingerprint
C9E8 FC3E 6B94 6616 B0BB B09B EF82 43C0 E3AD C6EA.

How this was tested

On hardware, following the exact path a user takes:

step result
install the old 6.6.98-5 fixdep/modpost x86-64, no tools/include
build a module Exec format error, no .ko
dpkg -i the new 6.6.98-6 postinst reports both tools ok
build the same module maxio.ko, 83120 bytes, vermagic 6.6.98+ SMP preempt mod_unload aarch64
insmod it loads into the running kernel

Running the postinst a second time is a no-op.

Still worth knowing

Two things are unchanged and already documented in the package description:

  • Module.symvers is not shipped, so pass KBUILD_MODPOST_WARN=1. This kernel
    has CONFIG_MODVERSIONS off, so module loading is unaffected.
  • The Allwinner BSP is part of this tree. Out-of-tree builds that reach BSP
    Kconfig must pass BSP_TOP=bsp/.

Flash this - Debian 13 images for the Cubie A7A (2026-08-25)

Choose a tag to compare

@Rabs9 Rabs9 released this 25 Aug 18:31

Want to flash an SD card? You are in the right place. Download a7a-standard-20260825.img.xz and write it with Etcher, Raspberry Pi Imager or dd — they read .xz directly, no need to decompress first.

Already running Debian 13 and do not want to reflash? You want the packages release instead.

Debian 13 for the Radxa Cubie A7A, on a custom Linux 6.6.98 kernel. Two images, both a single file — no split parts to reassemble — and both grow to fill your card on first boot.

Want the story rather than the specs? A year ago this board shipped with Debian 11 and a device tree that did not match its own hardware. Getting from there to here took a lot of tireless nights, and a few corrupted images that cost months of work. docs/THE-JOURNEY.md explains what the RAM, the GPU and the boot chain each turned out to be.

Before you flash: you need active cooling

These images run the board overclocked out of the box. A 60-second all-core load reaches 76 °C and is still climbing, against an 80 °C throttle point — measured with a heatsink and PWM fan already fitted and running.

Without cooling you will hit thermal throttling quickly, and sustained load on a bare board risks damaging it. Fit a heatsink and fan before you flash this.

Which image

a7a-standard A76 3.0 GHz · A55 2.8 GHz · DSU 1352 MHz · RAM 2040 MHz
a7a-maximum the same, plus RAM 2136 MHz and the a7a-clock control panel

Start with standard. Both run the same kernel and the same fixes; maximum pushes memory harder.

xz -d a7a-standard-20260825.img.xz
sudo dd if=a7a-standard-20260825.img of=/dev/sdX bs=4M conv=fsync status=progress

Login is radxa / radxa, and you are required to change it on first login.

First boot takes longer than later ones — the filesystem expands to fill the card, SSH host keys are generated for your board, and a fresh machine-id is created.

Gigabit ethernet is fixed

Every earlier image, including Radxa's official ones, sets the RGMII transmit delay to 12, outside the window the PHY accepts. Frames above roughly 250 bytes get corrupted.

It does not look like a network fault: the link reports 1000/full with zero tx_errors, pings reply, receive is perfect — but SSH hangs after key exchange and apt stalls. It reads like a bad cable and reproduces across cables.

The corruption is data-dependent, so a test payload of constant bytes passes while real traffic fails. Test with random data or you will conclude a broken board is healthy.

5 GHz wifi works out of the box

regulatory.db is compiled into the kernel rather than depending on a userspace package loading in the right order. Verified on hardware: country code applied, associated on channel 44 (5220 MHz), 80 MHz wide, Wi-Fi 6 rates — 360 Mbit/s rx.

Board identity

These images ship with no SSH host keys and a blank machine-id; your board generates its own on first boot. An image containing host keys would give every board flashed from it the same SSH identity.

Expect the "authenticity of host can't be established" prompt on first connection — that is the mechanism working. If you have connected to that address before, run ssh-keygen -R <ip>.

Also included

sd-firmware-region.img — the repair kit for cards bricked by pre-2026-08-10 images. See boot-fix/. It fixes a card in place, no re-download.

Verify

sha256sum -c SHA256SUMS

Not GPG-signed yet — verify by SHA256 for now.

Disclaimer

Provided as is, with no warranty of any kind. These images overclock your hardware beyond manufacturer specification, which can cause instability, data loss, or permanent damage, and will likely void your warranty. Everything here is validated on one board; yours may behave differently. This project is not affiliated with Radxa or Allwinner.

I accept no responsibility for any damage, data loss, or other harm. If you would rather not take that on, use Radxa's official images — I would rather you had a working board than a bricked one.

Full notes

docs/RELEASE-2026-08-25.md · benchmarks · hardware notes

Suggestions and requests are welcome — open an issue. Not just bug reports; if there is something you want this board to do that it does not do yet, say so.

Already running Debian 13? Packages only (2026-08-25)

Choose a tag to compare

@Rabs9 Rabs9 released this 25 Aug 18:31

Looking for something to flash to an SD card? This is not it. These are .deb packages for a board that already runs Debian 13. Go to the images release for the flashable .img.xz files.

Use these if you already have Debian 13 on your A7A and want the kernel, the ethernet fix and the tooling without reflashing.
The same system as the images release, as Debian packages — for anyone who already has Debian 13 running on their A7A and would rather not reflash.

The easy way — one package

Two bundles, matching the two images. They conflict with each other by design; pick one.

# more headroom, less margin — adds RAM 2136, DSU 1352, and a7a-clock
sudo apt install ./a7a-maximum_20260824_arm64.deb

# or the conservative one
sudo apt install ./a7a-standard_20260824_arm64.deb

Each bundle Provides and Replaces every individual package, so switching between them is one apt install.

Use apt install ./file.deb rather than dpkg -i — dependencies (python3-pyqt6, iw, network-manager) come from Debian and dpkg will not fetch them for you.

Reboot after installing. The kernel, device tree and boot entry all change.

Just the ethernet fix

If you only want gigabit ethernet working and nothing else:

sudo apt install ./linux-dtb-6.6.98-a7a_6.6.98-5_arm64.deb

The shipped device trees set the RGMII transmit delay to 12, outside the window the PHY accepts, so frames above ~250 bytes get corrupted — SSH hangs after key exchange, apt stalls, while pings reply and the link reports 1000/full with no errors. Corrected value is 9.

Individual packages

package what it does
linux-image-6.6.98-a7a the kernel
linux-dtb-6.6.98-a7a device trees — ethernet fix, GPU clock ladder
linux-headers-6.6.98-a7a headers for out-of-tree modules
a7a-board-config suspend disabled, core dumps discarded, IRQ affinity, first-boot identity reset
a7a-desktop-config display configuration and compositor workarounds
a7a-llm llama.cpp built natively, plus CLI and GUI
a7a-clock clock control panel — CPU, GPU, DSU, RAM, NPU, wifi band
a7a-oc-profile the maximum overclock profile
a7a-game SuperTuxKart on the GPU

Games

a7a-game does not bundle a game. It depends on Debian's supertuxkart and ships only the KMS launcher that gets it onto the GPU.

Hardware OpenGL ES on the A733 is reachable only outside X — the desktop runs AccelMethod "none" deliberately, because glamor on the PowerVR DDK produces cursor trails. So anything drawn through X is software-rendered. a7a-game switches to a KMS/DRM session, runs the game on the GPU, and hands the desktop back.

Cooling and risk

These packages overclock CPU, GPU, memory and interconnect beyond manufacturer specification. A 60-second all-core load reaches 76 °C against an 80 °C throttle point with a fan fitted. Active cooling is required, not optional.

Verify

sha256sum -c SHA256SUMS

Not GPG-signed yet — verify by SHA256 for now.

Disclaimer

Provided as is, with no warranty of any kind. Overclocking can cause instability, data loss, or permanent damage, and will likely void your warranty. Validated on one board; yours may behave differently. Not affiliated with Radxa or Allwinner.

I accept no responsibility for any damage, data loss, or other harm.

Boot chain

These packages deliberately do not touch /boot/extlinux/extlinux.conf, which is marked immutable — u-boot-menu regenerating it on kernel updates is what broke earlier systems. The apt pins in /etc/apt/preferences.d/99-a7a-custom-kernel block stock linux-image-*, u-boot-menu and flash-kernel.


Full documentation: docs/PACKAGES.md

Suggestions and requests are welcome — open an issue.