Versions and patches for building the BeagleY-AI boot chain and kernel in BQ2. They were
taken from upstream armbian/build at 9037a63 (2026-10-10):
config/boards/beagley-ai.conf, config/sources/families/k3-beagle.conf and
config/sources/families/include/k3_common.inc, BRANCH=vendor. Armbian is only a reference
here; nothing below needs its build framework.
Sources
| Component | Repository | Ref | Notes |
|---|---|---|---|
| Linux | https://github.com/beagleboard/linux | v6.12.49-ti-arm64-r56 |
DT ti/k3-am67a-beagley-ai.dtb, console ttyS2 |
| U-Boot | https://github.com/beagleboard/u-boot | v2025.07-am6232-pocketbeagle2 |
Armbian carries no U-Boot patches for this board |
| TF-A | https://github.com/TexasInstruments/arm-trusted-firmware | 11.00.09 |
PLAT=k3 TARGET_BOARD=lite → bl31.bin |
| OP-TEE | https://github.com/OP-TEE/optee_os | 4.6.0 |
PLATFORM=k3-am62x CFG_ARM64_core=y → out/arm-plat-k3/core/tee-pager_v2.bin |
| ti-linux-firmware | https://github.com/TexasInstruments/ti-linux-firmware | 11.02.15 |
SYSFW/DM; this version is needed for the EdgeAI 11.02 IPC ABI on J722S |
| CC33xx Wi-Fi firmware | https://repos.rcn-ee.com/debian-arm64/pool/main/b/bbb.io-cc33xx-1.0.2.10-firmware/ | 1.20260901.0 (source tarball, sha256 pinned) |
firmware 1.7.0.316 (SDK 1.0.2.10), what the kernel's cc33xx driver expects: cc33xx-conf.bin is 1282 bytes. ti-linux-firmware's 2024 files (1353-byte conf) fail with "FW download failed" |
| wireless-regdb | https://mirrors.edge.kernel.org/pub/software/network/wireless-regdb/ | 2026.09.03 (tarball, sha256 pinned) |
regulatory.db and regulatory.db.p7s in /lib/firmware; the kernel checks the signature with its built-in keys (wens.hex). There is no cc33xx-nvs.bin: the cc33xx driver reads only a MAC address from it, and without it uses the chip's own from its EFUSE (TI's 10:ca:bf block on the board tested). BeagleBoard.org's package ships none either |
| libnl | https://github.com/thom311/libnl/releases | 3.11.0 (tarball, sha256 pinned) |
libnl-3 and libnl-genl-3 only, static; no flex or bison needed for those |
| wpa_supplicant | https://w1.fi/releases | 2.11 (tarball, sha256 pinned) |
wpa_supplicant.config: nl80211, internal TLS, WPA2-PSK, static |
U-Boot build (two passes)
- R5 SPL (32-bit Arm,
ARCH=arm):am67a_beagley_ai_r5_defconfig, withBINMAN_INDIRS=<ti-linux-firmware>. Outputtiboot3-j722s-hs-fs-evm.bin→tiboot3.bin. - A53 (
ARCH=arm64):am67a_beagley_ai_a53_defconfig, withBL31=bl31.bin,TEE=tee-pager_v2.binandBINMAN_INDIRS=<ti-linux-firmware>. Outputstispl.binandu-boot.img.
All three files go on the FAT boot partition, which is the first partition (type 0x0e, boot flag set).
binman: bin/cleave-binman (Crystal, from this repository) takes the place of U-Boot's
Python binman. Link it to tools/binman/binman before each pass. See
docs/cleave-binman.md.
Kernel patches (Armbian patch/kernel/archive/k3-beagle-6.12/)
0001-arm64-dts-ti-k3-am67a-beagley-ai-include-armbian-supplement.patch: adds an#includeofk3-am67a-beagley-ai-armbian.dtsi(USB and PCIe wiring).0002-arm64-dts-ti-build-BeagleY-AI-EdgeAI-DTBs.patch: builds the EdgeAI and IMX219 overlays.0001-libbpf-const-correctness-for-newer-glibc.patch: glibc only, so likely not needed on musl.dt/files copied intoarch/arm64/boot/dts/ti/:k3-am67a-beagley-ai-armbian.dtsi,k3-j722s-rtos-memory-map.dtsi,k3-j722s-edgeai-apps.dtso,k3-am67a-beagley-ai-csi0-imx219.dtso.
Config: Armbian's config/kernel/linux-k3-beagle-vendor.config (1092 lines), plus
kernel-jkembedded-audio.config from this directory.
Toolchain notes for BQ2 (LLVM/Clang, musl)
- Kernel:
make LLVM=1. It also needs flex, bison, bc (busybox has bc), and libressl headers for module signing and certificates. - U-Boot:
CC=clang. The R5 pass targetsarmv7r; U-Boot provides its own libgcc replacement (USE_PRIVATE_LIBGCC). - TF-A:
CC=clang. - OP-TEE:
COMPILER=clang. - dtc: the in-tree
scripts/dtcis enough.
Copied into this repository
armbian/: from upstream Armbian9037a63.linux-k3-beagle-vendor.config: the kernel config.dt/: the board supplements, copied intoarch/arm64/boot/dts/ti.
patches/linux/0002-…armbian-supplement.patch: Armbian's0001. Armbian's0002(the composed EdgeAI DTBs) is left out because it needsfdtoverlay; the overlays are built on their own.patches/tf-a/0001-…sec_proxy…andpatches/u-boot/0004-…k3-sec-proxy…: ours. Both secure proxy drivers copy the packed TI-SCI messages as words; with clang the buffer is not word aligned, and with alignment checking on, the first message faults. In U-Boot that is the R5 SPL, before its console, so the board prints nothing.patches/u-boot/0005-…debug-UART-checkpoints…: ours, for bring-up. WithCONFIG_DEBUG_UART(set for the R5 build), the R5 SPL prints a line on the debug header at each step before its console.patches/u-boot/0006-…and0007-…binman-symbols…: ours. The R5 (mach-omap2) and A53 (armv8) SPL linker scripts leave.binman_symas an orphan; ld.lld puts it where objcopy drops it, so the appended DTB lands 12 or 24 bytes early ("Missing DTB").patches/u-boot/0008-…initcall…: ours, for bring-up. WithCONFIG_DEBUG_UART(set for the A53 build too), U-Boot names each initcall on the debug header before running it.patches/u-boot/0009-…bss-overlay…: ours. ld.lld places the arm64.bss (OVERLAY)at address 0, so U-Boot proper hangs after relocating; NOLOAD with--no-check-sectionsplaces it over.rela.dynas GNU ld does.patches/llvm-project/: BQ2's patches for building LLVM 18.1.7 in the seed, from bootstrap-qcow2d539ac7c21.
Building
tools/build-beagley-ai-bsp.sh job WORK, on an aarch64 host with bubblewrap:
- fetches and patches the sources above, at pinned commits;
- unpacks the BQ2 seed;
- builds everything inside it: LLVM with ARM, the cleave tools, TF-A, OP-TEE, U-Boot R5 and
A53, Linux (with
kernel-wifi.config, the CC33xx SDIO driver), and the Wi-Fi userspace.
The results go to WORK/out: boot/ (tiboot3.bin, tispl.bin, u-boot.img, Image,
dtb/ti/), modules.tar.gz, and wifi/, a root layer with wpa_supplicant, wpa_cli,
the CC33xx firmware and the signed regulatory database.