Yocto – Build Umgebung mit Docker

Bei der Erstellung einer eigenen Embedded-Linux-Distribution mit Yocto besteht die Möglichkeit, eine unterstützte Linux-Distribution wie Ubuntu oder CentOS zu installieren und in diesem Rahmen die erforderlichen Werkzeuge zu installieren. Alternativ besteht die Möglichkeit, den gesamten Prozess in einem Docker-Container auszuführen.

Dies hat den Vorteil, dass man unabhängiger vom Host-Betriebssystem ist, da Docker Container sowohl unter Linux als auch auf Windows funktionieren. Im Fall von Linux ist die Auswahl der Distribution wesentlich flexibler, sofern Docker verfügbar ist.Die Installation von Docker selbst wird an anderer Stelle ausführlich erläutert, beispielsweise auf den Webseiten von Docker oder der verwendeten Linux-Distribution.

Zunächst wird ein Docker-Volume erstellt, in dem alle Dateien des Yocto Build-Systems abgelegt werden. Zu diesem Zweck wird ein Verzeichnis im Benutzerverzeichnis verwendet, was die Arbeit mit Yocto vereinfacht, da ein einfacher Zugriff auf die Dateien aus dem Hostsystem heraus möglich ist.

Im Anschluss wird der Docker-Container erstellt und gestartet, wobei das gerade erstellte Volume mit angegeben wird.

Wird der Container nun mittels exit verlassen, so wird dieser zwar gelöscht, sämtliche Daten bleiben jedoch erhalten. Der Container kann jederzeit mit dem oben genannten Befehl neu gestartet und die Arbeit fortgesetzt werden.

Im Anschluss werden die benötigten Git-Repositories ausgecheckt, sodass die erforderliche Verzeichnissstruktur sowie die erforderlichen Dateien erstellt werden. Für die Erstellung eines Images für den Raspberry Pi, welches die Qt-Bibliotheken enthalten soll, müssen noch zwei weitere Repositories angegeben werden.

Beim Auschecken der Dateien wird der Branch „kirkstone“ verwendet, das ist die Version der Poky-Distribution, die verwendet werden soll. Im Falle von Qt wird der Branch 6.8.3 verwendet, welcher zum Zeitpunkt der Beitragserstellung die aktuelle Version darstellt. Es sei darauf hingewiesen, dass eine LTS-Version von QT ausschließlich unter Verwendung einer kommerziellen Lizenz nutzbar ist.

Im nächsten Schritt ist es erforderlich, die Build-Umgebung zu initialisieren, was wie folgt geschieht.

Es wurde ein neues Verzeichnis mit der Bezeichnung rpi-build erstellt, in dem später alle erstellten Pakete, Images usw. abgelegt werden.

Das Verzeichnis rpi-build enthält ein Verzeichnis namens conf mit Dateien, die zur Konfiguration der individuellen Linux-Distribution benötigt werden. Die Dateien bblayers.conf und local.conf müssen jeweils an die spezifischen Anforderungen angepasst werden. Die Dateien können aus dem Hostsystem heraus editiert werden. Zunächst wird die local.conf angepasst.

In der Datei bblayers.conf sind die für den Raspberry Pi benötigten Layer noch hinzuzufügen.

Die Build-Umgebung ist jetzt bereit und das erste Image kann mit dem folgenden Befehl erstellet werden. Das kann aber ein paar Stunden dauern.

Nach Abschluss des Imaging-Vorgangs wird das Image der SD-Karte in dem Verzeichnis rpi-build/tmp/deploy/images/raspberrypi4-64 gespeichert. Das Image trägt die Bezeichnung core-image-minimal-raspberrypi4-64.rpi-sdimg. Dieses Image kann mit dem Programm dd auf eine SD-Karte geschrieben werden.

Dabei ist /dev/sdb die SD-Karte, auf Windows können entsprechend andere Tools wie z.B. Balena Etcher verwendet werden.