[Buildroot] Teil 3: Ordnerstruktur
- Buildroot Programmierung Tutorial
- gepostet am 12.Juli 2022
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_defconfi
g 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.