Nach der Arbeit mit Linux (meist als fortgeschrittener Benutzer) für die Jahre, habe ich beschlossen, mein erster Beitrag Linux Kernel-Patch (obwohl trivial, aber hey, müssen Sie irgendwo anfangen!) und ich war begeistert, als sie zum ersten Mal von dem Subsystem Maintainer 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 akzeptiert basiert. Die Führungs meist hebt die Mechanik des Sendens Patches und nicht unbedingt technische Design-Aspekte von Linux-Kernel.

Schritt 1: Installieren Git Werkzeuge

Das erste, was wir tun müssen, ist, um sicherzustellen, dass wir notwendige Werkzeuge für die Erstellung und Einreichung unserer Linux-Kernel-Patch. Ich bin mit meinem Debian Lenny-System für diese wie-.

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

Zusätzlich ist es eine gute Idee, einige wenige Parameter zu konfigurieren, dass Git verwenden, wenn sie Ihr 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 Baum bevorzugt auf Ihrem Linux-Rechner zu klonen. Stellen Sie sicher, Sie haben genug Raum (mindestens 2 GB), bevor Sie den Baum 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 in Ihre Verzeichnis mylinux-2.6 heruntergeladen (Verzeichnis wird automatisch erstellt werden, 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 gemacht Konflikt.

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-Tree Sie in der Master-Zweig sind.

# git branch
* master
#

Der * oben zeigt Ihre aktuellen Zweig.

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

# git branch MenlowRebootFix

Dann müssen Sie die oben neu erstellte Zweig Kasse:

# 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 dem Bogen / / / Datei x86 Kernel reboot.c machen. Nachdem Sie machte die Änderungen an der Datei und sie gespeichert geben Sie den folgenden Befehl:

# git commit -a

Der obige Befehl wird ein Texteditor im gleichen Fenster auf Ihrem Terminal-Bildschirm zu öffnen (meine Standard-Texteditor 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 Protokollmeldung geben, weil diese Nachrichten Teil Linux Git Baumes begehen Protokoll und Menschen werden die Suche Ihren Commit auf diesen Nachrichten. Hier ist, was ich eingetippt und hier ist das, 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 Modifizieren 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 dann eine kurze Beschreibung über Ihre Änderung (in kastanienbraune Farbe), die sich im Changelog des Git Commit-Log wird.

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

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

Schritt 5: Erstellen Sie Ihre Patch


So, jetzt haben Sie begehen Ihren Patch in Ihrem lokalen Git-Repository, ist es Zeit, um den Patch, die wir an 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 Mo 17. September 2001 00.00.00
Von: Kushal Koolwal <kushalkoolwal@gmail.com>
Datum: Sa, 19. Februar 2011 13.14.03 -0800
Betreff: [PATCH 1/1] x86: Fix Reboot Problem VersaLogic Menlow Boards.
VersaLogic Menlow basierten Boards hängen beim Neustart, es sei denn reboot = bios verwendet.

In Marotte, um durch die BIOS neu zu starten.
Getestet auf mindestens vier Boards.

Signed-off-by: Kushal Koolwal <kushalkoolwal@gmail.com>
-
arch / x86 / kernel / reboot.c | 8 ++++++++
1 Dateien geändert, 8 Insertionen (+), 0 Deletionen (-)
diff -git eine / 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 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 wurde von Ihrem ersten Zeile des git commit log abgeholt. Auch die Option -n fügt die Patch-Nummer [PATCH 1/1], um Ihr Motiv und die Option -s fügt die Signed-off-by: line. Die E-Mail, die in der unterzeichneten off line abgeholt wird, wird von der Konfiguration Ihres Git, die Sie in Schritt 1 eingestellt abgeholt.

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

Als nächstes müssen wir sicherstellen, dass der Patch wir versuchen zu unterbreiten hat keine offensichtliche Fehler wie weiße Leerzeichen enthalten, von mehr als 80 Spaltengrenze, 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 so etwas wie dies sehen:

Output:

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 andere Script auch innerhalb des Kernel-Quelle zu beheben / Reinigen Sie Ihren Patch wie vorgesehen:

scripts/cleanfile
scripts/cleanpatch

Schritt 7: Testen Sie Ihr Patch

Wieder ist es sehr wichtig, dass Sie Ihren Patch für die Linus 'Git Baum gelten, kompilieren und testen Sie es, 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 Menschen, Patch einreichen

Angenommen, Ihre Patch kompiliert arbeitete, wie Sie es wollen und Ihren Test-E-Mails sah gut der nächste Schritt ist, um die Liste der Sorge Leute, denen Sie sollten Ihren Patch E-Mail weiterleiten. Es gibt zwei Methoden, das zu tun:

Methode 1: Verwenden Sie das Skript in den Kernel-Quellen bereitgestellt

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

Output:

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, stellen innerhalb der Kernelquellbaum ist. Sie müssen zumindest eine E-Mail Ihre Patch an 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 Subsystem, gegen die Sie versuchen, Ihre Patches einreichen werden, dann sollten Sie zumindest E-Mail an Linux Kernel Mailing List (linux-kernel @ Vger .kernel.org).

Schritt 9: Test Mail Ihre Patch

Obwohl Sie keine E-Mail-Client und SMTP-Host, das Sie nutzen wollen und haben Zugang zu, fand ich, dass die Verwendung von Google Mail war das beste, da eine Menge von Kernel-Entwickler verwenden Sie diese. Jetzt ist es sehr wichtig, dass Sie zunächst Ihre Patch-Test, indem es 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 Enter 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, ob Sie die E-Mail bekam E-Mail Konten und alles sieht gut aus für die Einreichung.

Schritt 10: Schließlich Mail Ihre Patch

. Wenn alles gut aussieht, dann können endlich Email Ihre Patch basiert auf der Liste der Personen, 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!