Ich arbeite an einem eingebetteten System, das buildroot als Werkzeug für die Erstellung des Kernels und des Root-Dateisystems verwendet. Ich möchte einige Patches auf diesen Kernel-Quellbaum anwenden. Kann mir jemand sagen, wie buildroot Patches anwendet?
Antworten
Zu viele Anzeigen?Um die Antwort von @pradeepchhentri zu ergänzen. Quilt sucht nach einer Datei, die sich in demselben Ordner wie die *.mk-Datei befindet. Um die entsprechende Datei zu konstruieren:
-
diff Ihr Quellpaket vom Original in eine Datei namens
Packungsname - Nummer - Beschreibung .patch
donde
Packungsname - muss mit dem Paketnamen identisch sein
Nummer - ist die Reihenfolge, in der die Patches angewendet werden sollen, wenn Sie mehr als einen Patch anwenden müssen (andernfalls werden sie in alphabetischer Reihenfolge angewendet)
Beschreibung - kann ein beliebiger freier Text sein
-
Legen Sie diese Datei in das Paket auf derselben Ebene wie die Datei [packagename].mk und die Datei package/Config.in.
Vergessen Sie nicht, Ihre Build-Dateien zu vernichten oder ein [Paket]-Rebuild durchzuführen, wenn Sie dies tun. Sie sollten eine "Parcheando..."-Meldung sehen, wenn dies richtig gemacht wurde.
Einige Details über Patchdateien in der buildroot Projekt:
-
müssen Sie
diff -u "old_file" "new_file" > file.patch
während Sie genau über der Stelle stehen, an der Ihr Paket entnommen wurde tar.gz definiert in
PACKAGE_NAME_SOURCE
bedeutet dies, dass der Pfad zur Datei den Namen des extrahierten Paketordners enthalten muss.
-
für den Fall, dass Sie sich fragen, ob die "alte_datei" Pfad vom Original abweichen würde - keine Sorge, wichtig ist der "neue_datei" Pfad und Name - er sollte mit dem von Ihnen extrahierten Paket übereinstimmen.
-
Namenskonvention für die in buildroot bereits verwendeten/definierten Patches (alle Teile sind mit '-' Zeichen):
- 4-stellige Patch-Priorität (beginnend mit 0001)
- Zieldateiname
- Grund für Parcheando
- .patch-Erweiterung
Beispiel:
0001-configure.ac-convert-AC_TRY_COMPILE-AC_COMPILE_IFELS.patch
- Hinterlegung der Patchdatei in buildroot/package/"Ihr Paketname"/ Ordner.
Es müssen keine Konfigurationsdateien geändert werden, alle Patches werden automatisch für die Anwendung getestet.
- Im Falle eines Fehlschlags wird die Datei reject-patch (mit einem ähnlichen Namen wie die Datei, die Sie patchen wollen, aber mit .rej Erweiterung) wird im extrahierten Ordner des Pakets hinterlegt.
*使用する `_OVERRIDE_SRCDIR` und alles in Untermodulen verfolgen**
Anstatt Pflaster zu verwenden, empfehle ich Ihnen dringend, dies zu tun:
myproject/
.git/
submodules/buildroot/
submodules/source_of_my_package/
und verfolgen Sie einfach die Quelle Ihres in einem Submodul, das auf Ihren Fork des Projekts mit Ihren Patches an der Spitze zeigt.
Dadurch wird alles viel übersichtlicher und leichter zu kontrollieren.
Weitere Informationen unter: Wie kann man die Quelle von Buildroot-Paketen für die Paketentwicklung ändern?
BR2_GLOBAL_PATCH_DIR
Außer-Baum-Patches
Verzeichnisstruktur:
.git/
buildroot/
Buildroot-Submodul wie unter erwähnt: https://stackoverflow.com/a/23635403/895245global_patch_dir/packagename/0001-my-test.patch
Zur Konfiguration hinzufügen:
BR2_GLOBAL_PATCH_DIR=../global_patch_dir
Dann bauen Sie mit:
cd buildroot
make
Der Patch sollte angewendet werden auf output/build/packagename-1.0.0/
vor dem Bau.
Nachdem ich die Architektur von buildroot studiert hatte, fand ich heraus, dass buildroot das Werkzeug quilt für die Anwendung der Patches verwendet. quilt behält den Überblick über alle Patches in einer Datei namens "series", die sich im Verzeichnis "patches" befindet. Sie müssen Ihre Patches in diesem Verzeichnis ablegen. Fügen Sie die Patches in die Datei "series" in der Reihenfolge ein, in der Sie die Patches anwenden möchten, wobei der zuerst anzuwendende Patch oben steht.
Auf diese Weise werden beim Ausführen des buildroot-Makefile automatisch die in der Seriendatei aufgeführten Patches angewendet.