Postupy: Vytvořit a odeslat svůj první záplatu linuxového jádra pomocí GIT
Poté, co pracoval s Linuxem (většinou pokročilé uživatele) let, jsem se rozhodl zveřejnit svůj první Linux kernel patch (i triviální, ale hej, co potřebujete někde začít!) a já jsem byla nadšená, když poprvé se dostal přijat Subsystem správce a poté nakonec to tekla do hlavní trati jádra.
To, co následuje, je krok-za-krokem návod, jak podat linuxového jádra opravu a doufat, že se dostane přijat do hlavní trati jádra. Tato Jak na to je založen na skutečné patche, které jsem napsal a předložen a který dostal přijat do hlavní trati jádra včera. Průvodce většinou upozorňuje na mechaniku posílání patche a ne nutně technických aspektech designu linuxového jádra.
Krok 1: Instalace Git Nástroje
První věc, kterou musíme udělat, je ujistit se, že máme nástroje potřebné k vytvoření a předložení našeho linuxového jádra patch. Já používám Debian Lenny svůj systém pro tato How-To.
# 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: Klonové Linusovo To Git stromu
Další věc, kterou budete chtít udělat, je naklonovat Linusovo Git stromu nejlépe na vašem počítači Linux. Zkontrolujte, zda máte dostatek místa (nejméně 2 GB) před naklonovat strom. V době psaní tohoto 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 se stáhne do vašeho adresáře mylinux-2.6 (adresář bude vytvořen automaticky, protože jste zadali v příkazu). Každý patchwork by mělo být vždy provedeno proti tomuto stromu, abyste se ujistili, že změny by mohly být v rozporu s změn provedených ostatní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šechny práce budou probíhat 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ž naklonovat Git stromu jste v hlavním oboru.
# 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 potřebujete k pokladně výše uvedené 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žení 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 vaší obrazovce terminálu (moje 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ávu. Buďte velmi opatrní, co zadáte do protokolu zprávy, protože tyto zprávy se stanou součástí systému Linux Git stromu spáchat log a lidé budou hledat si závazně na základě těchto zpráv. Zde je to, co jsem napsal v roce a zde je to, co můj poslední okno editoru vypadalo 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í text v modré barvě se stane vaším hlavním předmětem linie náplasti, že budete e-mailu a také bude identifikátor ve git commit protokolu.
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 v adresáři x86 architektury, začnu tím předmětu s x86:.
Poté budete muset opustit jeden prázdný řádek. a potom zadejte stručný popis o své změně (v kaštanové 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 vaše téma a popis, bude váš popis stanou součástí předmětu a bude to všechno nepořádek.
Krok 5: Generování náplast
Takže teď máte dopustit náplast v místní Git repozitáři, je na čase vygenerovat patch, který budeme e-mailem na příslušných správců a e-mailové konference. Chcete-li vytvořit záplatu 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-reboot-problém-na-VersaLogic Menlow-boards.patch v aktuálním adresáři, jehož obsah bude:
Od 04056e508c996b023857f8076da7fb54096d10e9 Úte 17 00:00:00 2001
Od: Kushal Koolwal <kushalkoolwal@gmail.com>~~pobj
Datum: so. 19 únor 2011 13:14:03 -0800
Předmět: [PATCH 1/1] 86: Oprava restart problém na deskách VersaLogic Menlow.
VersaLogic Menlow desky na bázi visí při restartu, pokud reboot = 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 inzerce (+), vymazání 0 (-)
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"),
}
}
+ {/ * Řešení problémů s restartu počítače na VersaLogic desky Menlow * /
+. Volání = set_bios_reboot,
+. Ident = "VersaLogic Menlow založené deska",
A více. Zápasů = {
+ DMI_MATCH (DMI_BOARD_VENDOR, "VersaLogic Corporation"),
+ DMI_MATCH (DMI_BOARD_NAME, "VersaLogic Menlow deska"),
+},
+},
{}
};
-
1.7.2.3
Všimněte si, jak byl název souboru vybral z prvního řádku protokolu git commit. Také volba-n přidá patch číslo [PATCH 1/1] k předmětu a-s možností přidá podepsaný-off-by: linku. E-mail, který je vybrán v podepsaném off line je vybíral z vašeho Git konfiguraci, které jste zadali v kroku 1.
Krok 6: Zkontrolujte, zda náplast na chyby
Dále je třeba, aby se ujistil, že oprava se snažíme předložit neobsahuje žádné zjevné chyby, jako je bílých míst je delší než 80 sloupců limitu atd. K dispozici je skript v Perlu, nazývá checkpath.pl, který je součástí jádra zdrojů 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é podle zdroje uvnitř jádra na opravu / čištění náplast jako:
scripts/cleanfile
scripts/cleanpatch
Krok 7: Testování náplast
Opět je velmi důležité, že použijete náplast na Git stromu Linuse To, zkompilovat a vyzkoušet 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ískejte seznam lidí, předložit opravu
Za předpokladu, že se náplast sestaven, pracoval tak, jak chcete ho a vaše e-maily zkušební vypadalo dobře Dalším krokem je získat seznam se týká osob, kterým byste měli e-mailem náplast. Existují dva způsoby, jak to udělat:
Metoda 1: Použití skriptu poskytnuté v balícek
# 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: V Správci souborů
Druhá metoda je odkazovat na Maintainers souboru, který je poskytovat uvnitř stromu jádra. Musíte se alespoň e-mail náplast na všechny lidi, kteří mají "M" před jejich jménem.
Poznámka: Také je třeba e-mailem náplast alespoň jeden mailing listu. Pokud nejste schopni najít žádný seznam adres, na základě výše uvedených dvou metod, které se týká subsystému, proti které se snažíte, aby předložily své patch, měli byste alespoň e-mail na poštovní linuxového jádra seznamu (linux-kernel @ vger . kernel.org).
Krok 9: Test Email náplast
Přestože byste mohli použít libovolnou e-mailového klienta a SMTP hostitele, který chcete a máte přístup k jsem zjistil, že používáte Gmail byl nejlepší, protože spousta vývojáři jádra využít. Nyní je velmi důležité, abyste nejprve otestovat náplast 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
Po stisk klávesy Enter, bude žádat o Gmail účtu heslo, které musíte zadat, aby se vlastně poslat e-mail.
Nyní zkontrolujte e-mailové adresy uvedené výše ověřit, zda jste dostali e-mail a všechno, co vypadá dobře na podání.
Krok 10: Nakonec Napište náplast
Pokud vše vypadá v tu chvíli se konečně e-mailem náplast na základě seznamu lidí, které se nacházejí v kroku 8. To je to, co jsem vlastně skončil za použití:
# 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, že commit protokolu o převzetí svého patche od Ingo Molnar, který pak stékala ze stromu Ingo Molnár se na Stephena Rothwell v linux-next stromu a nakonec do Linus Torvald na hlavní trati linuxového jádra stromu.
A je to! Hodně štěstí s vaším prvním patchem!











