Efter at have arbejdet med Linux (for det meste som en avanceret bruger) i årevis, besluttede jeg at skrive min første Linux-kernen patch (selv trivielle, men hey, du har brug for at starte et sted!) Og jeg var begejstret, da den først blev accepteret af delsystemet vedligeholder og derefter i sidste ende det sivede ind hovedlinie kerne.

Hvad der følger er en trin-for-trin guide til hvordan du indsende en Linux-kerne patch og håber, at det bliver accepteret i hovedlinie kerne. Dette HOW-TO er baseret på en faktisk patch, jeg skrev og indsendes, og som fik accepteret i hovedlinie kerne i går. Vejledningen fremhæver meste mekanik sende patches og ikke nødvendigvis de tekniske design aspekter af Linux-kernen.

Trin 1: Installer Git Værktøj

Det første, vi skal gøre, er at sørge for, at vi har de nødvendige værktøjer til at oprette og sende vores Linux-kernen patch. Jeg bruger min Debian Lenny system til dette HOW-TO.

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

Derudover er det en god ide at indstille nogle få parametre, som Git vil bruge, når det genererer plasteret:

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

Trin 2: Klon Linus 'Git Tree

Den næste ting du måske ønsker at gøre, er at klone Linus s Git træ helst på din Linux maskine. Sørg for at du har nok plads (mindst 2 GB), før du klone træet. På tidspunktet for dette skrives den samlede størrelse af træet var omkring 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

Nu vente 30 minutter eller deromkring, afhængigt af din internetforbindelse hastighed, før hele træet bliver hentet ind i din mappe mylinux-2,6 (mappe vil blive oprettet automatisk, da du har angivet i kommandoen). Enhver patchwork bør altid ske mod dette træ for at sikre, at dine ændringer ikke kan være i strid med ændringer foretaget af andre udviklere.

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#

Herfra og fremefter alt det arbejde vil ske i /usr/src/mylinux-2.6 mappe.

Trin 3: Nu oprette en lokal afdeling at lave dine ændringer

Som standard, når du klone Git træet, du er i master gren.

# git branch
* master
#

Den * Ovenstående angiver din aktuelle gren.

Lad os oprette en ny filial mine MenlowRebootFix hvor vil vi gøre vores kode ændringer:

# git branch MenlowRebootFix

Så har du brug til kassen ovenstående nyoprettede afdeling:

# git checkout MenlowRebootFix

Bekræft, at du er i ovenstående gren:

# git branch
*MenlowRebootFix
master
#

Trin 4: Foretag dine ændringer

Nu vil jeg til at foretage ændringer buen / x86 / kernel / reboot.c fil. Når du har foretaget dine ændringer til filen og gemte det give følgende kommando:

# git commit -a

Ovenstående kommando vil åbne en teksteditor i det samme vindue på din terminal skærm (min standard tekst editor er nano) på denne måde:

# 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
#

Nu vil vi ind i vores begå log budskab. Vær meget forsigtig med, hvad du skriver i loggen besked, fordi disse meddelelser vil blive en del af Linux Git træ begå log og folk vil være at søge din commit på grundlag af disse meddelelser. Her er, hvad jeg har skrevet i, og her er hvad min sidste redaktør vindue kiggede det:

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
#

Nu teksten i blå farve bliver din vigtigste emnelinjen af plasteret, som du vil e-mail og vil også blive den identifikator i Git begå log.

Bemærk: Det er meget vigtigt, at du først skrive navnet på det delsystem, som plastret tilhører. I mit tilfælde, da jeg modificere reboot.c filen i x86-arkitekturen biblioteket, begynder jeg med emnelinjen med x86:.

Efter at du har brug for at forlade en tom linje. og skriv derefter en kort beskrivelse om din ændring (i rødbrun farve), som vil blive changelog af Git begå log.

Må ikke bekymre dig om teksten i orange farve, der begynder med #. De vil blive ignoreret af Git begå.

and description , your description will become part of the subject line and it will be all mess. Bemærk: Hvis du ikke forlade en tom linje mellem dit emne og beskrivelse, vil din beskrivelse blive en del af emnelinjen, og det vil være alt rod.

Trin 5: Generer plasteret


Så nu har du begår din plaster på dit lokale Git repository, er det tid til at generere plasteret, som vi vil e-mail til de respektive vedligeholdere og postlister. For at generere patch blot give følgende kommando:

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

Dette bør oprette en fil 0001-x86-Fix-reboot-problem-on-VersaLogic-Menlow-boards.patch i din nuværende mappe, hvis indhold vil være:

