11 Stimmen

Wie wendet man Patches auf ein Paket in Buildroot an?

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?

10voto

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:

  1. 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

  2. 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.

4voto

Oleg Kokorin Punkte 1668

Einige Details über Patchdateien in der buildroot Projekt:

  1. 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.

  1. 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.

  2. 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
  1. 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.

  1. 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.

4voto

*使用する `_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:

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.

3voto

pradeepchhetri Punkte 2804

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.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X