Buildroot – Teil 2. Erstellen Ihrer Board-Konfiguration; Verwendung von externen Baum-, Rootfs-Overlay- und Post-Build-Skripten

In diesem Abschnitt schaue ich mir einige der Anpassungsoptionen an, die ich benötigte. Dies ist keine vollstÀndige Liste der Angebote von Buildroot, aber sie sind recht funktionsfÀhig und erfordern keinen Eingriff in die Dateien von Buildroot selbst.

Verwendung des EXTERNEN Mechanismus zur Anpassung

In einem frĂŒheren Artikel Wir haben uns ein einfaches Beispiel fĂŒr das HinzufĂŒgen einer eigenen Konfiguration angesehen, indem wir die Defconfig des Boards und die erforderlichen Dateien direkt zum Buildroot-Verzeichnis hinzugefĂŒgt haben.

Diese Methode ist jedoch nicht sehr praktisch, insbesondere beim Aktualisieren von Buildroot. Es gibt einen Mechanismus, um dieses Problem zu lösen externer Baum. Das Wesentliche ist, dass Sie Board, Konfigurationen, Pakete und andere Verzeichnisse in einem separaten Verzeichnis speichern können (ich verwende zum Beispiel das Patches-Verzeichnis, um Patches auf Pakete anzuwenden, weitere Details in einem separaten Abschnitt) und Buildroot selbst wird sie zu denen in hinzufĂŒgen sein Verzeichnis.

Hinweis: Sie können mehrere externe BĂ€ume gleichzeitig ĂŒberlagern. Ein Beispiel finden Sie im Buildroot-Handbuch

Erstellen wir ein Verzeichnis my_tree, das sich neben dem Buildroot-Verzeichnis befindet, und ĂŒbertragen wir unsere Konfiguration dorthin. Die Ausgabe sollte die folgende Dateistruktur haben:

[alexey@alexey-pc my_tree]$ tree
.
├── board
│   └── my_x86_board
│       ├── bef_cr_fs_img.sh
│       ├── linux.config
│       ├── rootfs_overlay
│       └── users.txt
├── Config.in
├── configs
│   └── my_x86_board_defconfig
├── external.desc
├── external.mk
├── package
└── patches

6 directories, 7 files

Wie Sie sehen können, wiederholt die Struktur im Allgemeinen die Struktur von buildroot.

Verzeichnis Tafel enthĂ€lt in unserem Fall fĂŒr jedes Board spezifische Dateien:

  • bef_cr_fs_img.sh ist ein Skript, das nach dem Erstellen des Zieldateisystems, aber vor dem Packen in Images ausgefĂŒhrt wird. Wir werden es in Zukunft nutzen
  • linux.config – Kernel-Konfiguration
  • rootfs_overlay – Verzeichnis, das ĂŒber das Zieldateisystem gelegt werden soll
  • „users.txt“ – eine Datei, die die zu erstellenden Benutzer beschreibt

Verzeichnis konfiguriert enthÀlt die Defconfig unserer Boards. Wir haben nur einen.

Verpackung - Katalog mit unseren Paketen. Buildroot enthĂ€lt zunĂ€chst Beschreibungen und Regeln zum Erstellen einer begrenzten Anzahl von Paketen. SpĂ€ter werden wir hier den Icewm-Fenstermanager und den Slim-Grafik-Login-Manager hinzufĂŒgen.
Patches – ermöglicht Ihnen die bequeme Speicherung Ihrer Patches fĂŒr verschiedene Pakete. Weitere Details finden Sie weiter unten in einem separaten Abschnitt.
Jetzt mĂŒssen wir die Beschreibungsdateien fĂŒr unseren externen Baum hinzufĂŒgen. DafĂŒr sind 3 Dateien verantwortlich: external.desc, Config.in, external.mk.

external.desc enthÀlt die eigentliche Beschreibung:

[alexey@alexey-pc my_tree]$ cat external.desc 
name: my_tree
desc: My simple external-tree for article

Die erste Zeile ist der Titel. Erstellen Sie in Zukunft eine Variable mit buildroot $(BR2_EXTERNAL_MY_TREE_PATH), die beim Konfigurieren der Assembly verwendet werden sollte. Der Pfad zur Benutzerdatei kann beispielsweise wie folgt festgelegt werden:

