Nach der Arbeit mit Linux (meist als fortgeschrittener Benutzer) für die Jahre, habe ich beschlossen, meine erste Post Linux Kernel-Patch (obwohl trivial, aber hey, müssen Sie irgendwo anfangen!) und ich war begeistert, als sie zum ersten Mal von der Subsystem-Betreuer akzeptiert und dann letztlich ist es rieselte in Mainline-Kernel.

Was folgt, ist ein Schritt-für-Schritt Anleitung, wie man einen Linux-Kernel einreichen Patch und hoffen, dass sie leicht in den Mainline-Kernel akzeptiert. Diese wie-auf einem tatsächlichen Patch, die ich geschrieben und eingereicht und die habe gestern in Mainline-Kernel eingegangen worden. Der Leitfaden hebt meist die Mechanik Senden Patches und nicht unbedingt technische Design Aspekte der Linux-Kernel.

Schritt 1: Installieren Git Werkzeuge

Das erste, was wir tun müssen, ist, um sicherzustellen, dass wir über die erforderlichen Werkzeuge zum Erstellen und senden Sie unseren Linux-Kernel-Patch. Ich bin mit meinem Debian Lenny-System für diese HOW-TO.

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

Außerdem ist es eine gute Idee, einige wenige Parameter zu konfigurieren, dass Git verwenden, wenn Sie an Patch erzeugt:

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

Schritt 2: Klon Linus 'Git-Baum

Das nächste, was können Sie zu tun ist, um Linus 'Git-Tree vorzugsweise auf Ihrem Linux-Rechner zu klonen. Achten Sie darauf, genügend Platz (mindestens 2 GB), bevor Sie den Baum zu klonen. Zum Zeitpunkt des Schreibens dieses Artikels die Gesamtgröße des Baumes war um 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 warten Sie 30 Minuten oder so, je nach Geschwindigkeit Ihrer Internetverbindung, bevor der gesamte Baum wird in Ihrem Verzeichnis mylinux-2.6 heruntergeladen (Verzeichnis wird automatisch erstellt, da Sie im Befehl angegeben haben). Jede Patchwork sollte immer gegen diesen Baum getan, um sicherzustellen, dass Ihre Änderungen möglicherweise nicht mit Änderungen von anderen Entwicklern in Konflikt geraten werden.

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 die Änderungen zu machen

Standardmäßig, wenn Sie klonen die Git-Baum Sie in der Master-Zweig sind.

# git branch
* master
#

Der * oben zeigt Ihre aktuellen Zweig.

Lassen Sie uns eine neue Niederlassung meine MenlowRebootFix, in dem wir unseren Code-Änderungen zu tun:

# git branch MenlowRebootFix

Dann müssen Sie die oben genannten neu geschaffenen Filiale Kasse:

# git checkout MenlowRebootFix

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

# git branch
*MenlowRebootFix
master
#

Schritt 4: Nehmen Sie die Änderungen

Jetzt werde ich Änderungen an der arch / / / Datei x86 Kernel reboot.c machen. Nachdem Sie aus Ihren Änderungen an der Datei gespeichert und geben den folgenden Befehl ein:

# git commit -a

Mit diesem Befehl werden in einem Texteditor im gleichen Fenster auf Ihrem Terminal-Bildschirm zu öffnen (mein Standard-Text-Editor ist nano) 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 werden wir geben unseren Logmeldung. Seien Sie sehr vorsichtig, was Sie in der Log-Nachricht eingeben, da diese Nachrichten Teil des Linux-Git-Tree zu begehen Protokoll und Menschen werden die Suche Ihren Commit auf diese Meldungen basierend. Hier ist was ich eingegeben und hier ist, was meine letzte Editorfenster sah es:

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 ist der Text in blauer Farbe werden Ihre Hauptbetreffzeile der Patch, den Sie per E-Mail und wird sich auch die Kennung im Git Commit-Log.

Hinweis: Es ist sehr wichtig, dass Sie zuerst den Namen des Subsystems an die Ihr Patch gehört. In meinem Fall, da ich Modifizierung der reboot.c Datei in der x86-Architektur-Verzeichnis, beginne ich mit Betreffzeile mit x86:.

Danach müssen Sie eine Leerzeile zu verlassen. und geben Sie eine kurze Beschreibung über die Änderung zu (in kastanienbraune Farbe), die sich im Changelog des Git Commit-Log wird.

Nicht um den Text in der orange Farbe, die mit # beginnt zu kümmern. Diese werden von Git ignoriert begehen.

and description , your description will become part of the subject line and it will be all mess. Hinweis: Wenn Sie lassen Sie eine Leerzeile zwischen Motiv und Beschreibung wird Ihrer Beschreibung Teil der Betreffzeile zu werden, und es wird alles Durcheinander.

Schritt 5: Erstellen Sie Ihre Patch


So, jetzt haben Sie zu begehen Sie das Pflaster in Ihrem lokalen Git-Repository, ist es Zeit, um den Patch, die wir auf die jeweiligen Betreuer und Mailinglisten per E-Mail zu generieren. So generieren Patch geben Sie einfach den folgenden Befehl ein:

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

