Nach der Arbeit mit Linux (meist als fortgeschrittener Benutzer) seit Jahren, beschloss ich, mein erster Beitrag Linux-Kernel-Patch (allerdings trivial, aber hey, müssen Sie irgendwo anfangen!) und ich war begeistert, als sie zuerst von der Subsystem-Verwalter angenommen habe und dann Letztlich geht es rieselte in Mainline-Kernel.

Was folgt, ist ein Schritt-für-Schritt Anleitung, wie man einen Linux-Kernel vorlegen Patch und hoffen, dass es in den Mainline-Kernel übernommen wurde. Dieses How-To basiert auf einem tatsächlichen Patch, dass ich und schrieb vorgelegt und stieg in die Mainline-Kernel akzeptiert gestern basieren. Der Leitfaden unterstreicht vor allem die Mechanik des Patches und nicht unbedingt technische Design-Aspekte von Linux-Kernel.

Schritt 1: Installieren Git-Tools

Das erste, was wir tun müssen, ist sicherzustellen, dass wir uns notwendigen Werkzeuge zum Erstellen und Übermitteln unserer Linux-Kernel-Patch zu haben. Ich bin mit meinem Debian Lenny System für dieses How-To.

# apt-get update
# apt-get install git git-email gitk

Außerdem ist es eine gute Idee, einige wenige Parameter, die Git verwenden, wenn es Ihrem Patch erzeugt wird zu konfigurieren:

# git config --add user.name "Kushal Koolwal"
# git config --add user.email "kushalkoolwal@gmail.com"

Schritt 2: Clone Linus 'Git-Tree

Das nächste, was Sie tun möchten, kann es zu Linus 'Git-Tree vorzugsweise klonen auf Ihrem Linux-Rechner. Achten Sie darauf, genügend Platz (mindestens 2 GB), bevor Sie den Baum zu klonen. Zum Zeitpunkt des Schreibens dieses Artikels die gesamte Größe des Baumes lag bei rund 950 + MB.

debian:~# cd /usr/src/
debian:/usr/src/# git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6 mylinux-2.6

Jetzt für 30 Minuten oder so warten, abhängig von der Geschwindigkeit Ihrer Internetverbindung, bevor der gesamte Baum in Ihr Verzeichnis heruntergeladen wird mylinux-2.6 (Verzeichnis wird automatisch erstellt, da Sie in der Befehlszeile angegeben haben). Jede Patchwork sollte immer gegen diesen Baum getan werden, um sicherzustellen, dass Ihre Änderungen möglicherweise nicht mit Änderungen von anderen Entwicklern in Konflikt geraten dürfe.

debian:/usr/src/# cd mylinux-2.6
debian:/usr/src/mylinux-2.6# ls
arch COPYING crypto drivers fs init Kbuild kernel MAINTAINERS mm README samples security tools virt block CREDITS Documentation firmware include ipc Kconfig lib Makefile net REPORTING-BUGS scripts sound usr
debian:/usr/src/mylinux-2.6#

Ab hier ganze Arbeit wird in / usr/src/mylinux-2.6 Verzeichnis erfolgen.

Schritt 3: Erstellen Sie nun eine lokale Niederlassung, um Ihre Änderungen zu machen

Standardmäßig, wenn Sie das Git-Tree zu klonen Sie sich in der Master-Zweig.

# git branch
* master
#

Der * zeigt an, über Ihre aktuellen Zweig.

Erstellen wir eine neue Filiale meiner MenlowRebootFix, in denen wir unseren Code-Änderungen machen wird:

# git branch MenlowRebootFix

Dann müssen Sie die oben genannten neu geschaffenen Zweig auschecken:

# git checkout MenlowRebootFix

Bestätigen Sie, dass Sie in der obigen Zweig sind:

# git branch
*MenlowRebootFix
master
#

Schritt 4: Nehmen Sie Ihre Änderungen

Jetzt werde ich um Änderungen an der Datei vornehmen arch/x86/kernel/reboot.c. Nachdem Sie Ihre Änderungen an der Datei gespeichert und sie geben den folgenden Befehl ein:

# git commit -a

Der obige Befehl wird ein Text-Editor im selben Fenster auf Ihrem Bildschirm-Terminal (mein Standard-Texteditor ist nano) öffnen wie folgt aus:

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch Test1
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: arch/x86/kernel/reboot.c
#

Jetzt geben wir unsere Commit-Log-Nachricht. Seien Sie sehr vorsichtig, was Sie tippen in der Log-Nachricht, weil diese Nachrichten Teil des Linux-Git-Tree-Protokoll und die Menschen werden wird, werden Sie Ihre Suche auf Basis dieser Meldungen zu begehen. Hier ist, was ich eingetippt und hier ist das, was meine endgültige Editor-Fenster sah es so:

x86: Fix reboot problem on VersaLogic Menlow boards

VersaLogic Menlow based boards hang on reboot unless reboot=bios is used. Add quirk to reboot through the BIOS.

Tested on at least four boards.
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch Test1
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: arch/x86/kernel/reboot.c
#

