Postupy: Vytvořit a odeslat svůj první záplatu linuxového jádra pomocí GIT
Po práci s Linuxem (většinou jako pokročilý uživatel) let, jsem se rozhodl zveřejnit svůj první Linux kernel patch (i triviální, ale hej musíte někde začít!) a byla jsem nadšená, když poprvé se dostal přijat Subsystem správcem a nakonec to stékala do hlavního jádra.
To, co následuje, je krok-za-krokem návod, jak podat linuxového jádra opravu a doufám, že se dostane přijat do hlavního jádra. Tento JAK TO-je založen na skutečném patch, který jsem napsal a předložil a který dostal přijat do hlavního jádra včera. Průvodce většinou zdůrazňuje mechaniku posílat patche a ne nutně technických aspektů designu linuxového jádra.
Krok 1: Instalace nástroje Git
První věc, kterou musíme udělat, je, aby se ujistil, že máme potřebné nástroje pro vytvoření a předložení našeho linuxového jádra opravu. Já používám svůj Debian Lenny systém tomto praktickém.
# apt-get update
# apt-get install git git-email gitk
Navíc je to dobrý nápad nastavit některé parametry, které několik Git bude používat při generuje náplasti:
# git config --add user.name "Kushal Koolwal"
# git config --add user.email "kushalkoolwal@gmail.com"
Krok 2: Clone Linus 'Git Tree
Další věc, kterou budete chtít udělat, je naklonovat Linusova Git strom nejlépe na počítači Linux. Ujistěte se, že máte dostatek místa (alespoň 2 GB), než klonovat ten strom. V době psaní tohoto článku celková velikost stromu bylo kolem 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
Nyní počkejte 30 minut nebo tak, v závislosti na rychlosti připojení k Internetu, než celý strom stáhne do svého adresáře mylinux-2.6 (adresář bude vytvořen automaticky, protože jste zadali v příkazu). Jakékoliv patchwork by měla být vždy provedeno proti tomuto stromu, aby se ujistil, že vaše změny mohou být v rozporu se změnami provedenými jinými vývojáři.
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#
Odtud kupředu všechna práce bude provedeno v / usr/src/mylinux-2.6 adresáře.
Krok 3: Nyní vytvořte místní pobočku, aby se vaše změny
Ve výchozím nastavení, když klonovat Git strom jste v hlavní větvi.
# git branch
* master
#
* Výše uvedené skutečnosti naznačují aktuální větev.
Pojďme vytvořit novou pobočku můj MenlowRebootFix, ve kterém uděláme změny kódu:
# git branch MenlowRebootFix
Pak budete muset do pokladny výše nově vytvořenou větev:
# git checkout MenlowRebootFix
Ujistěte se, že jste ve výše uvedeném oboru:
# git branch
*MenlowRebootFix
master
#
Krok 4: Proveďte změny
Teď budu dělat změny arch/x86/kernel/reboot.c souboru. Po provedení změn v souboru a uložili dát následující příkaz:
# git commit -a
Výše uvedený příkaz se otevře textový editor, ve stejném okně na obrazovce terminálu (jako výchozí textový editor nano) takto:
# 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
#
Nyní se do naší commit log zprávy. Buďte velmi opatrní, co napíšete do zprávy protokolu, protože tyto zprávy se stanou součástí linuxového Git stromu spáchat protokol a lidé budou hledat vaše závazně na základě těchto zpráv. Zde je to, co jsem napsal v roce, a tady je to, co moje poslední okno editoru si to:
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
#
Nyní je text v modré barvě se stane vaším hlavním předmětem linie patch, který vám bude e-mail a budou také identifikátor ve git commit log.
Poznámka: Je velmi důležité, abyste nejprve zadejte název subsystému, který se náplast patří. V mém případě, protože jsem úpravou reboot.c soubor na architektuře x86 adresáře, začnu tím předmětu s X86:.
Poté, co potřebujete ponechat jeden prázdný řádek. a pak zadejte stručný popis o své změny (v kaštanově hnědé barvy), který se stane changelog z protokolu git commit.
Nebojte se o text v oranžové barvě, který začíná znakem #. Ti budou ignorovány git commit.
and description , your description will become part of the subject line and it will be all mess. Poznámka: Pokud nechcete ponechat jeden prázdný řádek mezi objektem a popis, bude váš popis stanou součástí předmětu, a to bude všechno nepořádek.
Krok 5: Vytvořit náplast
Takže nyní máte spáchat náplast v místní Git repozitáře, je na čase vytvořit patch, který budeme e-mailem na příslušných správců a e-mailové konference. Chcete-li vytvořit opravu prostě dát následující příkaz:
# git format-patch -s -n master..MenlowRebootFix
To by mělo vytvořit soubor 0001-86-Fix-restart-problém-on-VersaLogic-Menlow-boards.patch v aktuálním adresáři, jehož obsah bude:
Od 04056e508c996b023857f8076da7fb54096d10e9 Mon 17.září 2001 00:00:00
Od: Kushal Koolwal <kushalkoolwal@gmail.com>
Datum: So. 19.únor 2011 13:14:03 -0800
Předmět: [PATCH 1/1] 86: Oprava restartu problém na VersaLogic desek Menlow.
VersaLogic Menlow desky na bázi visí na restart, pokud restart = bios je používán.
Přidat vtípek restartovat přes BIOS.
Testováno na nejméně čtyřech deskách.
Podepsáno-off-by: Kushal Koolwal <kushalkoolwal@gmail.com>
-
arch/x86/kernel/reboot.c | 8 + + + + + + + +
1 změněné soubory, 8 vložky (+), (- 0 delece)
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 @ @ Static struct dmi_system_id __ initdata reboot_dmi_table [] = {
DMI_MATCH (DMI_BOARD_NAME, "P4S800"),
},
},
+ {/ * Rukojeť problémy restartu počítače VersaLogic desky Menlow * /
+. Callback = set_bios_reboot,
+. Ident = "VersaLogic Menlow založ",
+ = {Zápasy.
+ DMI_MATCH (DMI_BOARD_VENDOR, "VersaLogic Corporation"),
+ DMI_MATCH (DMI_BOARD_NAME, "VersaLogic Menlow rada"),
+},
+},
{}
};
-
1.7.2.3
Všimněte si, jak se název souboru vybral ze svého prvního řádku protokolu git commit. Také volba-n přidává patch číslo [PATCH 1/1] k předmětu a volba-S přidá přihlášen off-by: linky. E-mail, který je vybral v podepsaném off line je vybral z Git konfiguraci, kterou jste nastavili v kroku 1.
Krok 6: Zkontrolujte, zda opravu chyb
Dále je třeba se ujistit, že patch se snažíme předkládat neobsahuje žádné zjevné chyby, jako bílých míst, více než 80 sloupců limitu, atd. K dispozici je skript v Perlu nazvaný checkpath.pl, který je součástí zdrojových kódů kernelu pro tento účel :
# scripts/checkpatch.pl 0001-x86-Fix-reboot-problem-on-VersaLogic-Menlow-boards.patch
a měli byste vidět něco takového:
Výstup:
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.
Existují i jiné skripty také poskytované uvnitř jádra zdroje na opravu / čištění náplasti, jako jsou:
scripts/cleanfile
scripts/cleanpatch
Krok 7: Otestujte si své náplast
Opět je velmi důležité, že použijete náplast na Git stromu Linuse ", zkompilovat a otestovat jej před odesláním náplast proti proudu.
# 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
Krok 8: Získat seznam lidí, předložit patch
Za předpokladu, že se náplast sestaven, pracoval tak, jak chcete, aby vaše testovací e-maily a vypadalo to dobře Dalším krokem je získat seznam se týká osob, kterým byste se měli emailem patch. Existují dva způsoby, jak to udělat:
Metoda 1: Použití skriptu uvedené ve zdrojovém kódu jádra
# scripts/get_maintainer.pl 0001-x86-Fix-reboot-problem-on-VersaLogic-Menlow-boards.patch
Výstup:
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)
#
Metoda 2: Viz správcům souboru
Druhá metoda je odkazovat na skutečných správců souboru, který je poskytnout uvnitř zdrojovém kódu jádra. Musíte alespoň email náplast pro všechny lidi, kteří mají "M" před jejich jménem.
Poznámka: Také je třeba na e-mail náplast alespoň jedné konference. Pokud nejste schopni najít nějaký seznam adres, na základě výše uvedených dvou metod, které se týká subsystému, proti kterému se pokoušíte odeslat náplast, pak byste měli alespoň e-mailem na Linux Kernel Mailing List (linux-kernel @ vger . kernel.org).
Krok 9: Test Email náplast
Přestože byste mohli použít libovolnou e-mailového klienta a hostitele SMTP, který chcete a mají přístup k, zjistil jsem, že používání služby Gmail je nejlepší, protože hodně vývojáři jádra použít. Nyní je velmi důležité, abyste si nejprve otestujte opravy zasláním své vlastní e-mailové adresy (možná jiný e-mailový účet u různých poštovních služeb). Já používám následující:
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
Poté, co stisknete Enter, bude žádat o svém účtu Gmail heslem, které jste zadali, aby se skutečně poslat e-mail.
Nyní zkontrolujte e-mailové adresy uvedené výše ověřit, zda máte e-mail a vše vypadá dobře pro podání.
Krok 10: Nakonec Email náplast
Pokud vše vypadá dobře a pak si konečně email náplast na základě seznamu osob, které se nacházejí v kroku 8. To je to, co jsem vlastně skončil s použitím:
# 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
Zde je to commit log o přijetí mého patche od Ingo Molnár, které pak kapala ze stromu Ingo Molnara Stephen Rothwell v linux-next stromu a nakonec do Linus Torvald v hlavní řadě jádra Linux stromu.
A je to! Hodně štěstí při vaší první náplastí!













