HOWTO: Opret og send din første Linux kernel patch med GIT
Efter at have arbejdet med Linux (primært som en avanceret bruger) i år, besluttede jeg at skrive min første Linux kernel patch (selvom triviel, men hey du skal starte et sted!), og jeg blev begejstret, da det først blev accepteret af delsystemet vedligeholder og derefter sidste ende er det sivede ind i fjerntrafikken 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 hovedline kernen. Denne vejledning er baseret på en egentlig patch, som jeg skrev og indsendes, og som blev accepteret i fjerntrafikken kernen i går. Guiden meste fremhæver mekanikken i at sende patches og ikke nødvendigvis tekniske konstruktionsspecifikationer 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 kernel patch. Jeg bruger mit Debian Lenny system Denne vejledning.
# apt-get update
# apt-get install git git-email gitk
Derudover er det en god idé at indstille nogle få parametre, der 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: Clone 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å det tidspunkt 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 i 30 minutter eller deromkring, afhængigt af din internetforbindelse hastighed, før hele træet bliver hentet ind i din mappe mylinux-2.6 (bibliotek 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 modstrid 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 frem alt det arbejde vil blive udført i / usr/src/mylinux-2.6 mappe.
Trin 3: Nu kan du oprette en lokal afdeling til at foretage dine ændringer
Som standard, når du klone Git træet du er i master gren.
# git branch
* master
#
Den * Ovenstående viser din nuværende gren.
Lad os skabe en ny filial min MenlowRebootFix, hvor vi vil gøre vores kodeændringer:
# git branch MenlowRebootFix
Så har du brug for at tjekke ovenstående nyoprettede afdeling:
# git checkout MenlowRebootFix
Bekræft, at du er i ovenstående branche:
# git branch
*MenlowRebootFix
master
#
Trin 4: Foretag dine ændringer
Nu vil jeg til at foretage ændringer i arch/x86/kernel/reboot.c fil. Når du har foretaget dine ændringer af filen og gemt 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) som her:
# 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 commit log budskab. Vær meget forsigtig med hvad du skriver i logmeddelelse, fordi disse meddelelser vil blive en del af Linux Git træ begå log, og folk vil være at søge din begå baseret på disse budskaber. Her er hvad jeg har skrevet i, og her er hvad min sidste redigeringsvinduet så 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 emnelinje af plasteret, at du vil e-mail og vil også blive identifikator i Git commit log.
Bemærk: Det er meget vigtigt, at du først skrive navnet på det delsystem, som plaster tilhører. I mit tilfælde, da jeg ændre reboot.c filen i x86-arkitekturen biblioteket, jeg begynder med emnelinje med x86:.
Efter at du er nødt til at forlade en tom linje. og skriv derefter en kort beskrivelse om din ændring (i rødbrun farve), som vil blive changelog af Git commit log.
Må ikke bekymre dig om teksten i orange farve, der begynder med #. De vil blive ignoreret af Git commit.
and description , your description will become part of the subject line and it will be all mess. Bemærk: Hvis du ikke efterlader en tom linje mellem dit emne og beskrivelse, vil din beskrivelse blive en del af emnelinjen, og det vil være alle rod.
Trin 5: Generer din patch
Så nu har du begår dit plaster i din lokale Git arkiv, er det tid at generere den patch, som vi vil e-mail til de respektive vedligeholdere og mailinglister. 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 aktuelle bibliotek, 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: Fix reboot problem på VersaLogic Menlow boards.
VersaLogic Menlow baserede boards hænge på reboot medmindre reboot = bios bruges.
Tilføj særhed at genstarte via BIOS.
Testet på mindst fire boards.
Underskrevet-off-by: Kushal Koolwal <kushalkoolwal@gmail.com>
-
arch/x86/kernel/reboot.c | 8 + + + + + + + +
1 ændrede filer, 8 insertioner (+), 0 deletioner (-)
diff-git a/arch/x86/kernel/reboot.cb/arch/x86/kernel/reboot.c
indeks 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"),
}
}
+ {/ * Håndtere problemer med genstart på VersaLogic Menlow boards * /
+. Tilbagekald = set_bios_reboot,
+. Ident = "VersaLogic Menlow baseret board",
+. Kampe = {
+ DMI_MATCH (DMI_BOARD_VENDOR, "VersaLogic Corporation"),
+ DMI_MATCH (DMI_BOARD_NAME, "VersaLogic Menlow board"),
+},
+},
{}
};
-
1.7.2.3
Bemærk, hvordan navnet på den fil blev hentet fra din første linje af Git commit log. Også option-n tilføjer patchen nummer [PATCH 1/1] til dit emne og-s indstilling tilføjer Signeret-off-by: line. Den e-mail, der er plukket i underskrevet off line er plukket fra din Git konfiguration, som du har angivet i trin 1.
Trin 6: Tjek din patch for fejl
Dernæst skal vi sørge for, at plasteret, vi forsøger at indsende ikke indeholder åbenlyse fejl som hvide rum, der overstiger 80 kolonne grænse osv. Der er et Perl-script kaldet checkpath.pl, der er forsynet med de 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å forudsat inde i kerne-kildekode at fastsætte / rense din patch som:
scripts/cleanfile
scripts/cleanpatch
Trin 7: Test din patch
Igen er det meget vigtigt, at du anvender plaster på Linus 'Git træ, kompilere det og teste det, før du sender din plaster 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å en liste over folk til at indsende patch til
Forudsat plasteret udarbejdet, arbejdede den måde du ønsker det, og dine test-e-mails så godt ud det næste skridt er at få en liste over de vedrører personer, som du skal sende din plaster. Der er to metoder til at gøre det:
Metode 1: Brug script, der leveres 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 Vedligeholdere fil
Den anden metode er at henvise til vedligeholdere fil, der er giver inde i kerne-kildekode træet. Du skal mindst e-plastret til alle de mennesker, der har "M" før deres navn.
Bemærk: Også du har brug for at sende din patch til mindst en postliste. Hvis du ikke er i stand til finde en adresseliste, baseret på de to ovennævnte metoder, der beskæftiger sig med delsystemet imod, som du forsøger at indsende dit plaster, så bør du i det mindste e-mail til Linux Kernel Mailing List (linux-kernel @ vger . kernel.org).
Trin 9: Test Email plasteret
Selvom du kan bruge hvilken som helst e-mail-klient og SMTP-vært, du ønsker og har adgang til, fandt jeg at bruge Gmail var den bedste, da en masse kerne udviklere bruge den. Nu er det meget vigtigt, at du først teste din plaster ved at sende den til din egen e-mail-adresser (mulighed for anden 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 på Enter, vil det bede om din Gmail-konto adgangskode, som du skal indtaste for at rent faktisk sende e-mailen.
Nu tjekke e-mail-konti, der er anført ovenfor for at kontrollere, om du fik e-mailen og alt ser godt ud for indsendelse.
Trin 10: Endelig Email plasteret
Hvis alt ser lige så du endelig sende din plaster baseret på listen over personer, du fandt i trin 8. Det er, hvad jeg rent 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 accepten af mit plaster af Ingo Molnar, som derefter dryppede fra Ingo Molnar har træ til Stephen Rothwell s linux-next træ og til sidst ind i Linus Torvalds hovedledning Linux-kerne træ.
Det er det! Held og lykke med din første patch!











11 Marts 2011 kl 9:19 am
Hej mit navn er Abderrahmane i'am fra Algeriet
først undskyld for mit engelsk.
du har en Debian-systemet kører som server, vil jeg gerne tilføje nogle service som stjerne og messaging, skal jeg copmile kernen til at gøre en brugerdefineret system,
mit mål er at gøre brugerdefinerede debian, at efter instalation fra cd eller live cd min serverice vil være klar til at køre som atsrisk apache ...
tak en masse
Svar på denne kommentar
April 7, 2011 kl 00:31 am
Hej,
tak for denne store howto rejsende!
Jeg tror, der er en lille fejl. Jeg tror, det shold være "patch-p1 <0001-x86-Fix-reboot-problem-on-VersaLogic-Menlow-boards.patch" i stedet for "patch-p1 0001-x86-Fix-reboot-problem-on-VersaLogic- Menlow-boards.patch ".
Regard,
Tom
Svar på denne kommentar
21 juni, 2011 kl 12:11
Fremragende HOWTO med hvad jeg fik min patch let oprettes og inkluderet i Linux-kernen udviklingsprocessen. Tak.
Kompilering af testen kerne kan være en lille smule udfordrende for os newbiez. Her er en glimrende wiki til at hjælpe på Ubuntu-systemer:
https://wiki.ubuntu.com/KernelTeam/GitKernelBuild .
Br Thomas
Svar på denne kommentar
30 Juni 2011 kl 11:36
Hej,
Her er noget lignende fokuseret på indlejrede systemer - søg
2010-10 Hvordan man laver en GNU / Linux kernel patch - Embedded live London
http://www.reliableembeddedsystems.com/publications.html
Regards,
Robert
Svar på denne kommentar
23 juli 2011 kl 6:59 am
Tak for en klar og teknisk how-to. Du er en inspiration til
os i Debian og Linux-fællesskabet.
Siden, du har formel kandidat uddannelse, yderligere bog referencer sådan
så hvorfor programmer mislykkes kan være nyttig.
http://www.amazon.com/Why-Programs-Fail-Systematic-Debugging/dp/1558608664
Svar på denne kommentar
25 September 2011 kl 3:19 am
Jeg er stadig lære om Ubuntu. Langt væk til at lappe kernen. Lol
Svar på denne kommentar
18 oktober 2011 kl 11:13
really nice tutorial om HOWTO:. oprette og sende din første Linux kernel patch med GIT Tak for det ...
og jeg har en linux blog på min egen ... http://www.linuxthebest.com/root-in-ubuntu-tutorial.html
tak
Svar på denne kommentar
25 januar, 2012 kl 08:05
[...] Restriktiv om stil mail, plaster, osv., se FAQ af kernen listen. Men der er en dejlig tutorial til at undgå det meste af [...]
9 Februar 2012 kl 15:48
Tak for den store primer. Forsøger at tilføje git til min kode indsendelse proces.
Svar på denne kommentar