Comment faire pour créer et soumettre votre premier patch du noyau Linux en utilisant GIT
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!













11 mars 2011 à 09h19
hey my name is Abderrahmane I'am d'Algérie
d'abord désolé pour mon anglais.
vous avez un système Debian le serveur, je voudrais ajouter quelque service comme astérisque et la messagerie, dois-je copmile le noyau pour faire un système personnalisé,
mon but est de faire debian personnalisé après instalation de cd ou en live cd mon serverice sera prêt pour courir comme atsrisk apache ...
merci beaucoup
Répondre à ce commentaire
7 avril 2011 à 00h31
Salut,
merci pour cet excellent tutoriel!
Je pense qu'il ya une petite erreur. Je pense qu'il Shold être «patch-p1 <0001-x86-Fix-reboot-problème-sur-VersaLogic-Menlow-boards.patch" au lieu de "patch-p1 0001-x86-Fix-reboot-problème-sur-VersaLogic- Menlow-boards.patch ".
Regard,
Tom
Répondre à ce commentaire
21 juin 2011 à 12h11
Excellente howto avec ce que j'ai obtenu mon patch facilement créés et inclus dans le processus de développement du noyau Linux. Je vous remercie.
Compiler le noyau de test pourrait être un peu difficile pour nous newbiez. Voici un excellent wiki pour aider sur les systèmes Ubuntu:
https://wiki.ubuntu.com/KernelTeam/GitKernelBuild .
Br Thomas
Répondre à ce commentaire
30 juin 2011 à 23h36
Salut,
Voici quelque chose de similaire axé sur les systèmes embarqués - recherche
2010-10 Comment faire un patch noyau GNU / Linux - Embedded direct de Londres
http://www.reliableembeddedsystems.com/publications.html
Cordialement,
Robert
Répondre à ce commentaire
23 juillet 2011 à 06h59
Nous vous remercions de manière claire et technique comment faire. Vous êtes une source d'inspiration pour
nous dans la communauté Debian et Linux.
Depuis, vous avez l'éducation formelle d'études supérieures, les références de livres supplémentaires,
Pourquoi les programmes comme Échec peut être utile.
http://www.amazon.com/Why-Programs-Fail-Systematic-Debugging/dp/1558608664
Répondre à ce commentaire
25 septembre 2011 à 03h19
Je suis encore à apprendre sur Ubuntu. Loin de patcher le noyau. Lol
Répondre à ce commentaire
18 octobre 2011 à 23h13
vraiment sympa tutoriel sur Comment faire. Créer et soumettre votre premier patch du noyau Linux en utilisant GIT Merci pour ça ...
et j'ai un blog linux de mon propre ... http://www.linuxthebest.com/root-in-ubuntu-tutorial.html
remerciements
Répondre à ce commentaire
25 janvier 2012 à 20h05
[...] Restrictive sur le style de la poste, correction, etc, consultez la FAQ de la liste du noyau. Mais il ya un bon tutoriel pour éviter la plupart des [...]
9 février 2012 à 15h48
Merci pour l'excellent apprêt. Essayer d'ajouter git à mon processus de soumission de code.
Répondre à ce commentaire
30 juillet 2012 à 11:10
Jetez un oeil à
git am-signoff
au lieu d'utiliser
patch-p1 <
"Git am" ajoutera le plein engagement de votre arbre git commit y compris le texte de git. «Patch» ne appliquer les modifications de code source et les modifications ne seront pas engagés à git.
Utilisez "git am avorter" pour annuler un engagement qui va mal.
Répondre à ce commentaire
1 janvier 2013 à 11h45
[...] Le noyau, je suppose que la plupart des lignes directrices y appliquer trop. En tant que "comment" guider, J'ai trouvé cet article sur le web qui décrit pas à pas les instructions pas à pas, en fait, Git est capable d'envoyer une série de patch [...]
9 janvier 2013 à 07h16
Belle intro. J'ai juste commencé à travailler avec Git pour la première fois - en dépit de l'utilisation de SVN et CVS pour un certain nombre d'années. Il a été révèle assez intéressant jusqu'ici :)
Permettra de sauver ce tutoriel et pratique quand je rentre à la maison ce soir.
Beau travail.
Répondre à ce commentaire
30 mars 2013 à 18h18
salut, merci pour ce tutoriel. J'ai écrit mon premier patch du noyau Linux, et l'envoyer au mainteneur hier.
Cependant, comment puis-je savoir si mon patch est accepté ou non?
remerciements
Répondre à ce commentaire
1 mai 2013 à 08:39
[...] Comment faire pour créer et soumettre votre premier patch du noyau Linux à l'aide