🛠 Construire sa propre image Armbian pour la PINE A64 (armbian/build)
Objetivos
Deja de depender de imágenes binarias: compila tú mismo el sistema de la PINE A64 con el framework armbian/build, cuya configuración de placa pine64 se mantiene siempre activa (family sun50iw1, KERNEL_TARGET="current,edge,legacy"). Verás la cadena de arranque completa específica de Allwinner — BROM del SoC → U-Boot (mainline, defconfig pine64_plus_defconfig) → kernel + DTB, todo leído desde la microSD (no hay SPI NOR en esta placa) — y el firmware ARM Trusted Firmware reemplazado aquí por CRUST (a64_defconfig), el port mainline del BSP ARM Trusted de Allwinner.
Hardware
- 1 × PC x86-64 con Linux (o Docker, modo recomendado por Armbian) con ~35 GB libres
- 1 × PINE A64/A64+ + microSD para probar la imagen generada
- Consola serie EXP (115200 8N1) para observar el U-Boot compilado por ti
- Red (el framework clona kernel, U-Boot, CRUST, paquetes Debian)
Código completo
# Cloner le framework de build Armbian
git clone --depth=1 https://github.com/armbian/build
cd build
# Compiler une image CLI Debian Bookworm, noyau mainline LTS (BRANCH=current)
# Le framework lit config/boards/pine64.conf :
# BOOTCONFIG=pine64_plus_defconfig (U-Boot mainline)
# CRUSTCONFIG=a64_defconfig (ARM Trusted Firmware pour A64)
# KERNEL_TARGET="current,edge,legacy"
./compile.sh BOARD=pine64 BRANCH=current DISTRIBUTION=bookworm \
BUILD_DESKTOP=no KERNEL_ONLY=no KERNEL_CONFIGURE=no
# Image produite :
ls -lh output/images/ # Armbian_*_Bookworm_current_pine64.img.xz
# Graver et booter (console EXP 115200 8N1 pour voir le U-Boot custom) :
xzcat output/images/Armbian_*_Bookworm_current_pine64.img.xz | sudo dd of=/dev/sdX bs=4M
sync
Verificación esperada
Al final de la compilación, output/images/ contiene la imagen .img.xz con el kernel current, U-Boot u-boot-sunxi-with-spl.bin y el DTB sun50i-a64-pine64*.dtb. En la consola serie, aparece el banner de U-Boot y luego el kernel arranca en serial0:115200n8 (el chosen stdout-path del device tree mainline). uname -a en la placa confirma la versión del kernel que acabas de compilar — y ahora puedes parchear el kernel o el DTS, recompilar y ver tu cambio en el siguiente arranque.
Errores frecuentes
- Compilar con el defconfig de U-Boot incorrecto: es
pine64_plus_defconfig(utilizado incluso para la placa base en la configuración de Armbian) — otro defconfig sun50i genera un bootloader que no se comunica con esta placa. - Confundir las ramas del kernel:
current/edge= mainline (recomendado, la wiki oficial indica que la mayoría de las distros de la placa funcionan con mainline);legacy= el antiguo BSP 3.10 «lichee» de Allwinner, que ejecutaba Android 5.1 con un kernel de 32 bits en un SoC de 64 bits — a evitar. - Quedarse sin espacio o RAM en el PC anfitrión: la compilación descarga y compila kernel + U-Boot + CRUST + raíz Debian; prevé suficiente espacio y ancho de banda.
- Sorprenderse de que no haya nada que flashear «dentro de la placa»: la cadena de arranque es BROM → microSD únicamente; no hay SPI NOR, ni recuperación eMMC por defecto — una imagen dañada se repara regrabando la tarjeta (o mediante FEL, consulta el tutorial dedicado).
- Olvidar CRUST: sin el firmware ARM Trusted (aquí CRUST
a64_defconfig), el A64 no arranca el kernel correctamente en modo EL2/EL1 — el framework se encarga de ello, pero una compilación manual de U-Boot + kernel sin ATF es un pozo sin fondo. - Leer los registros a la ligera: el framework también escribe en
output/log/— en caso de fallo de compilación de un componente, ahí es donde se encuentra el error real.
Otros tutoriales para esta placa
- Premier boot d'Armbian sur la PINE A64 (microSD, console série, rootfs)
- PINE A64 ou PINE A64+ ? Le pièg du réseau gigabit dès le premier regard
- Faire clignoter une LED avec libgpiod (numérotation GPIO du A64 : PB0 = 32)
- Benchmark Ethernet iperf3 : mesurer le piège 10/100 vs gigabit
- Lire un capteur I²C (BME280) sur le bus i2c-1 du connecteur Pi-2
- Un serveur maison qui consomme 2,5 W : Docker léger sur la PINE A64
Ejemplos de código para esta placa
clignotante.pyPythonbouton-gpio.pyPythoncapteur-i2c.shBashsurveillance-temperature.shBashcapteur-dht11.pyPythonservo-pwm-sysfs.shBash