Po práci s Linuxem (většinou jako pokročilý uživatel) pro roky, rozhodl jsem se po mé první záplatu linuxového jádra (ačkoli triviální, ale hej budete muset někde začít!) a byla jsem nadšená, když se poprvé dostal přijat subsystémem udržovatele a pak nakonec to stékala do hlavního jádra.

Co bude následovat, je průvodce krok za krokem, jak podat linuxového jádra opravu , a doufám, že dostane přijat do hlavního jádra. Toto how-to je založen na skutečném patch, který jsem napsal a předložena a který dostal přijat do hlavního jádra včera. Průvodce většinou zdůrazňuje mechaniku posílání patche a ne nutně technického návrhu aspekty linuxového jádra.

Krok 1: Instalace Git Nástroje

První věc, kterou musíme udělat, je, aby se ujistil, že máme potřebné nástroje pro vytváření a předložit svou opravu jádra Linuxu. Já používám svůj systém Debian Lenny pro tento jak na to.

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

Navíc je to dobrý nápad nastavit některé několik parametrů, které Git bude používat, když se vytváří 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 Linus je Git stromu nejlépe na vašem počítači Linux. Ujistěte se, že máte dostatek místa (alespoň 2 GB), než klonovat stromu. V době psaní tohoto článku celkovou 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 automaticky vytvořena, protože jste určili v příkazu). Jakékoli patchwork by měla být vždy provedeno proti tomuto stromu, aby se ujistil, že vaše změny by mohly být v rozporu s změny provedené 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 roku budou všechny práce provést v /usr/src/mylinux-2.6 adresáři.

Krok 3: Nyní vytvořte místní pobočku, aby se vaše změny

Ve výchozím nastavení, když jste naklonování Git stromu jste v hlavní větvi.

# git branch
* master
#

* Výše označuje aktuální větev.

Pojďme vytvořit novou větev mé MenlowRebootFix, ve které budeme dělat naše změny kódu:

# git branch MenlowRebootFix

Pak musíte pokladny výše nově vytvořenou větev:

# git checkout MenlowRebootFix

Ujistěte se, že jste ve výše uvedeném odvětví:

# git branch
*MenlowRebootFix
master
#

Krok 4: Proveďte změny

Teď se chystám provést změny / x86 / kernel / reboot.c souboru oblouku. Poté, co jste provedli změny v souboru a uloží ho dát následující příkaz:

# git commit -a

Výše uvedený příkaz otevře textový editor ve stejném okně na obrazovce terminálu (můj výchozí textový editor, je 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 budeme vstoupit do našeho spáchat zprávu protokolu. Buďte velmi opatrní, co píšete ve zprávě protokolu, protože tyto zprávy se stanou součástí Linux Git stromu spáchat log a lidé budou vaše hledání commit na základě těchto zpráv. Tady je to, co jsem napsal v a tady 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 patch, který vám bude e-mailem a bude také stane identifikátor ve git commit log.

Poznámka: Je velmi důležité, že jste nejprve zadejte název subsystému, na který váš náplast patří. V mém případě, protože jsem úpravou souboru reboot.c v adresáři x86 architektury, začnu tím předmětu s x86:.

Po tom, co potřebujete ponechat jeden prázdný řádek. a potom zadejte stručný popis o své změny (v kaštanové barvy), který se stane changelog z git commit log.

Nebojte se o textu v oranžové barvě, která začíná znakem #. Ti, kteří 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 nechat jeden prázdný řádek mezi objektem a popis, bude váš popis stane součástí řádku předmětu, a to bude všechno nepořádek.

Krok 5: Generování náplast


Takže nyní máte spáchat náplast v místní Git repozitáře, je na čase, aby generovat patch, který budeme e-mailem na příslušných správcům a e-mailové konference. Chcete-li generovat náplast jednoduše dát následující příkaz:

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

To by mělo vytvořit soubor 0001-x86-Fix-restart-problém-na-VersaLogic-Menlow-boards.patch v aktuálním adresáři, jejichž 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] x86: Fix restart problém na VersaLogic Menlow desky.
Desky na bázi VersaLogic Menlow pověsit na restartování Pokud je používán reboot = bios.

