Booten von Alpine Linux auf dem Raspberry Pi Compute Module

In unserem Projekt für einen Kunden verwenden wir das Raspberry Pi Compute Module zusammen mit einer kundenspezifischen Trägerplatine für das Compute Module (genannt PCCB - Pi Control Carrier Board), das RS485, CAN, RS232, LAN, USB und einen Abwärtsregler für Eingangsspannungen von 6 - 24 V bietet. (Wenn Sie an kundenspezifischer Hardware interessiert sind und Raspberry Pi Embedded Entwicklung, bitte kontaktieren Sie uns. Das erste Gespräch mit uns ist für Sie kostenlos und kann wertvolle Einblicke und Ideen liefern).

Als Betriebssystem haben wir uns für Alpen-Linux. Da es sich um einen Nur-Lese-Speicher handelt, der im RAM resident ist, eignet es sich perfekt für eine eingebettete, langlebige Lösung, die den Flash-Speicher schonen möchte.

Das PCCB bietet die Möglichkeit, von der SD-Karte zu booten (bei den Compute-Modulen lite), und von dem eingebauten eMMC-Flash bei den "normalen" Compute-Modulen zu booten.

Während das Booten von der SD-Karte problemlos funktioniert, gab es beim Booten vom eMMC-Flash zunächst Probleme.

Wie Sie vielleicht wissen, befindet sich Alpine Linux (standardmäßig) vollständig auf der FAT-Partition der SD-Karte.

Bild

Das Problem: Der Bildschirm bleibt schwarz, die ACT-LED blinkt 7 Mal

Mit dem Ansatz, einfach die Dateien von der SD-Karte auf die eMMC zu kopieren (unter Verwendung des Raspberry Pi Boot-Tools rpiboot unter Windows, um die eMMC des Compute-Moduls zu mounten), bootete das Compute-Modul nicht.

Es wird ein schwarzer Bildschirm angezeigt, und die ACT-LED blinkt siebenmal, mit einer Pause, dann blinkt sie wieder siebenmal.

Beratung diese Seite auf elinux.orgkönnen wir sehen, dass kernel.img nicht gefunden wurde. Der Raspberry Pi Bootloader ist nicht in der Lage, den Kernel zu finden, und kann ihn daher nicht booten.

Der Bildschirm bleibt schwarz, da Splash-Screens normalerweise in der config.txt wird mit Alpine Linux ausgeliefert (disable_splash=1), da Sie sonst einen Regenbogenbildschirm erhalten würden.

Die Lösung: Verschieben Sie den Kernel und initramfs in den Hauptordner

Offenbar gibt es Unterschiede in der Fähigkeit der Raspberry Pi Bootloader-Kette, auf Dateien in Unterordnern für das eMMC-Flash und die SD-Karte zuzugreifen.

Die Lösung besteht daher darin, den Kernel in den Toplevel-/"Root"-Ordner auf der eMMC-Flash-FAT-Partition zu verschieben. (Unter Alpine Linux befindet sich der Kernel normalerweise im Ordner boot Unterverzeichnis):

bearbeiten config.txt zu sagen:

disable_splash=1
boot_delay=0
gpu_mem=64
[pi2]
kernel=vmlinuz-rpi2
initramfs initramfs-rpi2-pi3g
[pi3]
kernel=vmlinuz-rpi2
initramfs initramfs-rpi2-pi3g
[pi3+]
kernel=vmlinuz-rpi2
initramfs initramfs-rpi2-pi3g
[alle]
usercfg.txt einschließen

Verschieben Sie den Kernel und das initramfs in den obersten Ordner auf dem eMMC-Flash:

Bild

Hinweis: Wir haben eine benutzerdefinierte Version des initramfs erstellt, um Schlüssel für unsere benutzerdefinierten Pakete hinzuzufügen, die sich im Unterordner pi3g befinden.

Es besteht keine Notwendigkeit, das Loop-Dateisystem (modloop-rpi2), die System.map-rpi2 oder config-rpi2 zu verschieben, vielmehr müssten Sie einige zusätzliche Konfigurationen ändern, um dies tun zu können.

Nachdem Sie diese Änderungen vorgenommen haben, bootet Alpine Linux auf dem Compute-Modul.

Wir unterstützen Sie gerne bei der Entwicklung von Embedded-Lösungen auf Basis des Raspberry Pi - Hardware und Software. Bitte nehmen Sie Kontakt mit uns auf.