
Ich arbeite an einem eingebetteten Gerät mit einem Arm Cortex A9. Die Kernelversion ist 4.16.0 und wird von Buildroot 2018.05 generiert. Der Speicher ist ein MMC mit mehreren Partitionen. U-Boot liest das uImage in einer Partition und startet den Kernel. Das Dateisystem ist im Kernel-Image enthalten und wird beim Start in ein Initramfs geladen (Konfiguration: BR2_TARGET_ROOTFS_INITRAMFS).
Ich möchte ein Overlay-FS verwenden, um einen Ordner (im MMC) als „Benutzer“-Dateisystem zu verwenden, das gemountet ist auf /
.
Ich habe bereits erfolgreich versucht, die Überlagerung /etc
mit einem Verzeichnis namens „ overlay /data/etc
“ durchzuführen, indem ich diese Zeilen hinzugefügt habe /etc/fstab
:
/dev/mmcblk0p1 /data auto defaults 1 2
overlay /etc overlay x-systemd.requires=/data,lowerdir=/etc,upperdir=/data/etc,workdir=/data/work/etc 0 0
Das funktioniert, aber das Overlay wird erst gemountet, nachdem systemd seine Dienste bereits gestartet hat. Die Netzwerkkonfiguration ist also beispielsweise die im uImage und nicht die in meinem user
Dateisystem. Ich möchte das Overlay mounten, bevor systemd gestartet wird, also direkt danach /
.
Ich habe es so verstanden, dass das System beim Start zunächst einen Speicherplatz im RAM erstellt und dann das CPIO-Image darin extrahiert. Dann /
wird es dort gemountet und das System startet das erste Programm: systemd:/sbin/init
mit der PID 1. Habe ich das richtig verstanden?
Ich habe viele Artikel und Q&A-Websites gelesen, verstehe aber immer noch nicht, wo ich die Änderungen vornehmen muss, um mein Overlay beim Booten auszuführen. Welche Dateien enthalten die mount /
Operation?
Antwort1
Dieser Bootvorgang erfolgt in initramfs. Sie müssen Ihrem ein Skript hinzufügen initramfs/scripts
, wahrscheinlich init-bottom
um die Dateisysteme wie gewünscht (neu) zu mounten, und dann ein neues initramfs-Paket generieren.
Das Skript wird vor Ihrem Dateisystem ausgeführt init
, am Ende des Kernelprozesses init
. Der Grund für die Verwirrung liegt darin, dass der Code für das Setup nirgendwo direkt auf dem Dateisystem liegt, sondern in Ihrer initramfs-Datei.
Antwort2
Sie müssen den tatsächlichen Standort Ihres Overlays herausfinden und ihn in die Datei eingeben
/etc/fstab
und zwar so, wie Sie es in einem laufenden System eingeben würden.
Eine Einschränkung: Sie müssen die Datei zum Overlay-Dateisystem des Buildroots hinzufügen, damit Buildroot beim Erstellen des Root-FS die geänderte Dateisystemtabelle einschließt.
Nehmen wir als Beispiel an, Sie möchten/dev/mmc0p0über/heimführen Sie die folgenden Schritte aus und verwenden dabei MYCOMP und MYBOARD als Namen für Ihr Unternehmen und Ihr Board:
- create a filesystem structure in a seperate directory, as
specified in the buildroot manual chapter 9.1 "Recommended
directory structure", presumably under /tmp/br_ext
- in this directory you add board/MYCOMP/MYBOARD/rottfs_overlay/etc/fstab
and fill it with this information:
board/MYCOMP/MYBOARD/rottfs_overlay/etc/fstab:
/dev/mmc0p0 /home ext4 defaults 0 1
Anschließend erstellen Sie das Dateisystem im Buildroot-Baum mit:
make BR2_EXTERNAL=/tmp/br_ext menuconfig
make
Nach dem Neustart des neuen Dateisystems sollte das Overlay vorhanden sein.