Jetzt wird der Text in blauer Farbe wird Ihr Haupt-Betreff-Zeile der Patch, den Sie per E-Mail und wird auch die Kennung im Git Commit-Log zu werden.

Hinweis: Es ist sehr wichtig, dass Sie zuerst den Namen des Subsystems, auf die Sie das Pflaster gehört. In meinem Fall, da ich Modifizierung der Datei reboot.c mich für die x86-Architektur-Verzeichnis, beginne ich mit dem Betreff-Zeile mit x86:.

Danach müssen Sie eine leere Zeile zu verlassen. und geben Sie dann eine kurze Beschreibung über die Änderung (in kastanienbraune Farbe), die das Changelog des Git-Commit-Log werden wird.

Nicht über den Text in der Farbe Orange, die mit # beginnt zu kümmern. Diese werden durch Git commit ignoriert werden.

and description , your description will become part of the subject line and it will be all mess. Hinweis: Wenn Sie nicht verlassen, eine Leerzeile zwischen Ihren Betreff und eine Beschreibung, Ihre Beschreibung wird ein Teil der Betreff-Zeile werden und es wird alles Durcheinander.

Schritt 5: Generieren Sie Ihre Patch


Nun haben Sie begehen Sie das Pflaster in Ihrem lokalen Git-Repository, ist es Zeit, um den Patch, dass wir an die jeweiligen Betreuer per E-Mail und Mailing-Listen zu generieren. Um Patch erzeugen einfach geben Sie folgenden Befehl ein:

# git format-patch -s -n master..MenlowRebootFix

Dies sollte eine Datei mit 0001-x86-Fix-Neustart-Problem-on-VersaLogic-Menlow-boards.patch in Ihrem aktuellen Verzeichnis, deren Inhalte werden erstellt:

Von 04056e508c996b023857f8076da7fb54096d10e9 Mo Sep 17 2001 00.00.00
Von: Kushal Koolwal <kushalkoolwal@gmail.com>
Date: Wed, 19 Feb 2011 13.14.03 -0800
Subject: [PATCH 1/1] x86: Fix Reboot Problem auf VersaLogic Menlow Boards.
VersaLogic Menlow basierte Boards hängen auf Neustart, es sei denn reboot = bios verwendet wird.

Fügen Sie Quirk, um durch die BIOS neu zu starten.
Getestet auf mindestens vier Brettern.

Signed-off-by: Kushal Koolwal <kushalkoolwal@gmail.com>
-
arch/x86/kernel/reboot.c | 8 + + + + + + + +
1 files changed, 8 Einschübe (+), 0 Deletionen (-)
git diff-a/arch/x86/kernel/reboot.cb/arch/x86/kernel/reboot.c
Index fc7aae1 .. 715037c 100644
- A/arch/x86/kernel/reboot.c
+ + + B/arch/x86/kernel/reboot.c
@ @ -285,6 +285,14 @ @ Static struct __ dmi_system_id initdata reboot_dmi_table [] = {
DMI_MATCH (DMI_BOARD_NAME ", P4S800"),
},
},
+ {/ * Handle Probleme mit dem Neustart auf VersaLogic Menlow Boards * /
+. Callback = set_bios_reboot,
+. Ident = "VersaLogic Menlow basiertes Board",
+. Matches = {
+ DMI_MATCH (DMI_BOARD_VENDOR "VersaLogic Corporation"),
+ DMI_MATCH (DMI_BOARD_NAME "VersaLogic Menlow board"),
+},
+},
{}
};
-
1.7.2.3

Beachten Sie, wie der Name der Datei von Ihrem ersten Zeile des Git-Commit-Log wurde abgeholt. Auch die Option-n fügt die Patch-Nummer [PATCH 1/1], um Ihr Motiv und der Option-s den angemeldeten off-by fügt hinzu: Linie. Die E-Mail, die in der Off-line unterzeichnet abgeholt wird, wird von Ihrem Git-Konfiguration, die Sie in Schritt 1 eingestellt abgeholt.

Schritt 6: Überprüfen Sie Ihre Patch für Fehler

Als nächstes müssen wir sicherstellen, dass der Patch versuchen wir vorlegen werden enthält keine offensichtliche Fehler wie Leerzeichen, mehr als 80 Spalte Limit, etc. Es ist ein Perl-Skript namens checkpath.pl, die mit den Kernel-Quellen für diesen Zweck bereitgestellt wird :

# scripts/checkpatch.pl 0001-x86-Fix-reboot-problem-on-VersaLogic-Menlow-boards.patch

und Sie sollten sehen etwa so aus:

Ausgang:

total: 0 errors, 0 warnings, 14 lines checked
0001-x86-Fix-reboot-problem-on-VersaLogic-Menlow-boards.patch has no obvious style problems and is ready for submission.

Es gibt noch andere Skripte auch innerhalb des Kernel-Source zur Verfügung gestellt zu beheben / Reinigen Sie Ihren Patch wie:

scripts/cleanfile
scripts/cleanpatch

Schritt 7: Testen Sie Ihr Pflaster

