Après avoir travaillé avec Linux (la plupart du temps comme un utilisateur avancé) pendant des années, j'ai décidé de poster mon premier patch du noyau Linux (bien que trivial mais bon vous devez commencer quelque part!) et j'ai été ravi quand le premier s'est acceptée par le soutien du sous-système, puis finalement il coulait dans le noyau de la canalisation principale.

Ce qui suit est un guide étape par étape sur la façon de soumettre un noyau Linux correctif et nous espérons qu'il est accepté dans le noyau principal. Ce HOW-TO est basé sur une pièce réelle que j'ai écrit et soumis et qui ont été admis dans le noyau principale hier. Le guide souligne surtout la mécanique de l'envoi de correctifs et pas nécessairement les aspects techniques de conception de noyau Linux.

Etape 1: Installez Git Outils

La première chose que nous devons faire est de s'assurer que nous avons les outils nécessaires pour créer et soumettre notre patch du noyau Linux. J'utilise mon système Debian Lenny pour ce HOW-TO.

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

En outre, il est une bonne idée de configurer certains paramètres que quelques Git utilisera quand il génère votre patch:

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

Étape 2: Clone de Linus Git arbre

La prochaine chose que vous pouvez faire est de cloner l'arbre Git de Linus préférence sur votre machine Linux. Assurez-vous que vous avez suffisamment d'espace (au moins 2 Go) avant de cloner l'arbre. Au moment d'écrire ces lignes la taille totale de l'arbre était d'environ 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

Maintenant, attendez pendant 30 minutes, en fonction de votre vitesse de connexion Internet, avant l'arbre entier est téléchargé dans votre répertoire mylinux-2.6 (répertoire sera automatiquement créé depuis que vous avez spécifié dans la commande). Toute patchwork devrait toujours être fait contre cet arbre pour s'assurer que vos modifications risquent de ne pas entrer en conflit avec les modifications apportées par d'autres développeurs.

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#

A partir d'ici tout le travail se fera dans le répertoire / usr/src/mylinux-2.6.

Étape 3: Maintenant créer une branche locale de faire vos changements

Par défaut, lorsque vous clonez l'arbre Git vous êtes dans la branche master.

# git branch
* master
#

Le * ci-dessus indique votre succursale.

Créons une nouvelle branche mes MenlowRebootFix dans lequel nous allons faire nos changements de code:

# git branch MenlowRebootFix

Ensuite, vous devez à la caisse de la branche nouvellement créée ci-dessus:

# git checkout MenlowRebootFix

Confirmez que vous êtes dans la branche ci-dessus:

# git branch
*MenlowRebootFix
master
#

Étape 4: Faites vos changements

Maintenant, je vais faire des changements dans le fichier de arch/x86/kernel/reboot.c. Après avoir fait vos modifications dans le fichier et sauvegardé donner la commande suivante:

# git commit -a

La commande ci-dessus va ouvrir un éditeur de texte dans la même fenêtre sur l'écran de votre terminal (mon éditeur de texte par défaut est nano) comme ceci:

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

Maintenant, nous allons entrer dans notre commettre message de journal. Soyez très prudent ce que vous tapez dans le message de journal parce que ces messages feront partie de l'arbre de Linux git commit journal et les gens seront la recherche de votre engagement sur la base de ces messages. Voici ce que j'ai tapé dans et voici ce que ma fenêtre de l'éditeur finale regardé il:

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
#

Maintenant, le texte en bleu va devenir votre principale ligne d'objet du patch que vous envoyez et deviendra également l'identifiant dans le git commit journal.

Remarque: Il est très important que vous tapez d'abord le nom du sous-système auquel votre patch appartient. Dans mon cas, puisque je suis la modification du fichier de reboot.c dans le répertoire de l'architecture x86, je commence par la ligne de sujet avec x86:.

Après cela, vous devez laisser une ligne vide. et puis tapez une brève description de votre changement (de couleur marron) qui deviendra le changelog de ​​la git commit journal.

Ne vous inquiétez pas au sujet du texte de couleur orange qui commence par #. Ceux-ci seront ignorés par git commit.

and description , your description will become part of the subject line and it will be all mess. Remarque: Si vous ne laissez pas une ligne vide entre le sujet et la description, votre description fera partie de la ligne d'objet et il sera tout désordre.

Étape 5: Créer votre patch


Alors maintenant, vous avez commis votre patch dans votre dépôt Git local, il est temps pour générer le patch que nous enverrons aux responsables respectifs et listes de diffusion. Pour générer correctif simplement donner la commande suivante:

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

Cela devrait créer un fichier 0001-x86-Fix-reboot-problème-sur-VersaLogic-Menlow-boards.patch dans votre répertoire courant dont le contenu sera:

De 04056e508c996b023857f8076da7fb54096d10e9 lundi 17 septembre 2001 0:00:00
De: Kushal Koolwal <kushalkoolwal@gmail.com>
Date: Sat, 19 février 2011 13:14:03 -0800
Sujet: [PATCH 1/1] x86: Correction d'un problème de redémarrage sur des planches VersaLogic Menlow.
Cartes à base VersaLogic Menlow pendent au redémarrage reboot = bios moins est utilisé.

Ajouter bizarrerie de redémarrer dans le BIOS.
Testé sur au moins quatre planches.

Signé-off-by: Kushal Koolwal <kushalkoolwal@gmail.com>
-
arch/x86/kernel/reboot.c | 8 + + + + + + + +
1 fichiers modifiés, 8 insertions (+), 0 suppressions (-)
diff-git a/arch/x86/kernel/reboot.cb/arch/x86/kernel/reboot.c
indice 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"),
},
},
+ {/ * Problèmes de poignée avec le redémarrage sur des planches VersaLogic Menlow * /
+. Rappel = set_bios_reboot,
+. Ident = "carton à base de VersaLogic Menlow",
+. Correspond = {
+ DMI_MATCH (DMI_BOARD_VENDOR, "VersaLogic Société"),
+ DMI_MATCH (DMI_BOARD_NAME, «conseil VersaLogic Menlow"),
+},
+},
{}
};
-
1.7.2.3

Notez que le nom du fichier a été choisi à partir de la première ligne de la git commit journal. Aussi l'option-n ajoute le numéro de patch [PATCH 1/1] à votre sujet et l'option-s ajoute la Signé-off-by: ligne. L'e-mail qui est repris dans la ligne signé est pris à partir de la configuration de votre Git que vous avez défini à l'étape 1.

Étape 6: Vérifiez votre correction des erreurs

Ensuite, nous devons faire en sorte que le patch, nous essayons de présenter ne contient pas d'erreurs évidentes comme des espaces blancs, dépassant 80 limite de colonne, etc Il ya un script perl appelé checkpath.pl qui est fourni avec les sources du noyau à cet effet :

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

et vous devriez voir quelque chose comme ceci:

Sortie:

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.

Il ya d'autres scripts également prévues à l'intérieur de la source du noyau pour fixer / nettoyer votre patch comme:

scripts/cleanfile
scripts/cleanpatch

Étape 7: Testez votre patch

Encore une fois, il est très important que vous appliquez le patch à l'arborescence Linus 'Git, compiler et tester avant d'envoyer votre correction en amont.

# 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

Étape 8: Obtenir la liste des gens à soumettre patch

En supposant que votre patch compilé, a travaillé comme vous le souhaitez et à vos emails de test avait l'air bien la prochaine étape est d'obtenir la liste des personnes concernent à qui vous devez envoyer votre patch. Il existe deux méthodes pour le faire:

Méthode 1: utiliser le script fourni dans les sources du noyau

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

Sortie:

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

Méthode 2: Reportez-vous au fichier MAINTAINERS

L'autre méthode est de se référer à la MAINTAINERS fichier qui est de fournir à l'intérieur de l'arbre des sources du noyau. Vous devez au moins envoyer votre patch pour toutes les personnes qui ont «M» avant leur nom.

Remarque: Vous devez également envoyer votre patch pour au moins une liste de diffusion. Si vous n'êtes pas en mesure de trouver une liste de diffusion, sur la base des deux méthodes ci-dessus, qui est concerné par le sous-système sur lequel vous essayez de soumettre votre patch, alors vous devriez au moins un courriel à la liste de diffusion du noyau Linux (linux-kernel @ vger . kernel.org).

Étape 9: Test envoyer votre patch

Bien que vous pouvez utiliser n'importe quel client de messagerie et hôte SMTP que vous voulez et avoir accès à, j'ai trouvé que l'utilisation de Gmail était le meilleur depuis un grand nombre de développeurs du noyau utilisera. Maintenant, il est très important que vous testez d'abord votre correction en lui envoyant vos propres adresses e-mail (possible différente de compte e-mail avec les différents fournisseurs de messagerie). J'utilise ce qui suit:

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

Après vous appuyez sur Entrée, il vous demandera votre mot de passe Gmail compte que vous devez saisir afin de réellement envoyer le courriel.

Maintenant, vérifier les comptes de messagerie énumérés ci-dessus pour vérifier si vous avez l'email et tout semble bon pour la soumission.

Étape 10: Enfin envoyer votre patch

Si tout est normal, alors vous enfin envoyez votre patch sur la base de la liste des personnes que vous avez trouvé à l'étape 8. C'est ce que j'ai fini par utiliser:

# 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

Voici que commettent journal de l'acceptation de mon patch par Ingo Molnar qui coulait alors de l'arbre de Ingo Molnar à Stephen Rothwell linux prochaine l'arbre et enfin dans de Linus Torvald principale noyau Linux l'arbre.

C'est tout! Bonne chance avec votre premier patch!

Soyez sociable, Partager!