11.3.2011 v 9: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 je 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 vlastní debian, že po instalaci z CD nebo Live CD jsem serverice bude připraven pro běh jako atsrisk apache ...
díky moc
Odpovědět na tento komentář
07.04.2011 v 12:31 hodin
Dobrý den,
díky za tuto skvělou HOWTO!
Myslím, že je trochu chyba. Myslím, že shold být "patch-p1 <0001-86-Fix-reboot-problém-na-VersaLogic Menlow-boards.patch" místo "patch-p1 0001-86-Fix-reboot-problém-na-VersaLogic Menlow-boards.patch ".
Ohledu
Tom
Odpovědět na tento komentář
21.června 2011 v 12:11
Vynikající howto, co jsem dostal náplast snadno vytvořit a jsou zahrnuty v linuxovém jádře procesu vývoje. Děkuju.
Kompilace testovací jádro by mohlo být trochu náročné pro nás newbiez. Zde je výborný 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 11:36 hod.
Dobrý den,
Tady je něco podobného se zaměřil 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 6:59
Děkuji za jasné a technické jak na to. Jste inspirací pro
nás v Debianu a linuxové komunity.
Vzhledem k tomu, budete mít formální vzdělání absolventa, další odkazy, jako kniha
Proč, jak 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 3:19
Jsem stále učení o Ubuntu. Daleko, aby patch jádra. Lol
Odpovědět na tento komentář
18.října 2011 v 11:13 hod.
opravdu pěkný návod na HOWTO:. vytvořit a odeslat svůj první linuxového jádra záplatu GIT Díky za to ...
a mám linux blog svůj vlastní ... http://www.linuxthebest.com/root-in-ubuntu-tutorial.html
díky
Odpovědět na tento komentář
25 ledna 2012 v 8:05 hod.
[...] Restriktivní o stylu mail, náplasti, atd., viz FAQ na jádra seznamu. Ale je tu pěkný návod, aby se zabránilo většinu [...]
09.2.2012 v 3:48 hod.
Díky za skvělé zápalky náboje. Snažím se přidat Git do mého procesu kódu podání.
Odpovědět na tento komentář