Wieder ist es sehr wichtig, dass Sie Ihre Patch gelten für die Linus 'Git-Tree, kompilieren und testen Sie es, bevor Sie das Patch vor.

# git checkout master
# patch -p1 < 0001-x86-Fix-reboot-problem-on-VersaLogic-Menlow-boards.patch
# make-kpkg --append-to-version=test-patch kernel_image kernel_headers

Schritt 8: Hier die Liste der Leute zu Patch einreichen

Angenommen, Ihre Patch erstellt, arbeitete so, wie Sie es haben wollen und Ihre E-Mails Test sah gut aus ist der nächste Schritt, um die Liste der Personen, an die Sorge, sollten Sie Ihren Patch per E-Mail erhalten. Es gibt zwei Methoden, das zu tun:

Methode 1: Verwenden Sie das Skript in den Kernel-Quellen zur Verfügung gestellt

# scripts/get_maintainer.pl 0001-x86-Fix-reboot-problem-on-VersaLogic-Menlow-boards.patch

Ausgang:

Thomas Gleixner <tglx@linutronix.de> (maintainer:X86 ARCHITECTURE...)
Ingo Molnar <mingo@redhat.com> (maintainer:X86 ARCHITECTURE...,commit_signer:5/8=62%)
"H. Peter Anvin" <hpa@zytor.com> (maintainer:X86 ARCHITECTURE...,commit_signer:3/8=38%)
x86@kernel.org (maintainer:X86 ARCHITECTURE...)
Don Zickus <dzickus@redhat.com> (commit_signer:2/8=25%)
Peter Zijlstra <apzijlstra@chello.nl> (commit_signer:2/8=25%)
Borislav Petkov <bp@alien8.de> (commit_signer:1/8=12%)
linux-kernel@vger.kernel.org (open list)
#

Methode 2: finden Sie in der Datei MAINTAINERS

Die andere Methode ist, um auf die beziehen MAINTAINERS -Datei, die bieten im Kernel-Source-Tree ist. Sie müssen mindestens Ihre E-Mail-Patch für all die Menschen, die "M" vor ihrem Namen haben.

Hinweis: Auch Sie brauchen, um Ihre Patch auf mindestens eine Mailing-Liste per E-Mail. Wenn Sie nicht in der Lage jede Mailing-Liste zu finden, auf den beiden oben genannten Methoden basieren, die mit dem Subsystem, an dem Sie versuchen, Ihre Patches einreichen sind betroffen ist, sind dann sollten Sie zumindest E-Mail an Linux Kernel Mailing List (linux-kernel @ vger . kernel.org).

Schritt 9: Testen Sie Ihre E-Mail-Patch

Auch wenn Sie jede E-Mail-Client und SMTP-Host, den Sie wollen und haben Zugang zu verwenden könnte, fand ich, dass die Verwendung von Google Mail war das Beste, da viele Kernel-Entwickler, dass verwenden. Jetzt ist es sehr wichtig, dass Sie zuerst testen Sie Ihr Patch, indem es Ihre eigene E-Mail-Adressen (möglichst unterschiedliche E-Mail Account mit verschiedenen Mail-Providern). Ich verwende die folgenden:

git send-email --smtp-encryption=tls --smtp-server=smtp.gmail.com --smtp-user=kushalkoolwal@gmail.com --smtp-server-port=587 --to "KKoolwal <myname@koolsolutions.com>" --to "Kushal Koolwal <myname@yahoo.com>" --cc "KK <myname@hotmail.com>" 0001-x86-Fix-reboot-problem-on-VersaLogic-Menlow-boards.patch

Nachdem Sie treffen, wird es für Ihr Google Mail-Konto Passwort, das Sie eingeben müssen, um tatsächlich die E-Mail schicken zu fragen.

Überprüfen Sie nun E-Mail-Konten, um zu überprüfen, wenn Sie die E-Mail bekam, und alles sieht gut aus für die Einreichung notiert.

Schritt 10: Schließlich Bitte schicken Sie Ihre Patch

Wenn alles gut aussieht, dann mailen Sie Ihre Patch endlich basierend auf der Liste der Personen, die Sie in Schritt 8 gefunden. Dies ist, was ich tatsächlich landete mit:

# git send-email --smtp-encryption=tls --smtp-server=smtp.gmail.com --smtp-user=kushalkoolwal@gmail.com --smtp-server-port=587 --from "Kushal Koolwal <kushalkoolwal@gmail.com>" --to "Thomas Gleixner <tglx@linutronix.de>" --to "Ingo Molnar <mingo@redhat.com>" --to "H. Peter Anvin <hpa@zytor.com>" --to "x86@kernel.org" --cc "linux-kernel@vger.kernel.org" 0001-x86-Fix-reboot-problem-on-VersaLogic-Menlow-boards.patch

Hier ist das Commit-Log der Annahme meiner Patches von Ingo Molnar, der dann von Ingo Molnar den Baum zu Stephen Rothwell das versickerte linux-next Baum und schließlich in Linus Torvalds Mainline-Linux-Kernel- Baum.

Das ist es! Viel Glück mit Ihrem ersten Patch!

Andere Verwandte Beiträge: