Ich verwende seit geraumer Zeit Gentoo-Linux für meine Cloud-Dienste auf dem Cubietruck. Zu einer modernen Linux-Distribution passt der antiquierte 3.4er SUNXI-Kernel für den Allwinner A20-Prozessor nicht wirklich. Nach langem probieren ist es mir nun gelungen, den 3.19er (rc2) (Mainline- bzw. Upstream-) Kernel mit aktiviertem Framebuffer zu starten. Der U-Boot in der Version 2015.04 unterstützt sowohl die HDMI-, als auch die VGA-Ausgabe. Den zu nutzenden Ausgang muss man in der boot.cmd spezifizieren.

Am Anfang steht ein moderner Bootloader (U-Boot). Ich habe hierfür den sunxi/next-Bootloader in der Version 2015.01-rc4 verwendet. Auf dem Gentoo-System ist dieser schnell übersetzt.

git clone git://git.denx.de/u-boot.git
cd u-boot
make Cubietruck_defconfig
make

Meine übersetzte Version des U-Boot befindet sich mit der verwendeten Konfigurationsdatei hier: u-boot_2015.01-rc4

Als nächstes folgt die Vorbereitung der SD-Card zum Booten. Mein System liegt auf einer SATA-Festplatte. Wer die Root-Partition lieber auf die SD-Card legt, sollte den entsprechenden Gerätenamen für die Root-Partition anpassen. Als ersten Schritt wird eine Partitionstabelle angelegt:

sfdisk -R /dev/mmcblk0
cat <<EOT | sfdisk --in-order -L -uM /dev/mmcblk0
1,16,83
,,L
EOT

Anschließend wird der U-Boot installiert:

dd if=u-boot-sunxi-with-spl.bin of=/dev/mmcblk0 bs=1024 seek=8

Der Bootloader wird über eine boot.cmd-Datei konfiguriert, die den alten uEnv.txt-Mechanismus ersetzt. Hier ist meine Datei:

ext2load mmc 0 0x46000000 uImage
ext2load mmc 0 0x49000000 sun7i-a20-cubietruck.dtb
setenv bootargs console=tty0 earlyprintk root=/dev/sda1 rootwait panic=10 ${extra}
setenv video-mode sunxi:1280x1024-24@60,monitor=hdmi,hpd=1,edid=1
bootm 0x46000000 - 0x49000000

Diese wird mit der Hilfe des beim U-Boot mitgelieferten mkimage-Programmes in eine binäre Form übersetzt:

tools/mkimage -C none -A arm -T script -d boot.cmd boot.scr

Die boot.scr-Datei wird auf die erste Partition der SD-Card kopiert. Nun kann mit dem Herunterladen und Übersetzen des Kernels begonnen werden. Ich habe den zum Zeitpunkt des Schreibens dieses Artikels aktuellen Mainline-Kernel 3.19-rc2 von heruntergeladen und entpackt. Hier ist meine Kernelkonfiguration Kernel 3.19-rc2. Eine um den NAND-Zugriff erweiterte befindet sich hier: (Kernelkonfiguration mit NAND-Zugriff) Der Kernel muss mit korrekter Startadresse übersetzt werden und anschließend muss der Device-Tree-Blob erzeugt werden, der die FEX-Dateien der alten Sunxi-Kernels ersetzt:

LOADADDR=0x40008000 make -j2 uImage modules modules_install dtbs

Anschließend können das uImage unter „arch/arm/boot“ und die DTB-Datei (arch/arm/boot/dts/sun7i-a20-cubietruck.dtb) auf die Boot-Partition kopiert werden.

Fertig! Damit sollte der Kernel booten und als Drop-In-Replacement für den alten 3.4er Kernel funktionieren.

Näheres dazu kann man hier nachlesen:

Mainline U-Boot-Howto

SUNXI Mainline Kernel Howto

Update: Ich habe den Kernel nun auf Version 4.0 aktualisiert und um die Unterstützung für den SUNXI Security-System genannten Crypto-Beschleuniger erweitert. Näheres kann hier nachgelesen werden.

Den jeweils aktuellen Kernel stelle ich ab sofort auf dieser Seite zur Verfügung:

Mainline Kernel für Cubietruck