Nach der Arbeit mit Linux (meist als eine fortgeschrittene Anwender) für die Jahre, habe ich beschlossen, mein erster Beitrag Linux-Kernel-Patch (obwohl trivial, aber hey, man muss irgendwo anfangen!) und ich war begeistert, als sie zum ersten Mal von der Subsystem-Betreuer akzeptiert und dann letztlich ist es sickerte in Mainline-Kernel.

Was folgt, ist eine 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 habe und die gestern in Mainline-Kernel akzeptiert basiert. Der Leitfaden hebt meist die Mechanik des Senden-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 notwendigen Werkzeuge, um erstellen und unsere Linux-Kernel-Patch. Ich bin mit meinem Debian Lenny-System für diese wie-.

# 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 es Ihre Patch erzeugt:

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

Schritt 2: Clone Linus 'Git Baum

Das nächste, was können Sie zu tun ist, um Linus 'Git-Tree vorzugsweise auf Ihrem Linux-Rechner zu klonen. Stellen Sie sicher, dass Sie genügend Platz haben (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 die Ä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 Niederlassung in meiner MenlowRebootFix dem wir unsere Code-Änderungen zu tun:

# git branch MenlowRebootFix

Dann müssen Sie die oben neu geschaffenen 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 die Änderungen vorgenommen, um die Datei gespeichert und geben Sie den folgenden Befehl:

# git commit -a

Der obige Befehl wird ein Text-Editor 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 unsere begehen geben Protokollmeldung. Seien Sie sehr vorsichtig, was Sie in der Protokollmeldung geben, weil diese Nachrichten werden Teil des Linux-Git-Tree zu begehen Protokoll und Menschen werden auf der Suche Commit auf diesen Nachrichten. Hier ist, was ich eingegeben, 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 in der Git Commit-Protokoll.

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 (in kastanienbraune Farbe), die sich im Changelog des Git Commit-Protokoll wird.

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

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 Motiv und Beschreibung wird Ihrer Beschreibung Teil der Betreffzeile werden und es wird alles Durcheinander.

Schritt 5: Generieren Sie Ihre Patch


So, jetzt haben Sie begehen Ihren Patch im lokalen Git-Repository, ist es Zeit, um den Patch, die wir an die jeweiligen Betreuer und Mailinglisten per E-Mail zu erzeugen. 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 Neustart Problem auf VersaLogic Menlow Platten.
VersaLogic Menlow Stoffplatten hängen beim Neustart, es sei denn reboot = bios verwendet.

Fügen 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 verä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@@Statische Struktur 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 anmelden abgeholt. Auch die Option-n fügt die Patch-Nummer [PATCH 1.1], um das Motiv und die Option-s fügt die Signed-off-by: line. Die E-Mail, die in der Linie abgezeichnet abgeholt wird, wird von der Konfiguration Ihres Git, die Sie in Schritt 1 ausgewählt.

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

Als nächstes müssen wir sicherstellen, dass der Patch die wir versuchen zu unterwerfen hat keine offensichtliche Fehler wie Leerzeichen enthalten, 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 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 andere Skripte auch innerhalb des Kernel-Quelle zu beheben / säubern 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-Tree 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 erstellt, bearbeitet, wie Sie es wollen, und Ihre E-Mails Test sah gut aus ist der nächste Schritt, um die Liste der Sorge Leute, denen Sie das Pflaster E-Mail. 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

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: Lesen Sie die Datei MAINTAINERS

Die andere Methode ist, um zum beziehen MAINTAINERS Datei, die bieten in der Kernelquellbaum ist. Sie müssen zumindest eine E-Mail Ihren Patch für alle die 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 E-Mail an Ihre Patch

Obwohl Sie keine E-Mail-Client und SMTP-Host, die Sie nutzen wollen und haben Zugang zu, fand ich, dass die Verwendung von Google Mail war die beste, da viele Kernel-Entwickler verwenden Sie diese. Jetzt ist es sehr wichtig, dass Sie Ihre erste Patch zu testen, indem es Ihre eigene E-Mail-Adressen (E-Mail-Konto möglich verschiedene mit unterschiedlichen Mail-Anbieter). 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 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 zu überprüfen, ob Sie die E-Mail bekam E-Mail-Konten und alles sieht gut aus für die Vorlage.

Schritt 10: Endlich E-Mail Ihre Patch

. Wenn alles gut aussieht, dann können endlich E-Mail Ihr Patch basiert auf der Liste der Menschen, die Sie in Schritt 8 gefunden 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 Commit-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!