Dies sollte eine Datei zu erstellen 0001-x86-Fix-Neustart-Problem-on-VersaLogic-Menlow-boards.patch in Ihrem aktuellen Verzeichnis, dessen Inhalt wird sein:

Von 04056e508c996b023857f8076da7fb54096d10e9 Mon 17. September 2001 00.00.00
Von: Kushal Koolwal <kushalkoolwal@gmail.com>
Datum: Sa, 19. Februar 2011 13.14.03 -0800
Thema: [PATCH 1/1] x86: Fix Neustart Problem auf VersaLogic Menlow Platten.
VersaLogic Menlow Stoffplatten hängen beim Neustart, wenn reboot = bios verwendet.

Fügen Marotte, um durch die BIOS neu starten.
Getestet auf mindestens vier Karten.

Signed-off-by: Kushal Koolwal <kushalkoolwal@gmail.com>
-
arch / x86 / kernel / reboot.c | 8 ++++++++
1 Dateien geändert, 8 Insertionen (+), 0 Löschungen (-)
diff -git ein / arch / x86 / kernel / reboot.cb / arch / x86 / kernel / reboot.c
Index fc7aae1..715037c 100.644
- 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 Platten * /
+ .callback = Set_bios_reboot,
+ .ident = "VersaLogic Menlow basiertes Board",
+ .matches = {
+ DMI_MATCH (DMI_BOARD_VENDOR "VersaLogic Unternehmen"),
+ DMI_MATCH (DMI_BOARD_NAME "VersaLogic Menlow board"),
+},
+},
{}
};
-
1.7.2.3

Beachten Sie, wie der Name der Datei aus Ihrem ersten Zeile des git commit log gerichtet. Auch die Option -n fügt die Patch-Nummer [PATCH 1/1], um Ihr Motiv und die Option -s fügt die Unterzeichnung-off-nach Zweigen. Die E-Mail, die in der signierten offline abgeholt wird, wird von der Konfiguration Ihres Git die Sie in Schritt 1 ausgewählt.

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

Als nächstes müssen wir sicherstellen, dass der Patch wir versuchen zu unterbreiten hat keine offensichtliche Fehler wie Leerräume enthalten, mehr als 80-Säule Grenze, etc. Es ist ein Perl-Skript namens checkpath.pl, die mit den Kernel-Quellen für diesen Zweck vorgesehen ist, :

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

und Sie sollten etwas sehen:

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 auch andere Skripte auch in der Kernel-Quelle zu beheben / säubern Sie Ihren Patch wie vorgesehen:

scripts/cleanfile
scripts/cleanpatch

Schritt 7: Testen des Patches

Auch hier ist es sehr wichtig, dass Sie Ihre Patch auf der Linus 'Git-Tree gelten, zu kompilieren und zu testen, bevor Sie das Patch im Upstream.

# 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: Holen Sie sich die Liste der Personen, um Patch einreichen

Angenommen, Ihre Patch erstellt, bearbeitet, wie Sie es wollen und Ihr Test-E-Mails sah gut der nächste Schritt, um die Liste der Sorge Leute, denen Sie sollte Ihr Patch per E-Mail zu erhalten. Es gibt zwei Möglichkeiten, dies 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: Siehe MAINTAINERS Datei

Die andere Methode ist, um zum beziehen MAINTAINERS Datei, bieten in der Kernelquellen ist. Sie müssen zumindest eine E-Mail Ihr Patch, um alle Menschen, die "M" vor ihrem Namen haben.

Hinweis: Auch Sie, den Patch an mindestens einer Mailing-Liste per E-Mail benötigen. Wenn Sie nicht in der Lage zu finden jede Mailing-Liste, auf der Grundlage der beiden oben genannten Methoden sind, ist, dass sich mit der Untersystem, gegen das Sie versuchen, Ihre Patches einreichen können, dann sollten Sie zumindest E-Mail an Linux Kernel Mailing List (linux-kernel @ Vger .kernel.org).

Schritt 9: Testen Sie Ihre E-Mail-Patch

Obwohl Sie keine E-Mail-Client und SMTP-Host, die Sie wollen zu nutzen und haben Zugang zu, fand ich, dass die Verwendung von Google Mail war das Beste, da viele Kernel-Entwickler verwendet diesen. Jetzt ist es sehr wichtig, dass Sie zuerst Ihre Patch zu testen, indem sie Ihre eigene E-Mail-Adressen (mögliche andere E-Mail-Konto mit verschiedenen Mail-Anbieter). Ich benutze 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 die Eingabetaste drücken, wird es für Ihr Google Mail-Konto-Passwort, die Sie, um die E-Mail tatsächlich senden eingeben müssen fragen.

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

Schritt 10: Schließlich Mail Ihre Patch

. Wenn alles gut aussieht, dann schließlich E-Mail Ihr Patch auf der Grundlage der Liste der Menschen, die Sie in Schritt 8 gefunden Dies ist, was ich eigentlich mit endete:

# 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, dass zu begehen Protokoll der Annahme meiner Patch von Ingo Molnar, die dann von Ingo Molnar Baum Stephen Rothwell ist rieselte linux-next Baum und schließlich in Linus Torvalds Mainline Linux-Kernel- Baum.

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

Kontaktfreudig sein, Aktie!