11.03.2011 v 09:19
Ahoj jmenuji se Abderrahmane i'am z Alžírska
na první líto moje angličtina.
jste debian systém běží jako server, rád bych přidat nějaké služby, jako hvězdičkou a posílání zpráv, musím copmile jádro, aby se vlastní systém,
mým cílem je, aby se vlastní distribucí Debianu, která po instalaci z CD nebo Live CD má serverice bude připraven pro běh jako atsrisk apache ...
díky moc
Odpovědět na tento komentář
07.04.2011 v 00:31
Dobrý den,
díky za tento skvělý howto!
Myslím, že je trochu chyba. Myslím, že to shold být "patch-p1 <0001-86-Fix-restart-problém-on-VersaLogic-Menlow-boards.patch" místo "patch-p1 0001-86-Fix-restart-problém-on-VersaLogic- Menlow-boards.patch ".
Regard,
Tomáš
Odpovědět na tento komentář
21.června 2011 v 12:11
Vynikající howto s tím, co jsem dostal moje náplast snadno vytvářet a jsou zahrnuty v linux procesu vývoje jádra. Děkuju.
Kompilace testovací jádro může být trochu náročné pro nás newbiez. Zde je vynikající wiki, aby pomohli v systémech Ubuntu:
https://wiki.ubuntu.com/KernelTeam/GitKernelBuild .
Br Thomas
Odpovědět na tento komentář
30.června 2011 v 23:36
Dobrý den,
Tady je něco podobného zaměřena na vestavěných systémů - vyhledat
2010-10 Jak si GNU / Linux kernel patch - Embedded Živé Londýn
http://www.reliableembeddedsystems.com/publications.html
S pozdravem,
Robert
Odpovědět na tento komentář
23.července 2011 v 06:59
Děkuji za jasnou a technické jak na to. Jste inspirací pro
nám v Debian Linux a komunity.
Vzhledem k tomu, máte formální vzdělání absolventa, další knižní odkazy, jako
as Proč Programy nezdaří mohou být užitečné.
http://www.amazon.com/Why-Programs-Fail-Systematic-Debugging/dp/1558608664
Odpovědět na tento komentář
25.září 2011 v 03:19
Stále se učím o Ubuntu. Daleko na opravu jádra. Lol
Odpovědět na tento komentář
18.října 2011 v 23:13
opravdu pěkný tutorial na HOWTO:. Vytvořit a odeslat svůj první záplatu linuxového jádra pomocí GIT díky za to ...
a mám linux blog mé vlastní ... http://www.linuxthebest.com/root-in-ubuntu-tutorial.html
díky
Odpovědět na tento komentář
25.ledna 2012 ve 20:05
[...] Restriktivní o stylu pošty, náplasti, atd., viz FAQ na jádra seznamu. Ale je tu pěkný tutorial, aby se zabránilo většinu [...]
09.02.2012 v 15:48
Děkuji za vynikající penetrace. Snažím se přidat do mého Git proces kódu podání.
Odpovědět na tento komentář
30.července 2012 v 11:10
Podívat se na
git-am SIGNOFF
namísto použití
patch-p1 <
"Git am" přidá plnou commit do stromu git commit včetně textu. "Patch" se vztahuje pouze na změny zdrojového kódu a změny nebudou zavázala git.
Pomocí "git am-abort" zrušit zavazují, že pokazí.
Odpovědět na tento komentář
01.01.2013 v 11:45
[...] Kernel, myslím, že většina těchto pokynů platí taky. Jako "jak" průvodce, našel jsem tento článek na webu, který popisuje příkazy krok za krokem, ve skutečnosti, git je schopen poslat e-mailem sérii patchů [...]
09.01.2013 v 07:16
Pěkný úvod. Jen jsem začal pracovat s Git poprvé - i přes použití SVN a CVS řadu let. Bylo to docela zajímavé, ukazuje tak daleko :)
Ušetří tento návod a praxi, když jsem si dnes večer domů.
Pěkná práce.
Odpovědět na tento komentář
30.března 2013 v 18:18
ahoj, díky za tento howto. Jsem napsal svůj první Linux kernel patch a poslat e-mailem správci včera.
Nicméně, jak mohu vědět, jestli moje oprava je přijat, nebo ne?
díky
Odpovědět na tento komentář