$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/users.txt

Die zweite Zeile ist eine kurze, fĂŒr Menschen lesbare Beschreibung.

Config.in, external.mk – Dateien zur Beschreibung hinzugefĂŒgter Pakete. Wenn Sie keine eigenen Pakete hinzufĂŒgen, können diese Dateien leer bleiben. Das ist es, was wir vorerst tun werden.
Jetzt haben wir unseren externen Baum fertig, der die Defconfig unseres Boards und die benötigten Dateien enthÀlt. Gehen wir zum Buildroot-Verzeichnis und geben an, dass external-tree verwendet werden soll:

[alexey@alexey-pc buildroot]$ make BR2_EXTERNAL=../my_tree/ my_x86_board_defconfig
#
# configuration written to /home/alexey/dev/article/ramdisk/buildroot/.config
#
[alexey@alexey-pc buildroot]$ make menuconfig

Im ersten Befehl verwenden wir das Argument BR2_EXTERNAL=../mein_Baum/, was die Verwendung eines externen Baums anzeigt. Sie können mehrere externe BĂ€ume zur gleichzeitigen Verwendung angeben. In diesem Fall mĂŒssen Sie dies nur einmal tun, woraufhin eine Datei „output/.br-external.mk“ erstellt wird speichert Informationen ĂŒber den verwendeten externen Baum:

[alexey@alexey-pc buildroot]$ cat output/.br-external.mk 
#
# Automatically generated file; DO NOT EDIT.
#

BR2_EXTERNAL ?= /home/alexey/dev/article/ramdisk/my_small_linux/my_tree
BR2_EXTERNAL_NAMES = 
BR2_EXTERNAL_DIRS = 
BR2_EXTERNAL_MKS = 

BR2_EXTERNAL_NAMES += my_tree
BR2_EXTERNAL_DIRS += /home/alexey/dev/article/ramdisk/my_small_linux/my_tree
BR2_EXTERNAL_MKS += /home/alexey/dev/article/ramdisk/my_small_linux/my_tree/external.mk
export BR2_EXTERNAL_my_tree_PATH = /home/alexey/dev/article/ramdisk/my_small_linux/my_tree
export BR2_EXTERNAL_my_tree_DESC = My simple external-tree for article

Wichtig! Die Pfade in dieser Datei sind absolut!

Im MenĂŒ ist ein Eintrag „Externe Optionen“ aufgetaucht:

Buildroot – Teil 2. Erstellen Ihrer Board-Konfiguration; Verwendung von externen Baum-, Rootfs-Overlay- und Post-Build-Skripten

Dieses UntermenĂŒ enthĂ€lt unsere Pakete aus unserem externen Baum. Dieser Abschnitt ist derzeit leer.

Jetzt ist es fĂŒr uns wichtiger, die notwendigen Pfade fĂŒr die Verwendung von external-tree neu zu schreiben.

Bitte beachten Sie, dass im Abschnitt Build-Optionen → Speicherort zum Speichern der Buildroot-Konfiguration ein absoluter Pfad zur gespeicherten Defconfig vorhanden ist. Es wird zum Zeitpunkt der Angabe der Verwendung von extgernal_tree gebildet.

Wir werden auch die Pfade im Abschnitt Systemkonfiguration korrigieren. FĂŒr eine Tabelle mit erstellten Benutzern:

$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/users.txt

Ändern Sie im Abschnitt Kernel den Pfad zur Kernel-Konfiguration:

$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/linux.config

Jetzt werden unsere Dateien aus unserem externen Baum beim Zusammenbau verwendet. Beim Verschieben in ein anderes Verzeichnis oder beim Aktualisieren des Buildroots treten nur minimale Probleme auf.

Root-FS-Overlay hinzufĂŒgen:

Dieser Mechanismus ermöglicht Ihnen das einfache HinzufĂŒgen/Ersetzen von Dateien im Zieldateisystem.
Wenn sich die Datei im Root-FS-Overlay, aber nicht im Ziel befindet, wird sie hinzugefĂŒgt
Wenn sich die Datei im Root-FS-Overlay und im Ziel befindet, wird sie ersetzt.
Legen wir zunĂ€chst den Pfad zum Root-FS-Overlay-Verzeichnis fest. Dies geschieht im Abschnitt Systemkonfiguration → Root-Dateisystem-Overlay-Verzeichnisse:

