Neuigkeiten von trion.
Immer gut informiert.

ODROID N2 Mainline Kernel

Single Board Computer (SBC) wie der Raspberry Pi oder die ODROID-Serie eignen sich sehr gut als stromsparende und hinreichend performante Maschinen für Container-Hosting mit Docker oder Kubernetes.
In dem Artikel "Kubernetes auf Odroid N2" wurde die Einrichtung von Kubernetes auf ODROID N2 mit Arch Linux ARM beschrieben.
Der von Hardkernel, dem Hersteller der ODROIDs, bereitgestellte Kernel basiert auf einem alten Stand und wurde durch zusätzliche Treiber und Patches für den ODROID N2 kompatibel gemacht.
Leider bringt der verwendete Kernel einige Nachteile mit sich: So gibt es zum Teil Abstürze und Instabilitäten. Der Prometheus Node-Exporter führt zu einem sofortigen Absturz, so dass an Metrikmonitoring gar nicht zu denken ist. (Hier scheint das Problem in der dynamischen Taktung zu liegen cpufreq_cpu_get, taucht im Stacktrace stets auf.)

Abhilfe schafft der sogenannte Mainline-Kernel. Das ist ein nicht gepatchter Kernel und kann seit Linux 5.5 prinzipiell verwendet werden, da die Unterstützung der verwendeten Hardwarekomponenten des ODROID N2 in diesem enthalten ist.

Arch Linux ODROID-N2 Mainline Kernel

Zur Installation des Mainline Linux Kernel sind lediglich zwei Schritte notwendig: Aktualisierung der boot.ini, Installation des Mainline Kernel und Deinstallation des odroid Kernels. Zunächst wird die boot.ini aktualisiert. Die Datei liegt im Ordner /boot/ und bekommt folgenden Inhalt:

Inhalt der boot.ini für Mainline Kernel
ODROIDN2-UBOOT-CONFIG

setenv bootlabel "ArchLinux EMMC"

# Default Console Device Setting
setenv condev "console=ttyAML0,115200n8 console=tty1"   # on both

# Boot Args
setenv bootargs "root=/dev/mmcblk${devno}p2 rootwait rw ${condev} ${amlogic} no_console_suspend fsck.repair=yes net.ifnames=0 hdmimode=1080p60hz clk_ignore_unused"

# Set load addresses
setenv dtb_loadaddr "0x20000000"
setenv loadaddr "0x1080000"
setenv initrd_loadaddr "0x3080000"

# Load kernel, dtb and initrd
load mmc ${devno}:1 ${loadaddr} /Image
load mmc ${devno}:1 ${dtb_loadaddr} /dtbs/amlogic/meson-g12b-odroid-n2.dtb
load mmc ${devno}:1 ${initrd_loadaddr} /initramfs-linux.uimg
#fdt addr ${dtb_loadaddr}

# boot
booti ${loadaddr} ${initrd_loadaddr} ${dtb_loadaddr}

Anschließend kann der Mainline Kernel von ArchLinux ARM oder einer beliebigen Quelle installiert werden.
Im Beispiel wird das Aarch64 Paket gewählt, also ein 64bit System.

Installation Mainline Linux Kernel auf ODROID N2
$ pacman -S linux-aarch64

Anschließend erfolgt ein Reboot, um den neuen Kernel zu aktivieren. Bisher läuft Kubernetes, CRI-O und der Mainline Kernel stabil und performant.
Zur Zeit leider nicht verfügbar ist der Hardware-Watchdog, so dass im Falle eines Kernel-Crashes kein automatischer Reboot erfolgt.




Zu den Themen Kubernetes, Docker und Cloud Architektur bieten wir sowohl Beratung, Entwicklungsunterstützung als auch passende Schulungen an:

Auch für Ihren individuellen Bedarf können wir Workshops und Schulungen anbieten. Sprechen Sie uns gerne an.

Feedback oder Fragen zu einem Artikel - per Twitter @triondevelop oder E-Mail freuen wir uns auf eine Kontaktaufnahme!

Zur Desktop Version des Artikels