Dopo aver lavorato con Linux (per lo più come un utente esperto) per anni, ho deciso di postare la mia prima patch per il kernel di Linux (anche se banale, ma hey è necessario iniziare da qualche parte!) e sono rimasto basito quando in primo luogo è stata accettata dal responsabile della manutenzione del sottosistema e poi in ultima analisi, scorreva nel kernel mainline.

Quello che segue è una guida passo-passo su come presentare un kernel Linux di patch e spero che venga accettato nel kernel mainline. Questo HOW-TO si basa su una patch reale che ho scritto e presentato e che è stata accettata nel kernel mainline ieri. La guida mette in evidenza soprattutto la meccanica di invio di patch e agli aspetti progettuali non necessariamente tecnici del kernel Linux.

Fase 1: Installare Git Strumenti

La prima cosa che dobbiamo fare è quello di assicurarsi di avere gli strumenti necessari per creare e presentare la nostra patch per il kernel Linux. Sto usando il mio sistema Debian Lenny per questo HOW-TO.

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

Inoltre è una buona idea per configurare alcuni pochi parametri che Git utilizzerà quando si genera il cerotto:

# git config --add user.name "Kushal Koolwal"
# git config --add user.email "kushalkoolwal@gmail.com"

Fase 2: Clone Linus 'Git Albero

La prossima cosa che si consiglia di fare è quello di clonare Git albero di Linus preferibilmente sulla vostra macchina Linux. Assicurarsi di avere spazio sufficiente (almeno 2 GB) prima di clonare l'albero. Al momento in cui scriviamo la dimensione totale della struttura è stato di circa 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

Ora attendere per 30 minuti o giù di lì, a seconda della velocità di connessione a Internet, prima che l'intero albero viene scaricato nella directory mylinux-2.6 (directory verrà creata automaticamente dal momento che hai specificato nel comando). Qualsiasi patchwork dovrebbe sempre essere fatto contro questo albero per fare in modo che le modifiche potrebbero non entrare in conflitto con le modifiche apportate da altri sviluppatori.

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#

Da qui in poi tutto il lavoro sarà fatto in directory /usr/src/mylinux-2.6.

Fase 3: Ora creare una filiale locale per apportare le modifiche

Per impostazione predefinita, quando si clona l'albero Git si è nel ramo principale.

# git branch
* master
#

Il * di cui sopra indica la diramazione corrente.

Creiamo una nuova filiale miei MenlowRebootFix in cui dovremo fare i nostri modifiche al codice:

# git branch MenlowRebootFix

Allora avete bisogno di checkout quanto sopra ramo appena creato:

# git checkout MenlowRebootFix

Conferma di essere nel ramo di cui sopra:

# git branch
*MenlowRebootFix
master
#

Passo 4: Apportare le modifiche

Ora ho intenzione di apportare modifiche al file / reboot.c arch / x86 kernel /. Dopo aver effettuato le modifiche al file e salvato dare il seguente comando:

# git commit -a

Il comando precedente si aprirà un editor di testo nella stessa finestra sullo schermo del terminale (il mio editor di testo di default è nano) in questo modo:

# 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
#

Ora dobbiamo entrare nel nostro messaggio di commit log. State molto attenti a ciò che si digita nel messaggio di log, perché questi messaggi entreranno a far parte della Linux Git albero commettere registro e la gente si ricerca nel commit basa su questi messaggi. Ecco quello che ho scritto e qui è quello che la mia finestra redattore finale sembrava che:

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
#

Ora il testo in colore blu diventerà il vostro oggetto principale della patch che si email e vi diventerà anche l'identificatore del Git commit log.

Nota: E 'molto importante che prima di digitare il nome del sottosistema a cui il cerotto appartiene. Nel mio caso dal momento che sto modificando il file reboot.c nella directory architettura x86, comincio da oggetto con x86:.

Dopo di che è necessario lasciare una riga vuota. e quindi digitare una breve descrizione del tuo cambiamento (di colore marrone) che diventerà il changelog del Git commit log.

Non preoccuparti per il testo in colore arancione che inizia con #. Quelli saranno ignorate dal git commit.

and description , your description will become part of the subject line and it will be all mess. Nota: Se non si lascia una riga vuota tra il soggetto e la descrizione, la tua descrizione diventerà parte della riga dell'oggetto e sarà tutto pasticcio.

Passo 5: Creare il cerotto


Così ora avete commettere il cerotto nel vostro repository Git locale, è il momento di generare la patch che vi e-mail ai rispettivi manutentori e mailing list. Per generare delle patch è sufficiente dare il seguente comando:

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

Questo dovrebbe creare un file di 0001-x86-Fix-riavvio-problemi-on-VERSALOGIC-Menlow-boards.patch nella directory corrente il cui contenuto sarà:

Da 04056e508c996b023857f8076da7fb54096d10e9 Lun 17 Set 2001 00:00:00
Da: Kushal Koolwal <kushalkoolwal@gmail.com>
Data: Sat, 19 Feb 2011 13:14:03 -0800
Oggetto: [PATCH 1/1] 86: Risolvere problema di riavvio sulle schede VERSALOGIC Menlow.
Schede basate VERSALOGIC Menlow appendere al riavvio a meno che non si utilizza reboot = bios.

