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-Maintainer akzeptiert und dann letztlich ist es rieselte 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. Dieser HOW-TO auf einem tatsächlichen Patch, schrieb ich auf und abgegeben und die gestern in Mainline-Kernel akzeptiert habe. Die Führungs meist betont die Mechanik 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 über die erforderlichen Tools zur Erstellung und Einreichung unserer Linux-Kernel-Patch. Ich bin mit meinem Debian Lenny-System für dieses HOW-TO.

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

Darüber hinaus ist es eine gute Idee, einige wenige Parameter, die Git verwenden, wenn es Ihre Patch erzeugt konfigurieren:

# 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 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 ganze Baum wird in Ihrem Verzeichnis mylinux-2.6 heruntergeladen (Verzeichnis wird automatisch erstellt, da Sie in der Befehls angegeben haben werden.) Jede Patchwork sollte immer gegen diesen Baum getan, um sicherzustellen, dass die Änderungen möglicherweise nicht mit Änderungen von anderen Entwicklern gemacht Konflikt 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 die Git-Tree klonen Sie sind in der Master-Zweig.

# git branch
* master
#

Die oben * zeigt Ihren 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 neu erstellten 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 Datei vornehmen arch/x86/kernel/reboot.c. Nachdem Sie die Änderungen an der Datei gespeichert und geben den folgenden Befehl ein:

# git commit -a

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

# 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 unser Engagement Log-Nachricht. Seien Sie sehr vorsichtig, was Sie in der Log-Nachricht eingeben, da diese Meldungen Teil der Linux-Git-Tree-Protokoll und sich verpflichten, Menschen werden auf der Suche Ihrer begehen auf diesen Nachrichten. Hier ist, was ich tippte, und hier ist das, was meine letzte Editorfenster sah es aus:

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 wird Ihr Hauptbetreffzeile der Patch, den Sie per E-Mail zu und wird auch die Kennung in das Git-Commit-Protokoll zu werden.

Hinweis: Es ist sehr wichtig, dass Sie zunächst den Namen des Subsystems an die Ihr Patch gehört. In meinem Fall, da ich reboot.c Änderung der Datei in dem Verzeichnis x86-Architektur, beginne ich mit Betreff-Zeile 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 werden wird.

Sie nicht über den Text in orange Farbe, die mit # beginnt kümmern. Diese werden durch Git Commit ignoriert.

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: Erstellen Sie Ihre Patch


So, jetzt haben Sie sich verpflichten Ihre Patch im lokalen Git-Repository, ist es Zeit, den Patch, die wir an die jeweiligen Betreuer und Mailinglisten per E-Mail zu generieren. Um Patch erzeugen geben Sie einfach den folgenden Befehl ein:

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

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

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 VersaLogic Menlow Platten.
VersaLogic Menlow Stoffplatten hängen Neustart, es sei denn reboot = bios verwendet.

In Marotte durch das BIOS neu zu starten.
Getestet auf mindestens vier Brettern.

Signed-off-by: Kushal Koolwal <kushalkoolwal@gmail.com>
-
arch/x86/kernel/reboot.c | 8 + + + + + + + +
1 Dateien geändert, 8 Insertionen (+), 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 __ initdata dmi_system_id reboot_dmi_table [] = {
DMI_MATCH (DMI_BOARD_NAME ", P4S800")
}
}
+ {/ * Handle Probleme mit dem Neustart auf VersaLogic Menlow Platten * /
+. Rückruf = set_bios_reboot,
+. Ident = "VersaLogic Menlow basiertes Board",
+. Einstimmt = {
+ 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-Protokoll aufgenommen. 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 off-line unterzeichnet 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 weiße Leerzeichen enthalten, mehr als 80 Spalte 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:

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 auch andere Skripte innerhalb des Kernel-Quelle zu beheben / reinigen Ihre Patch dergleichen vorgesehen:

scripts/cleanfile
scripts/cleanpatch

Schritt 7: Testen Sie Ihr Patch

Auch hier ist es sehr wichtig, dass Sie Ihren Patch auf die Linus 'Git-Tree gelten, kompilieren und testen, bevor Sie den 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 Ihr Test-E-Mails sah gut der nächste Schritt, um die Liste der Personen, an die Sorge, sollten Sie Ihre E-Mail-Patch 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

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

Die andere Methode ist, um zum beziehen MAINTAINERS -Datei, die im Kernel-Source-Tree bieten wird. Sie müssen mindestens eine E-Mail den Patch an alle Menschen, die "M" vor ihren Namen haben.

Hinweis: Darüber hinaus müssen Sie den Patch an mindestens einer Mailing-Liste per E-Mail. 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 die Sie versuchen, Ihren Patch, dann sollten Sie zumindest E-Mail an Linux-Kernel Mailing List (linux-kernel @ Vger einreichen . kernel.org).

Schritt 9: Testen Sie Ihre E-Mail-Patch

Obwohl Sie keine E-Mail-Client und SMTP-Host, den Sie verwenden möchten 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 (mögliche andere E-Mail-Konto mit anderen 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 eingeben, um die E-Mail tatsächlich senden müssen fragen.

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

Schritt 10: Schließlich Mail Ihre Patch

. Wenn alles gut aussieht, dann schließlich per E-Mail Ihre Patch auf der Grundlage der Liste der Leute, 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 das Protokoll verpflichten der Annahme meiner Patch von Ingo Molnar, der dann von Ingo Molnar Baum rieselte Stephen Rothwell von 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, teilen!