Releases: Rabs9/radxa-cubie-a7a-kernel
Release list
Package update: linux-headers 6.6.98-6 (no image change)
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/includeis now shipped (~330 KB).install-extmod-buildomits it,
and modpost'sfile2alias.ccannot 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 offixdepandmodpost, and if either is not aarch64 it rebuilds both,
generatesscripts/module.ldsfrom 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.debYou 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.debSigned 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.symversis not shipped, so passKBUILD_MODPOST_WARN=1. This kernel
hasCONFIG_MODVERSIONSoff, so module loading is unaffected.- The Allwinner BSP is part of this tree. Out-of-tree builds that reach BSP
Kconfig must passBSP_TOP=bsp/.
Flash this - Debian 13 images for the Cubie A7A (2026-08-25)
Want to flash an SD card? You are in the right place. Download
a7a-standard-20260825.img.xzand write it with Etcher, Raspberry Pi Imager ordd— they read.xzdirectly, 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=progressLogin 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 SHA256SUMSNot 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)
Looking for something to flash to an SD card? This is not it. These are
.debpackages for a board that already runs Debian 13. Go to the images release for the flashable.img.xzfiles.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.debEach 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.debThe 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 SHA256SUMSNot 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.