2013-07-26 13 views
7

Ich werde Build-Umgebung einrichten, um mein eigenes Linux-Embedded-System für AT91SAM9X25 Board zu machen. Ich verwende buildroot, um dies zu tun. Der make-Befehl erstellt alle Ziele, zuerst erstellt er toolchain, dann Pakete und dann rootfs und Bilder von rootfs (tar, cpio ...). Um rootfs neu zu erstellen verwende ich normalerweise make clean und dann make. Der Befehl make clean entfernt alle und die Toolchain.wie man rootfs in buildroot wieder herstellt

Also die erste meine Frage ist: Gibt es eine Möglichkeit, rootfs neu zu erstellen, ohne Toolchain zu bauen? Es benötigt viel Zeit.

Auch ich baue Linux-Kernel innerhalb von Buildroot. Ich habe BR2_LINUX_KERNEL [= y] in Buildroot aktiviert. Das Linux ist so konfiguriert, dass es das Initial RAM-Dateisystem verwendet. Um den Kernel zu erstellen, benötigte es ein Image von rootfs (welches von buildroot erstellt werden sollte). Wenn ich make unter root von buildroot starte, scheitert das Gebäude mit dem Fehler 'buildroot-2013.05/output/images/rootfs.cpio' kann nicht geöffnet werden. Denn (wenn ich das richtig verstehe) ist die Buildsequenz toolchain - pakages - rootfs - linux kernel - images von rootfs. Wenn es versucht, Linux-Kernel zu erstellen, wird das Bild rootfs.cpio nicht erstellt.

Also die zweite Frage ist: Wie Linux in Buildroot zu erstellen, wenn ich Initial RAM-Dateisystem verwenden möchte?

Gibt es möglicherweise effizientere Alternativen als buildroot?

Vielen Dank im Voraus.

Antwort

13

Der Befehl make build alle Ziele

Sie wollen nicht, das zu tun (bis Buildroot konfiguriert ist).
Sie müssen zuerst Buildroot konfigurieren, indem Sie die Zielplatine angeben.
Per die manual können Sie von Grund auf neu starten, oder eine von einem ähnlichen Brett wie configs/at91sam9g20dfc_defconfig

Neben der Buildroot Konfigurationsdatei abgeleitet Buildroot Konfigurationsdatei für Ihre AT91SAM9X25 Board erstellen, finden Sie auch einen Linux-Kernel-Konfigurationsdatei müssen (es sei denn, Sie möchten versuchen, den Kernel von Grund auf neu zu konfigurieren).
Die Kernel-Konfigurationsdatei für Atmels eval Board mit einem AT91SAM9x5 ist at91sam9x5ek_defconfig

Sie auch Abschnitt 3.4.2 lesen sollte. Erstellen von eigenen Board-Support-

Das erste meine Frage ist: Gibt es eine Möglichkeit rootfs Remake ohne Toolchain zu bauen? Es benötigt viel Zeit.

Die Antwort hängt davon ab, wie Sie "Remake rootfs" definieren. Wenn Sie das Verzeichnis output/images/ löschen, werden die Dateien des rootfs neu geschrieben.
Wenn Sie Verzeichnisse in output/build/ löschen, werden diese Pakete oder Subsysteme von der Quelle neu kompiliert.

Wenn Sie Buildroot so konfigurieren, dass es Ihre eigene oder eine externe Werkzeugkette verwendet, würde make clean diese nicht entfernen. Wenn Sie Buildroot für die Installation der Toolchain konfigurieren, die außerhalb des Verzeichnisses erstellt wird, kann es während eines make clean es in Ruhe lassen.

Natürlich ist der Buildroot make intelligent genug, um zu wissen, was sich seit dem letzten Build geändert hat und was neu kompiliert werden muss.
Es sollte der seltene Fall sein, dass Sie Verzeichnisse in output/build/ löschen müssen, um die Neukompilierung zu erzwingen.

Also die zweite Frage ist: Wie baue ich linux in buildroot, wenn ich Initial RAM Dateisystem verwenden möchte?

Sie müssen Buildroot und den Linux-Kernel richtig konfigurieren.

make menuconfig 
    Filesystem images ---> 
make linux-menuconfig 
    General setup ---> 
make 

Weitere prägnante Informationen zur Verwendung von Buildroot für AT91SAM9x5 ist this Linx4SAM page

Möglicherweise gibt es effizientere Alternativen als buildroot?

Es gibt auch andere Werkzeuge wie Open Embedded, sondern beschreiben sie als „effiziente“ ist subjektiv.


NACHTRAG

wie rootfs in buildroot zum Wiederaufbau

Um die rootfs zu zwingen, wieder aufgebaut werden (in diesem Fall ein initramfs) löschen drei versteckte Dateien im Ausgang /build/linux-x.xx.xx directory

.stamp_images_installed 
    .stamp_initramfs_rebuilt 
    .stamp_target_installed 
+0

Lassen Sie mich meine Frage bezüglich des Erstellens von Linux Kernel in buildroot umformulieren (könnte ich erklärt nicht klar genug sein). Buildroot macht: 1.Toolchain -> 2.Packages -> 3.Linux Kernel -> 4.rootfs Bilder. Aber in Schritt 3 (Linux-Kernel) sind rootfs-Images erforderlich, da Linux als initiales RAM-Dateisystem konfiguriert ist, aber wir haben es nur in Schritt 4 bekommen. Das Problem - Ich sehe Fehlermeldung in Schritt 3: Es gibt kein rootfs.cpio – Yuri

+1

* "Linux als Verwendung konfiguriert Initial RAM Dateisystem" * - ** Ist Buildroot auch für initramfs ** konfiguriert? Der Fehler in Schritt 3 bedeutet, dass Sie Buildroot nicht korrekt konfiguriert haben. Ihre Bedenken, wie Buildroot mit einem scheinbar problematischen Huhn-Ei-Problem umgehen kann, sind in der [commit-Beschreibung für "Unterstützung für initramfs hinzufügen"] beschrieben (http://git.uclibc.org/buildroot/commit/?id=f507921d391bb2578261a9e45c003e72302dc67a). . Im Wesentlichen führt Buildroot Schritt 3 mit einer * empty * initramfs-Datei durch und führt dann einen zusätzlichen Schritt # 5 aus, um einen Kernel mit dem tatsächlichen initramfs zu erzeugen. – sawdust

+0

Ihre Antwort (d. H. Das Entfernen der .stamp_xxx-Dateien) war sehr nützlich, um die Neuerstellung von rootfs zu erzwingen. Allerdings habe ich den rootfs mit einem Overlay zusätzliche Dinge hinzugefügt. Wenn ich zu einer (geringfügig) anderen Konfiguration ohne das rootfs-Overlay übergehe, wird die Datei aus dem alten Overlay NICHT aus der Struktur unter "target /" oder aus dem endgültigen Bild entfernt. Ich habe versucht, den Inhalt von "target" zu löschen, aber das verursachte einen Build-Fehler (es ist keine einfache Build-Ausgabe). Gibt es eine Möglichkeit, Dinge, die aus den Roots entfernt wurden, zu säubern, ohne eine vollständige Entfernung/Wiederherstellung durchzuführen? – Jeremy

Verwandte Themen