Poté, co pracoval s Linuxem (většinou jako pokročilé uživatele) pro roky, jsem se rozhodl zveřejnit svůj první náplast linuxového jádra (i když triviální, ale hej musíte někde začít!) a já jsem byla nadšená, když se poprvé dostal přijat Subsystem 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 Linux kernel patch, 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 poukazuje na mechaniku zasláním záplat a ne nutně technické konstrukční aspekty linuxového jádra.

Krok 1: Instalace systému 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 naši verzi linuxového jádra. 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

Kromě toho, že 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 Linusova 'Git Tree

Další věc, kterou budete chtít udělat, je naklonovat Linus je Git strom nejlépe na vašem počítači Linux. Ujistěte se, že máte dostatek prostoru (alespoň 2 GB), než klonovat ten strom. V době psaní tohoto článku celkovou velikost stromu byla asi 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 vašeho adresáře mylinux-2.6 (adresář bude vytvořen automaticky, protože jste zadali v příkazu). Jakékoliv 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ě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 dále veškeré práce budou probíhat v / usr/src/mylinux-2.6 adresáři.

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

Ve výchozím nastavení, když klonovat strom Git jste v hlavní větvi.

# git branch
* master
#

* Výše uvedené skutečnosti naznačují aktuální pobočku.

Pojďme vytvořit novou pobočku moje MenlowRebootFix, ve kterém budeme dělat naše 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ď se chystám provést změny v souboru arch/x86/kernel/reboot.c. Poté, co jste provedli změny v souboru a uložit ho 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 (můj 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í zadáme naše 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 commit log a lidé budou hledat vaše zavázat na základě těchto zpráv. Zde je to, co jsem napsal v roce, a tady je to, co moje 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í je text v modré barvě se stane váš hlavní předmět náplasti, že budete e-mail a budou také identifikátor v commit log.

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

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

Nebojte se o text v oranžové barvě, který začíná znakem #. Ti, kteří budou ignorovány 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: Generování náplast


Takže nyní máte spáchat náplast v místní Git repozitáře, je čas potřebný k vygenerování této 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-na-VersaLogic-Menlow-boards.patch v aktuálním adresáři, jehož obsah bude:

Od 04056e508c996b023857f8076da7fb54096d10e9 Po 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: Oprava restart problém na VersaLogic Menlow desek.
Desky VersaLogic Menlow založené visí na restart, pokud je použit reboot = bios.

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 obrázků změnila, 8 (+) inserce, delece 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 na VersaLogic Menlow desky * /
+. Callback = set_bios_reboot,
+. Ident = "VersaLogic Menlow vychází deska",
+. Zápasů = {
+ DMI_MATCH (DMI_BOARD_VENDOR, "VersaLogic Corporation"),
+ DMI_MATCH (DMI_BOARD_NAME, "VersaLogic Menlow board"),
+},
+},
{}
};
-
1.7.2.3

Všimněte si, že název souboru byl vybrán z prvního řádku commit log. Také volba-n přidává patch číslo [PATCH 1/1] k předmětu a-s možností přidává Podepsáno-off-by: linka. E-mail, který je vybral v podepsané off line je vybral z konfigurace vašeho Git, že jste nastavili v kroku 1.

Krok 6: Zkontrolujte, zda jste opravu chyb

Dále je třeba, aby se ujistil, že náplast se snažíme podat neobsahuje žádné zjevné chyby, jako bílých míst, vyšší než 80 hranici sloupce, atd. K dispozici je perl skript s názvem 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 ​​jiné 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é, že použijete náplast na stromě Linus 'Git, 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ískejte seznam lidí, předložit opravu

Za předpokladu, že se náplast sestaven, pracoval tak, jak chcete, aby vaše testovací a e-maily vypadají dobře Dalším krokem je, aby se seznam týká lidí, kterým byste měli e-mailovým náplast. Existují, jak to udělat dvěma způsoby:

Metoda 1: Použití skriptu poskytnuté 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: Odkaz na soubor správců

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

Poznámka: Také je nutné na e-mail náplast alespoň jedné konference. Pokud nejste schopni najít nějaký seznam adres, na základě obou výše uvedených metod, která se zabývá subsystémem, proti které se snažíte, aby předložily své opravu, pak byste měli alespoň e-mailem 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 mají přístup k, zjistil jsem, že používáte Gmail byl nejlepší, protože mnoho vývojářů jádra použít. Nyní je velmi důležité, abyste nejprve otestujte opravy zasláním své vlastní e-mailové adresy (možné různé e-mailového účtu 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 stisknete Enter, zeptá se na heslo účtu služby Gmail, které musíte zadat, aby ve skutečnosti poslat e-mail.

Nyní zkontrolujte e-mailových účtů uvedených výše ověřte, 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ě emailem 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, že spáchat protokol o přijetí mého náplasti Ingo Molnar, který pak stékala z Ingo Molnara stromu Stephen Rothwell v linux-next stromu a nakonec do Linus Torvald v hlavní řadě linuxového jádra stromu.

To je ono! Hodně štěstí s vaší první náplastí!

Být společenský, Share!