Po práci s operačním systémem Linux (většinou jako pokročilé uživatele) pro roky, rozhodl jsem se psát své první záplatu linuxového jádra (i když triviální, ale hej je třeba někde začít!) a byla jsem nadšená, když se poprvé dostal přijato subsystémem udržovatele a poté nakonec to stékal do hlavního jádra.

To, co následuje, je průvodce krok za krokem, jak podat linuxového jádra opravu , a doufám, že se dostane přijata do hlavního jádra. To, jak na to je založen na skutečném patch, který jsem napsal a které byly předloženy, a který dostal přijat do hlavní řady jádra včera. Průvodce většinou upozorňuje na 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íte udělat, je, aby se ujistil, že máme potřebné nástroje pro vytváření a předložit svou opravu 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 při generování 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 strom nejlépe na vašem počítači Linux. Ujistěte se, že máte dostatek místa (alespoň 2 GB) před naklonovat 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 stáhne do vašeho adresáře mylinux-2.6 (adresář, bude automaticky vytvořena, protože jste zadali v příkazu). Jakékoli patchwork by měla být vždy provedeno proti tomuto stromu, aby se ujistil, ž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 provedena v /usr/src/mylinux-2.6 adresáři.

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

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

# git branch
* master
#

* Výše uvedeného vyplývá, aktuální větev.

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

# git branch MenlowRebootFix

Pak musíte pokladny výše nově vytvořený 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ď budu dělat změny / x86 / kernel / reboot.c souboru oblouku. Poté, co jste provedli změny v souboru a uložili dát následující příkaz:

# git commit -a

Výše uvedený příkaz otevře textový editor ve stejném okně na vaší 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í se vstoupit do našeho dopustí 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 vyhledávání commit na základě těchto zpráv. Tady je to, co jsem napsal v a tady je to, co moje poslední okno editoru, podíval se:

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 zašleme e-mailem, a také stane identifikátor v git commit log.

Poznámka: Je velmi důležité, abyste 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 od předmětu s x86:.

Poté je třeba ponechat jeden prázdný řádek. a pak zadejte stručný popis o své změny (v nahnědlé barvy), který se stane changelog v git commit log.

Nebojte se o text 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 popisu, bude váš popis stanou součástí předmětu, a to bude všechno nepořádek.

Krok 5: Vytvořit náplast


Takže teď máte spáchat náplast ve vašem místním 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 vytvořit náplast jen tak 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, 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] x86: Fix restartovat problém na VersaLogic Menlow desky.
Desky na bázi VersaLogic Menlow pověsit na restartování, pokud není používán reboot = bios.

Přidat vtípek pro restart 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 souborů změnil, 8 inzerce (+), 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šení problémů s restartu počítače na VersaLogic Menlow desky * /
+ .callback = Set_bios_reboot,
+ .ident = "VersaLogic Menlow vychází deska",
+ .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 prvního řádku git commit log. Také volba -n přidává patch číslo [PATCH 1/1] k předmětu a -s možnost přidá přihlášen off-by: linka. E-mail, který je vybral v podepsaném off linky je vybral z konfigurace Git, které jste nastavili v kroku 1.

Krok 6: Zkontrolujte, zda 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 limitu sloupce, atd Je perl skript s názvem checkpath.pl která je k dispozici 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 opravit / čištění náplast jako:

scripts/cleanfile
scripts/cleanpatch

Krok 7: Otestujte si svůj náplast

Opět je velmi důležité, abyste se vztahují náplast na Linus "Git stromu, zkompilovat a otestovat 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 se náplast sestaven, pracoval tak, jak chcete, aby i vaše testovací e-maily vypadal dobře Dalším krokem je získat seznam týkají osob, kterým byste se měli na e-mail opravu. Existují dělat, že dvě metody:

Metoda 1: Použití skriptu poskytované 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: Nahlédněte do souboru maintainers

Druhým způsobem je odkazovat na udržovateli souboru, který je poskytnout uvnitř zdrojového kódu jádra. Musíte alespoň e-mail náplast na všechny lidi, kteří mají "M" před jejich jménem.

Poznámka: Také si je třeba na e-mail náplast na alespoň jeden mailing listu. Pokud nejste schopni najít seznam adres, na základě výše uvedených dvou metod, které se zabývá subsystémem, proti kterému se snažíte, aby předložily své opravu, pak byste měli alespoň e-mail na Linux kernel mailing list (linux-kernel @ vger .kernel.org).

Krok 9: Test e-mailu náplast

I když byste mohli použít libovolnou e-mailového klienta a hostitele, SMTP, který chcete, a mít přístup k, zjistil jsem, že Gmail je to nejlepší, protože mnoho vývojářů jádra použí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 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, bude žádat o zadání hesla účtu Gmail, který budete muset zadat, aby se skutečně poslat e-mail.

Nyní zkontrolujte e-mailových účtů uvedených výše ověřit, pokud máte e-mail a vše vypadá dobře na podání.

Krok 10: Nakonec Email náplast

. Je-li vše vypadá dobře a pak se konečně na e-mail 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

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

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

Být společenský, Share!