Aggiungi stranezza di riavviare tramite il BIOS.
Testato su almeno quattro schede.

Firmato-off-by: Kushal Koolwal <kushalkoolwal@gmail.com>
-
arch / x86 / kernel / reboot.c | 8 ++++++++
1 file modificati, 8 inserimenti (+), 0 delezioni (-)
diff -git un / arch / x86 / kernel / reboot.cb / arch / x86 / kernel / reboot.c
Indice fc7aae1..715037c 100.644
- Un / 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"),
},
},
+ {/ * Problemi maniglia con il riavvio sulle schede VERSALOGIC Menlow * /
+ .callback = Set_bios_reboot,
+ .ident = "Tavolo basato VERSALOGIC Menlow",
+ .matches = {
+ DMI_MATCH (DMI_BOARD_VENDOR, "VERSALOGIC Corporation"),
+ DMI_MATCH ("scheda VERSALOGIC Menlow" DMI_BOARD_NAME,),
+},
+},
{}
};
-
1.7.2.3

Si noti come il nome del file è stato prelevato dalla prima riga del git commit log. Anche la -n opzione consente di aggiungere il numero di patch [PATCH 1/1] per il soggetto e l'opzione -s aggiunge il-off Signed-by: linea. L'e-mail che viene prelevato in linea firmato fuori viene prelevato dalla configurazione del Git impostato nel passaggio 1.

Passo 6: Controlla la tua patch per errori

Poi abbiamo bisogno di fare in modo che la patch che stiamo cercando di presentare non contiene errori evidenti come spazi bianchi, superiore a 80 limite di colonna, ecc C'è uno script perl chiamato checkpath.pl che viene fornito con i sorgenti del kernel per questo scopo :

# scripts/checkpatch.pl 0001-x86-Fix-reboot-problem-on-VersaLogic-Menlow-boards.patch

e si dovrebbe vedere qualcosa di simile a questo:

Uscita:

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.

Ci sono altri script forniti anche all'interno del sorgente del kernel per riparare / pulire la zona come:

scripts/cleanfile
scripts/cleanpatch

Fase 7: verifica del cerotto

Anche in questo caso è molto importante che si applica il cerotto al Linus 'Git albero, compilarlo e testarlo prima di inviare il cerotto a monte.

# 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

Fase 8: Ottenere la lista delle persone a presentare patch

Assumendo che il cerotto compilato, lavorato il modo in cui si desidera e le e-mail di prova sembrava buono il passo successivo è quello di ottenere la lista delle riguardano persone a cui si deve la posta elettronica la vostra patch. Ci sono due metodi per farlo:

Metodo 1: Utilizzare lo script fornito nei sorgenti del kernel

# scripts/get_maintainer.pl 0001-x86-Fix-reboot-problem-on-VersaLogic-Menlow-boards.patch

Uscita:

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)
#

Metodo 2: Fare riferimento al file dei Manutentori

L'altro metodo è quello di fare riferimento al MAINTAINERS file è fornire all'interno dei sorgenti del kernel. È necessario almeno il cerotto e-mail a tutte le persone che hanno "M" prima del loro nome.

Nota: Inoltre è necessario inviare il cerotto per almeno una mailing list. Se non si è in grado trovare mailing list, sulla base dei due metodi di cui sopra, che si occupa con il sottosistema contro il quale si sta tentando di inviare la tua patch, allora si dovrebbe almeno e-mail a Linux Kernel Mailing List (linux-kernel @ vger .kernel.org).

Passo 9: Verifica Email vostra patch

Anche se è possibile utilizzare qualsiasi client di posta elettronica e l'host SMTP che si desidera e avere accesso a, ho scoperto che l'uso di Gmail è stato il migliore dal momento che un sacco di sviluppatori del kernel usare quella. Ora è molto importante che prima di testare la vostra patch inviando i propri indirizzi e-mail (eventuale indirizzo di posta elettronica diverso con diversi provider di posta elettronica). Io uso il seguente:

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

Dopo aver premuto invio, esso vi chiederà la password dell'account di Gmail che è necessario inserire per inviare effettivamente l'e-mail.

Ora controllare account di posta elettronica di cui sopra per verificare se hai l'e-mail e tutto sembra a posto per la presentazione.

Passo 10: Finalmente Invia il cerotto

. Se tutto sembra a destra e poi finalmente e-mail la vostra patch sulla base della lista delle persone che hai trovato nel passaggio 8 Questo è quello che ho effettivamente finito per usare:

# 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

Ecco che commettere registro della accettazione della mia patch di Ingo Molnar che poi colava da un albero di Ingo Molnar al di Stephen Rothwell linux-prossimo albero e infine in di Linus Torvald mainline kernel Linux albero.

Questo è tutto! Buona fortuna con il vostro prima patch!

Essere socievole, Condividi!