Après avoir travaillé avec Linux (principalement comme un utilisateur avancé) pendant des années, j'ai décidé de poster mon premier patch du noyau Linux (même si trivial mais bon il faut bien commencer quelque part!) et j'ai été ravie quand elle obtenu la première fois accepté par le responsable du sous-système et ensuite En définitive, il coula dans le noyau 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'elle est acceptée dans le noyau principal. Ce HOW-TO est basé sur une pièce elle-même que j'ai écrit et présentée et qui été accepté dans le noyau principale hier. Le guide souligne surtout la mécanique de l'envoi de patches et les aspects de conception pas nécessairement techniques du noyau Linux.

Etape 1: Installez les outils de Git

La première chose que nous devons faire est de s'assurer que nous avons les outils nécessaires pour créer et présenter notre patch pour le noyau Linux. J'utilise mon système Debian Lenny pour cette 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 lorsqu'il génère votre patch:

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

Étape 2: Clone Linus Git l'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 autour de 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, selon votre vitesse de connexion à Internet, avant de 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 pour effectuer les modifications

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

# git branch
* master
#

L'* ci-dessus indique votre branche courante.

Nous allons créer une nouvelle branche mon MenlowRebootFix où nous ferons 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 apporter des modifications au fichier 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 message du journal de validation. Soyez très prudent ce que vous tapez dans le message du journal parce que ces messages seront intégrés arbre Git Linux commettre journal et les gens vont être à la recherche de votre commit la base de ces messages. Voici ce que j'ai tapé dans et voici ce que ma dernière fenêtre de l'éditeur 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 deviendra votre ligne de sujet principal de la pièce que vous envoyez et deviendrez également l'identifiant dans le journal des commit Git.

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

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

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

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 deviendra une 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 Mon 17 Sep 2001 00:00:00
De: Kushal Koolwal <kushalkoolwal@gmail.com>
Date: Sat, 19 février 2011 13:14:03 -0800
Sujet: [PATCH 1/1] x86: problème de redémarrage Fix sur les cartes Menlow VersaLogic.
VersaLogic conseils basés Menlow accrocher la réinitialisation tant que reboot = bios est utilisé.

Ajouter bizarrerie de redémarrer à travers 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"),
},
},
+ {/ * Traiter les problèmes avec le redémarrage sur des planches Menlow VersaLogic * /
+. Callback = set_bios_reboot,
+. Ident = "conseil basée VersaLogic Menlow»,
+. Match = {
+ DMI_MATCH (DMI_BOARD_VENDOR, "VersaLogic Société"),
+ DMI_MATCH (DMI_BOARD_NAME, "VersaLogic conseil Menlow"),
+},
+},
{}
};
-
1.7.2.3

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

Étape 6: Vérifiez votre correction d'erreurs

Ensuite, nous devons nous assurer que le correctif que 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évus dans le source du noyau pour fixer / nettoyer votre patch comme:

scripts/cleanfile
scripts/cleanpatch

Étape 7: Testez votre patch

Là encore, il est très important que vous appliquez le patch sur l'arbre Git le Linus, 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: Obtenez la liste des personnes à soumettre patch

En supposant que votre patch compilé, a travaillé la façon dont vous voulez qu'elle et vos emails de test avait l'air bien la prochaine étape est d'obtenir la liste des préoccupations des gens à qui vous devez envoyer votre patch. Il existe deux méthodes pour y parvenir:

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'arborescence des sources du noyau. Vous devez au moins email votre patch pour toutes les personnes qui ont «M» avant de leur nom.

Note: vous devez envoyer votre patch pour au moins une liste de diffusion. Si vous n'êtes pas capable trouver une liste de diffusion, selon les 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 courriel à Linux Kernel Mailing List (linux-kernel @ vger . kernel.org).

Étape 9: Test Email votre patch

Bien que vous puissiez 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 la meilleure depuis un grand nombre de développeurs du noyau utiliser cela. Maintenant, il est très important que vous devez d'abord tester votre patch en lui envoyant vos propres adresses e-mail (possible compte e-mail différente avec 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

Une fois que vous appuyez sur Entrée, il vous demandera votre mot de passe du compte Gmail que vous devez saisir pour envoyer réellement le message.

Vous pouvez maintenant vérifier les comptes de messagerie ci-dessus pour vérifier si vous avez obtenu le courrier électronique et tout semble bon pour la soumission.

Etape 10: Enfin envoyer votre patch

Si tout semble bon, alors vous finalement email votre correction en fonction 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 ce journal de validation de l'acceptation de mon patch par Ingo Molnar qui a ensuite coulait de l'arbre de Ingo Molnar à Stephen Rothwell linux-next arbre et enfin dans de Linus Torvald noyau Linux arbre.

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

Soyez sociable, Partager!