$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/rootfs_overlay/

Jetzt erstellen wir zwei Dateien.

[alexey@alexey-pc my_small_linux]$ cat my_tree/board/my_x86_board/rootfs_overlay/etc/hosts 
127.0.0.1   localhost
127.0.1.1   my_small_linux
8.8.8.8     google-public-dns-a.google.com.
[alexey@alexey-pc my_small_linux]$ cat my_tree/board/my_x86_board/rootfs_overlay/new_file.txt 
This is new file from overlay

Die erste Datei (my_tree/board/my_x86_board/rootfs_overlay/etc/hosts) ersetzt die Datei /etc/hosts auf dem fertigen System. Die zweite Datei (cat my_tree/board/my_x86_board/rootfs_overlay/new_file.txt) wird hinzugefĂŒgt.

Wir sammeln und prĂŒfen:

Buildroot – Teil 2. Erstellen Ihrer Board-Konfiguration; Verwendung von externen Baum-, Rootfs-Overlay- und Post-Build-Skripten

AusfĂŒhrung von Anpassungsskripten in verschiedenen Phasen der Systemmontage

Oft mĂŒssen Sie einige Arbeiten im Zieldateisystem durchfĂŒhren, bevor es in Images gepackt wird.

Dies kann im Abschnitt Systemkonfiguration erfolgen:

Buildroot – Teil 2. Erstellen Ihrer Board-Konfiguration; Verwendung von externen Baum-, Rootfs-Overlay- und Post-Build-Skripten

Die ersten beiden Skripte werden ausgefĂŒhrt, nachdem das Zieldateisystem erstellt wurde, aber bevor es in Images gepackt wird. Der Unterschied besteht darin, dass das Fakeroot-Skript im Kontext von Fakeroot ausgefĂŒhrt wird, wodurch die Arbeit als Root-Benutzer simuliert wird.

Das letzte Skript wird ausgefĂŒhrt, nachdem die Systemabbilder erstellt wurden. Sie können darin zusĂ€tzliche Aktionen ausfĂŒhren, beispielsweise die erforderlichen Dateien auf einen NFS-Server kopieren oder ein Image Ihrer GerĂ€te-Firmware erstellen.

Als Beispiel erstelle ich ein Skript, das die Version und das Erstellungsdatum in /etc/ schreibt.
Zuerst werde ich den Pfad zu dieser Datei in meinem externen Baum angeben:

Buildroot – Teil 2. Erstellen Ihrer Board-Konfiguration; Verwendung von externen Baum-, Rootfs-Overlay- und Post-Build-Skripten

Und nun das Skript selbst:

[alexey@alexey-pc buildroot]$ cat ../my_tree/board/my_x86_board/bef_cr_fs_img.sh 
#!/bin/sh
echo "my small linux 1.0 pre alpha" > output/target/etc/mysmalllinux-release
date >> output/target/etc/mysmalllinux-release

Nach dem Zusammenbau können Sie diese Datei auf dem System sehen.

In der Praxis kann das Skript groß werden. Deshalb habe ich im realen Projekt einen fortgeschritteneren Weg gewĂ€hlt:

  1. Ich habe ein Verzeichnis (my_tree/board_my_x86_board/inside_fakeroot_scripts) erstellt, in dem sich auszufĂŒhrende Skripte mit Seriennummern befinden. Zum Beispiel 0001-add-my_small_linux-version.sh, 0002-clear-apache-root-dir.sh
  2. Ich habe ein Skript geschrieben (my_tree/board_my_x86_board/run_inside_fakeroot.sh), das dieses Verzeichnis durchlĂ€uft und die darin enthaltenen Skripte nacheinander ausfĂŒhrt
  3. Dieses Skript wurde in den Board-Einstellungen im Abschnitt Systemkonfiguration -> Benutzerdefinierte Skripte zur AusfĂŒhrung in der Fakeroot-Umgebung ($(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/run_inside_fakeroot.sh) angegeben

Source: habr.com

Kaufen Sie zuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz und VPS-VDS-Servern đŸ”„ Kaufen Sie zuverlĂ€ssiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server | ProHoster