Fra 04056e508c996b023857f8076da7fb54096d10e9 man 17 sep 00:00:00 2001
Fra: Kushal Koolwal <kushalkoolwal@gmail.com>
Dato: Sat, 19 Feb 2011 13:14:03 -0800
Emne: [PATCH 1/1] x86: Løs reboot problem på VersaLogic Menlow bestyrelser.
VersaLogic Menlow baserede boards hænge på genstart, medmindre genstart = BIOS er brugt.

Tilføj ejendommelighed at genstarte gennem BIOS.
Testet på mindst fire bestyrelser.

Signeret-off-by: Kushal Koolwal <kushalkoolwal@gmail.com>
-
arch / x86 / kernel / reboot.c | 8 ++++++++
1 filer ændres, 8 insertioner (+), 0 deletioner (-)
diff -git a / arch / x86 / kernel / reboot.cb / arch / x86 / kernel / reboot.c
indeks fc7aae1..715037c 100.644
- A / arch / x86 / kernel / reboot.c
+++ B / arch / x86 / kernel / reboot.c
@@-285,6 +285,14@@Statisk struct dmi_system_id __initdata reboot_dmi_table [] = {
DMI_MATCH (DMI_BOARD_NAME "P4S800"),
},
},
+ {/ * Håndtere problemer med genstart på VersaLogic Menlow boards * /
+ .callback = Set_bios_reboot,
+ .ident = "VersaLogic Menlow baseret board",
+ .matches = {
+ DMI_MATCH (DMI_BOARD_VENDOR, "VersaLogic Corporation"),
+ DMI_MATCH (DMI_BOARD_NAME, "VersaLogic Menlow board"),
+},
+},
{}
};
-
1.7.2.3

Bemærk, hvordan navnet på filen blev plukket fra dit første linje i Git commit log. Også mulighed -n tilføjer patch nummer [PATCH 1/1] på dit motiv og -s indstilling tilføjer Signed-off-by: linie. Den e-mail, der er plukket i den underskrevne off line er plukket fra din Git konfiguration, du har angivet i trin 1.

Trin 6: Tjek din patch til fejl

Næste vi nødt til at sørge for, at plasteret vi forsøger at indsende indeholder ingen åbenlyse fejl som hvide rum, der overstiger kolonne grænse mv 80 Der er et Perl-script kaldet checkpath.pl, der er forsynet med kerne kilder til dette formål :

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

og du bør se noget som dette:

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.

Der er andre scripts også leveres inde i kernen kilde til at fastsætte / rense din patch som:

scripts/cleanfile
scripts/cleanpatch

Trin 7: Test din patch

Igen er det meget vigtigt, at du anvender din patch til Linus 'Git træet, kompilere det og teste det, før du sender din patch opstrøms.

# 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

Trin 8: Få listen over folk til at indsende patch til

Antages plasteret kompileret, arbejdede den måde, du vil have det til og din test e-mails så godt det næste skridt er at få listen over bekymring mennesker, som skal du e-mail din patch. Der er to metoder til at gøre det:

Metode 1: Brug scriptet forudsat i kerne-kildekode

# 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)
#

Metode 2: Se den vedligeholderne fil

Den anden metode er at henvise til vedligeholderne fil, der er giver inde i kerne-kildekode træet. Du er nødt til i det mindste sende din patch til alle de mennesker, der har "M" før deres navn.

Bemærk: Også du har brug for at e-maile din patch til mindst én postliste. Hvis du ikke er i stand til finde nogen postliste, baseret på de to ovennævnte metoder, der er bekymret med delsystemet mod hvilken du forsøger at indsende din plaster, så skal du i hvert fald e-mail til Linux Kernel Mailing List (linux-kernel @ vger .kernel.org).

Trin 9: Test Email plasteret

Selvom du kunne bruge enhver e-mail-klient og SMTP-vært, du ønsker, og få adgang til, fandt jeg, at var den bedste at bruge Gmail, da en masse kerne udviklere bruger det. Nu er det meget vigtigt, at du først teste din patch ved at sende den til din egen e-mail-adresser (mulige forskellige e-mail-konto med forskellige mail-udbydere). Jeg bruger følgende:

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

Når du trykker enter, vil det bede om din Gmail-konto password, som du skal indtaste for at rent faktisk at sende e-mail.

Nu kontrollere e-mail konti, der er anført ovenfor for at kontrollere, om du fik e-mailen og alt ser godt for indsendelse.

Trin 10: Endelig Email plasteret

. Hvis alt ser ud lige så du endelig e-maile dit plaster baseret på listen over personer, du fandt i trin 8 Dette er, hvad jeg faktisk endte med at bruge:

# 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

Her er, at begå log af accept af mit plaster af Ingo Molnar, som derefter dryppede fra Ingo Molnar s træ til Stephen Rothwell s linux-next træ og til sidst ind Linus Torvalds hovedline Linux-kerne træ.

Det er det! Held og lykke med din første patch!

Være selskabelig, Del!