Après avoir travaillé avec Linux (la plupart du temps comme un utilisateur avancé) pendant des années, je décidé de publier mon premier patch pour le noyau Linux (bien que trivial mais bon vous devez commencer quelque part!) et je suis ravie quand elle obtenu la première fois accepté par le responsable du sous-système et ensuite finalement il coulait 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'il est accepté dans le noyau principal. Ce how-to est basé sur une pièce réelle que je l'ai écrit et soumis et qui ont été admis dans le noyau de la canalisation principale hier. Le guide souligne surtout la mécanique de l'envoi des correctifs et des aspects de la conception pas nécessairement techniques de noyau Linux.

Etape 1: Installez Git Outils

La première chose que nous devons faire est de nous assurer que nous avons les outils nécessaires pour créer et soumettre notre patch pour le noyau Linux. Je me sers de 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 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 de Linus Git Arbre

La prochaine chose que vous pouvez faire est de cloner l'arbre Git de Linus de 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 créé automatiquement depuis que vous avez spécifié dans la commande). Toute patchwork devrait toujours être fait contre cet arbre pour vous 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 vos modifications

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

# git branch
* master
#

Le * ci-dessus indique votre branche courante.

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 au-dessus:

# git branch
*MenlowRebootFix
master
#

Étape 4: Faites vos changements

Maintenant, je vais apporter des modifications à la x86 / kernel fichier arch / / de 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 votre écran du 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 Linux git commit journal et les gens seront votre recherche commit basées sur ces messages. Voici ce que je tapé 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 envoyer un courriel et pourrez également devenir 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 en train de modifier le 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 engager votre patch dans votre dépôt Git local, il est temps pour générer le patch que nous vous enverrons les responsables respectifs et listes de diffusion. Pour générer correctif donner simplement 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 Lun 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 un / arch / x86 / kernel / reboot.cb / arch / x86 / kernel / reboot.c
indice fc7aae1..715037c 100644
- 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"),
},
},
+ {/ * Problèmes de poignée avec le redémarrage sur des planches VersaLogic Menlow * /
+ .callback = Set_bios_reboot,
+ .ident = "Conseil basé VersaLogic Menlow",
+ = {.matches
+ DMI_MATCH (DMI_BOARD_VENDOR, "VersaLogic Société"),
+ DMI_MATCH (DMI_BOARD_NAME, "VersaLogic Menlow bord"),
+},
+},
{}
};
-
1.7.2.3

Notez que le nom du fichier a été choisi à partir de la première ligne de la git commit connecter. L'option -n ajoute le numéro de patch [PATCH 1/1] à votre sujet et l'option -s ajoute la-off-by Signé: ligne. Le courriel qui est capté 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 patch pour les 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 fournis dans le 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 à Linus de l'arbre Git, compiler et tester avant d'envoyer votre patch 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 personnes à soumettre patch

En supposant que votre patch compilé, travaillé comme vous le souhaitez et à vos e-mails de test avait l'air bien la prochaine étape est d'obtenir la liste des personnes concernent à qui vous devez envoyer un courriel 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: Consultez le fichier de 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.

Note: vous devez envoyer votre patch pour au moins une liste de diffusion. Si vous n'êtes pas en mesure de trouver toute liste de diffusion, sur la base des deux méthodes ci-dessus, qui est concerné par le sous-système contre lequel vous essayez de soumettre votre patch, alors vous devriez au moins 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 à, je trouve que l'utilisation de Gmail était la meilleure depuis un grand nombre de développeurs du noyau utilisera. Maintenant, il est très important que vous testez d'abord votre patch en lui envoyant vos propres adresses e-mail (possible autre compte de messagerie avec différents fournisseurs de messagerie). Je l'utilise comme 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 entrer pour réellement envoyer l'e-mail.

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

Etape 10: Enfin Envoyer votre patch

. Si tout est normal, alors vous finalement Envoyer votre patch basé sur la liste des personnes que vous avez trouvé à l'étape 8 Voilà ce que je fait 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 journal commettre de l'acceptation de mon patch par Ingo Molnar qui coulait alors de l'arbre de Ingo Molnar à Stephen Rothwell linux-next l'arbre et enfin dans de Linus Torvald principale noyau Linux l'arbre.

Ce est tout! Bonne chance avec votre premier patch!

Soyez sociable, Partager!