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í!

Být společenský, Share!