Přidat vtípek do restartování systému 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 soubory změnil, 8 inserce (+), 0 delecí (-)
diff -git a / arch / x86 / kernel / reboot.cb / arch / x86 / kernel / reboot.c
index fc7aae1..715037c 100644
- / 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šit problémy s restartu na VersaLogic Menlow desky * /
+ .callback = Set_bios_reboot,
+ .ident = "VersaLogic Menlow založený board",
+ .matches = {
+ DMI_MATCH (DMI_BOARD_VENDOR, "VersaLogic Corporation"),
+ DMI_MATCH (DMI_BOARD_NAME, "VersaLogic Menlow board"),
+},
+},
{}
};
-
1.7.2.3

Všimněte si, jak název souboru byl vybrán z vašeho prvního řádku git commit log. Také volba -n přidává patch číslo [PATCH 1/1] na objektu a -s možnost přidá Signed-off-by: řádek. E-mail, který je vybral v podepsané off linky je vybral z konfigurace vašeho git, že jste nastavili v kroku 1.

Krok 6: Zkontrolujte, zda náplast za chyby

Dále je třeba se ujistit, že náplast se snažíme, aby předložily neobsahuje žádné zjevné chyby, jako bílých míst, vyšší než 80 limitu sloupce, etc. Tam je skript v Perlu, nazvaný checkpath.pl, která je poskytována s ohledem na zdroje jádra 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 ​​další skripty také poskytované uvnitř zdroje jádra na opravu / čištění náplast jako:

scripts/cleanfile
scripts/cleanpatch

Krok 7: Otestujte si své náplast

Opět je velmi důležité, abyste aplikovat náplast na Linus 'Git stromu, kompilovat 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í, aby předložila opravu

Za předpokladu, že 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 týkají lidí, kterým byste měli e-maily náplast. Existují dělat, že dvě metody:

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: Podívejte se do souboru správců

Druhá metoda je odkazovat na správci souboru, který je poskytovat uvnitř zdrojového kódu jádra. Je třeba alespoň email náplast na všechny lidi, kteří mají "M" před jejich jménem.

Poznámka: Také si potřebujete na e-mail náplast do alespoň jedné e-mailové konference. Pokud nejste schopni najít žádné mailing listu, založený na dvou výše uvedených metod, která se zabývá subsystémem, proti které se snažíte, aby předložily své náplast, pak byste měli alespoň e-mail na Linux Kernel mailing list (linux-kernel @ vger .kernel.org).

Krok 9: Test E-mail náplast

Přestože byste mohli použít libovolnou e-mailového klienta a hostitele SMTP, který chcete, a mít přístup k, jsem zjistil, že pomocí Gmail byl nejlepší, protože hodně vývojářů jádra použít. Nyní je velmi důležité, že jste nejprve otestovat náplast zasláním mu své vlastní e-mailové adresy (možný jiný e-mailový účet s různými poskytovateli poštovních). 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 stiskněte klávesu Enter, bude žádat o zadání hesla účtu Gmail, který budete muset zadat, aby skutečně poslat e-mail.

Nyní zkontrolujte e-mailových účtů uvedených výše ověřit, zda jste dostali e-mail a vše vypadá dobře pro předložení.

Krok 10: Nakonec E-mail náplast

. Je-li vše vypadá dobře a pak si konečně na e-mail náplast založený na seznamu lidí, které se nacházejí v kroku 8 To je to, co jsem vlastně skončil pomocí:

# 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

Tady je to, že spáchat protokol o přijetí mého náplasti Ingo Molnar, která pak stékala z Ingo Molnara jsou stromu Stephen Rothwell v linux-next strom a nakonec do Linus Torvald je hlavní řady linuxového jádra stromu.

To je to! Hodně štěstí při Vašem prvním náplast!

Být společenský, Share!