HOWTO: Opret og indsende din første Linux-kerne patch hjælp GIT
Efter at have arbejdet med Linux (mest som en avanceret bruger) for år, besluttede jeg at skrive min første Linux-kerne patch (selvom trivielt, men hey du nødt til at starte et sted!) og jeg var begejstret, når det først blev accepteret af delsystemet vedligeholder og derefter sidste ende sivede ind hovedspor kernen.
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 den hovedspor kernen. Dette HOW-TO er baseret på en egentlig patch, som jeg skrev og indsendt og som fik accepteret i mainline-kernen i går. Guiden meste fremhæver mekanikken i at sende patches og ikke nødvendigvis tekniske udformning aspekter af Linux-kernen.
Trin 1: Installer Git Tools
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 indsende vores Linux-kernen patch. Jeg bruger min Debian Lenny system for dette HOW-TO.
# apt-get update
# apt-get install git git-email gitk
Derudover er det en god ide 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æet 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 venter i 30 minutter eller deromkring, afhængig 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 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 fremefter alt arbejdet vil blive udført i / usr/src/mylinux-2.6 bibliotek.
Trin 3: Nu kan du oprette en lokalafdeling 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 filial.
Lad os oprette en ny filial min MenlowRebootFix hvor vi vil gøre vores kodeændringer:
# git branch MenlowRebootFix
Så har du brug for at kassen 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 til filen og gemt den giver følgende kommando:
# git commit -a
Ovenstående kommando vil åbne en teksteditor i samme vindue på din terminal skærm (min standard teksteditor 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 loggen besked, fordi disse meddelelser bliver en del af Linux Git træ begå log, og folk vil være at søge din begå baseret på disse meddelelser. Her er hvad jeg har skrevet i, og her er hvad min endelige editor vinduet 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 i plasteret, at du vil e-maile og vil også blive den id i Git commit log.
Bemærk: Det er meget vigtigt, at du først skrive navnet på det delsystem, som plasteret tilhører. I mit tilfælde, da jeg ændre reboot.c filen i x86-arkitekturen biblioteket, jeg begynder med emnelinjen med x86:.
Efter at du har brug for at efterlade en tom linje. og skriv derefter en kort beskrivelse om din ændring (i rødbrun farve), som vil blive den changelog 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 bliver en del af emnefeltet, og det vil være alt rod.
Trin 5: Generer plasteret
Så nu har du begår dine plaster i din lokale Git repository, er det tid til at generere patch, som vi vil sende 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 skabe en fil 0001-x86-Fix-reboot-problem-on-VersaLogic-Menlow-boards.patch i din nuværende mappe, hvis indhold vil være:
Fra 04056e508c996b023857f8076da7fb54096d10e9 Mon September 17 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 anvendes.
Tilføj særhed at genstarte gennem BIOS.
Testet på mindst fire bestyrelser.
Signeret-off-by: Kushal Koolwal <kushalkoolwal@gmail.com>
-
arch/x86/kernel/reboot.c | 8 + + + + + + + +
1 ændrede filer, 8 indrykninger (+), 0 deletioner (-)
diff-git 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 @ @ Statisk 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 baserede board",
+. Tændstikker = {
+ 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 hentet fra din første linje i Git commit log. Også option-n tilføjer patch nummer [PATCH 1/1] for at dit emne og-s option tilføjer Signeret-off-by: linie. Den e-mail, der er plukket i underskrevet off line er plukket fra din Git konfiguration, du har angivet i trin 1.
Trin 6: Tjek din patch for fejl
Næste vi nødt til at sikre, at plasteret, vi forsøger at indsende ikke indeholder nogen åbenlyse fejl som hvide rum, der overstiger 80 kolonnegrænsen, osv. Der er et perl script kaldet checkpath.pl, der leveres med kerne-kildekoder 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å leveret inde i kerne-kildekode til at løse / 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å en liste over folk til at indsende patch til
Forudsat plasteret kompileret, arbejdede den måde, du ønsker det, og din test emails så godt det næste skridt er at få en liste over bekymring folk til hvem du skal kontakte din patch. 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: Der henvises til vedligeholdere filen
Den anden metode er at henvise til vedligeholdere fil, der er giver inde i kerne-kildekode træet. Du er nødt til mindst email plasteret til alle de mennesker, der har "M", før deres navn.
Bemærk: Også skal du e-maile din patch til mindst én postliste. Hvis du ikke er i stand til finde nogen mailingliste, baseret på de to ovennævnte metoder, der beskæftiger sig med delsystem, over for hvilket du forsøger at indsende din patch, så skal 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 enhver 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 bruger det. Nu er det meget vigtigt, at du først teste din patch ved at sende det til din egen e-mail-adresser (mulig 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 enter, vil det bede om din Gmail-konto password, som du skal indtaste for at rent faktisk sende email.
Nu tjekke e-mail konti, der er anført ovenfor for at kontrollere, om du fik e-mail og alt ser godt ud for indsendelse.
Trin 10: Endelig Email din patch
Hvis alt ser ud lige så du endelig 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 godkendelsen af min patch af Ingo Molnar som derefter trillede fra Ingo Molnar s træ til Stephen Rothwell s linux-next træ og til sidst ind Linus Torvalds hovedlinie Linux-kerne træ.
Det var det! Held og lykke med dit første patch!













11 Marts 2011 kl 09:19
hey mit navn er Abderrahmane I'am fra Algeriet
først undskyld for mit engelsk.
har du et Debian-system kører som server, vil jeg gerne tilføje nogle service som stjerne og messaging, har jeg brug for at 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 ...
takket være en masse
Svar på denne kommentar
April 7, 2011 kl 12:31
Hej,
tak for denne store howto!
Jeg tror, der er en lille fejl. Jeg tror, det erstatningen 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 jun 2011 kl 12:11
Fremragende howto med hvad jeg fik min patch let oprettes og inkluderet i Linux-kernen udviklingsprocessen. Tak.
Kompilering testen kernen, 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 fokus på indlejrede systemer - søg efter
2010-10 Hvordan laver man et GNU / Linux kernel patch - Embedded Levende London
http://www.reliableembeddedsystems.com/publications.html
Hilsen,
Robert
Svar på denne kommentar
23 juli 2011 kl 06:59
Tak for en klar og teknisk how-to. Du er en inspiration for
os i Debian og Linux-fællesskabet.
Da du har en formel kandidat uddannelse, ekstra bog referencer såsom
som Hvorfor Programmer Fails kan være nyttige.
http://www.amazon.com/Why-Programs-Fail-Systematic-Debugging/dp/1558608664
Svar på denne kommentar
25 September 2011 kl 03:19
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-kerne patch hjælp GIT Tak for det ...
og jeg har en linux blog for min egen ... http://www.linuxthebest.com/root-in-ubuntu-tutorial.html
tak
Svar på denne kommentar
25 januar, 2012 kl 08:05
[...] Restriktiv om stilen af mailen, patch, osv., se FAQ af kernen listen. Men der er en dejlig tutorial for at undgå det meste af [...]
9 feb 2012 kl 15:48
Tak for den store primer. Forsøger at tilføje git til min kode indsendelse proces.
Svar på denne kommentar
30 juli 2012 kl 11:10
Tag et kig på
git am-signoff
stedet for at bruge
patch-p1 <
"Git am" tilføjer den fulde commit til din git træet herunder git commit tekst. "Patch" vil kun gælde kildekoden ændringer, og ændringerne vil ikke forpligtet til at git.
Brug "git am-abort" for at annullere en forpligtelse, der går galt.
Svar på denne kommentar
1 Januar 2013 kl 11:45
[...] Kernel, jeg tror de fleste af de retningslinjer gælder der også. Som et "hvordan" guide, jeg fandt denne artikel på nettet, der beskriver kommandoer trin for trin, faktisk, git er i stand til at e-maile en patch serie [...]
9 januar 2013 kl 07:16
Rart intro. Jeg er lige begyndt at arbejde med Git for første gang - til trods bruger SVN og CVS for en årrække. Det er blevet vist ganske interessant hidtil :)
Vil gemme denne tutorial og praksis, når jeg kommer hjem i aften.
Flot arbejde.
Svar på denne kommentar
30 Marts 2013 kl 18:18
hej, tak for denne howto. Jeg skrev min første linux kernel patch, og maile den til vedligeholderen går.
Men hvordan kan jeg vide, om min patch er accepteret eller ej?
tak
Svar på denne kommentar