[Buildroot] Teil 3: Ordnerstruktur

Vorheriger Artikel: [Buildroot] Teil 2: Software – Konfiguration

Wie in den ersten beiden Teilen schon erklärt wurde, beinhaltet Buildroot schon Konfigurationen für verschiedene Platformen (RaspberryPi, Arduino, …). Diese Konfigurationen sind im Ordner configs enthalten und beinhalten im wesentlichen Angaben zur Hardwarekonfiguration und Softwarepakete die mit installiert werden sollen und somit das Grundsystem definieren.

Neben dieser Konfiguration gibt es noch jedoch noch weitere Dateien, die ggf. auf das Linux-System kopiert werden sollen. Zum Beispiel Skripte oder Konfigurationsdateien, die im Dateisystem verteilt werden müssen.

Weterhin möchte man ggf. auch eigene Skripte (die vllt. als Dienst gestartet werden) hinterlegen oder den www-Ordner bereits mit einer API ausstatten. Ein Platz für diese Dateien und Modifzierungen bietet der Ordner board.

Natürlich können diese Änderungen zum Beispiel einfach an der vorhandenen RaspberryPi3-Konfiguration durchgeführt werden, das ist dann aber zum einen nicht gut organisiert und zum zweiten nicht robust gegen Buildroot-Git-Updates.

Beispielhaft zeige ich hier ein System für ein Embedded-System (eine genaue Erklärung über die empfohlene Ordnerstruktur findet sich in Kapitel 9 der Buildroot Doku).

Kontext

Nehmen wir an unsere Firma hört auf den Namen LSolutions und unser Embedded-System ist ein RPi3-basierter Fahrrad-Trainingscomputer der auf den Namen CyclePi hört.

Konfigurationen

Da unser System auf einem Raspberry Pi 3 basiert, kopieren wir die Datei configs/raspberrypi3_defconfig und nennen sie cyclepi_defconfig.

Ein Blick in die Datei zeigt, dass es einen dazugehörigen Ordner board/raspberrypi3 gibt. Diesen kopieren wir nach board/lsolutions/cyclepi.

In diesem Ordner befinden sich alle möglichen Dateien für alle Raspberry Pi-Versionen. Wenn wir für den RPi3 kompilieren wollen, so können wir alle nicht benötigten Dateien löschen und die übrigen umbennen, zum Beispiel config_3.txt -> config.txt und genimage-raspberrypi3.cfg -> genimage.cfg.

Entsprechende Pfade in der Datei cyclepi_defconfig die noch in den Ordner board/raspberrypi3 zeigen müssen jetzt entsprechend geändert werden und in den Ordner board/lsolutions/cyclepi zeigen.

Auch die Datei post-image.sh kann modifiziert werden, um nur noch mit der Datei genimage.cfg zu arbeiten.

Beispiel cyclepi_defconfig:

[...]
BR2_PACKAGE_RPI_FIRMWARE_CONFIG_FILE="board/lsolutions/cyclepi/config.txt"
[...]
BR2_ROOTFS_POST_BUILD_SCRIPT="board/lsolutions/cyclepi/post-build.sh"
BR2_ROOTFS_POST_IMAGE_SCRIPT="board/lsolutions/cyclepi/post-image.sh"

Beispiel post-image.sh:

[...]
BOARD_DIR="$(dirname $0)"
BOARD_NAME="$(basename ${BOARD_DIR})"
GENIMAGE_CFG="${BOARD_DIR}/genimage.cfg"
GENIMAGE_TMP="${BUILD_DIR}/genimage.tmp"
[...]

Kompilieren

Um nun mit dieser Konfiguration zu arbeiten, muss sie zunächst geladen werden und kann dann kompiliert werden.

$ make cyclepi_defconfig
$ make clean
$ make -j8

Nun haben wir eine eigene Konfiguration erstellt auf der wir aufbauen können.

Demnächst: Auto-Start eines Python-Skripts durch Änderungen am Dateisystem/Rechtesystem.

Deine E-Mail-Adresse wird nicht veröffentlicht.