HOWTO: Créer et soumettre votre premier patch du noyau Linux à l'aide GIT
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 pour le noyau Linux (bien que trivial, mais hey, vous devez commencer quelque part!) et j'ai été très heureux lors de sa première a été acceptée par le responsable du sous-système, puis finalement ça dégouline jusque dans noyau principal.
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 sera accepté dans le noyau principal. Ce HOW-TO est basé sur un patch réelle que j'ai écrit et soumis et qui a été acceptée dans le noyau principale hier. Le guide met en évidence la plupart des mécaniciens de l'envoi des correctifs et des aspects de la conception pas nécessairement techniques de noyau Linux.
Étape 1: Installer les outils Git
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 pour le 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 qui vont utiliser Git quand il génère votre patch:
# git config --add user.name "Kushal Koolwal"
# git config --add user.email "kushalkoolwal@gmail.com"
Étape 2: Arbre git clone de Linus
La prochaine chose que vous voudrez peut-être à faire est de cloner l'arbre Git de Linus préférence sur votre machine Linux. Assurez-vous d'avoir 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 environ, en fonction de votre vitesse de connexion Internet, avant de l'arbre tout 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 mosaïque doit toujours être fait contre cet arbre afin de 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#
De là, partir tout le travail sera fait dans / usr/src/mylinux-2.6 répertoire.
Étape 3: Maintenant, créez une branche locale de faire vos changements
Par défaut, lorsque vous clonez l'arbre Git vous êtes dans la branche principale.
# git branch
* master
#
L '* signifie au-dessus de votre succursale.
Nous allons créer une nouvelle branche mon MenlowRebootFix dans lequel nous ferons nos modifications du code:
# git branch MenlowRebootFix
Ensuite, vous devez à la caisse de la branche au-dessus nouvellement créé:
# git checkout MenlowRebootFix
Assurez-vous que vous êtes dans la branche au-dessus:
# git branch
*MenlowRebootFix
master
#
Étape 4: Faites vos changements
Maintenant, je vais faire des changements dans le fichier arch/x86/kernel/reboot.c. Après avoir fait vos modifications dans le fichier et enregistré, tapez 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 message du journal de validation. Soyez très attention à ce que vous tapez dans le message du journal parce que ces messages feront partie de l'arbre Git Linux commettre journal et les gens vont être à la recherche de votre commit sur la base de ces messages. Voici ce que j'ai tapé dans et voici ce que mon fenêtre de l'éditeur finale, il avait l'air:
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 ligne de sujet principal du patch que vous envoyez et deviendra également l'identifiant dans le journal Git commit.
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 dans le répertoire reboot.c architecture x86, je commence par la ligne sujet avec x86:.
Après que vous avez besoin de quitter une ligne vide. et puis tapez une brève description de votre changement (de couleur marron) qui deviendra le changelog du journal de validation 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 votre sujet et la description, la description de votre feront partie de la ligne d'objet et il sera tout désordre.
Étape 5: Générer 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 vous enverrons les 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 lun. 17 septembre 2001 00:00:00
De: <kushalkoolwal@gmail.com> Kushal Koolwal
Date: Sat, 19 février 2011 13:14:03 -0800
Sujet: [PATCH 1/1] x86: problème redémarrage Fix sur des planches Menlow VersaLogic.
VersaLogic conseils Menlow à base de raccrocher en cas de redémarrage à moins reboot = bios 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"),
},
},
+ {/ * Manipuler des problèmes avec le redémarrage sur des planches Menlow VersaLogic * /
+. De rappel = set_bios_reboot,
+. Ident = "VersaLogic Menlow conseil d'administration basé sur",
+. Matchs = {
+ DMI_MATCH (DMI_BOARD_VENDOR, "VersaLogic Société"),
+ DMI_MATCH (DMI_BOARD_NAME, "VersaLogic Menlow conseil d'administration"),
+},
+},
{}
};
-
1.7.2.3
Notez comment le nom du fichier a été choisi à partir de votre première ligne du journal de validation Git. En outre l'option-n ajoute le numéro de patch [PATCH 1/1] à votre sujet et l'option-s ajoute le Signé-off-by: la ligne. L'e-mail que l'on cueille dans la ligne de hors signé est pris à partir de la configuration de votre Git que vous définissez dans l'étape 1.
Étape 6: Vérifiez votre patch pour les erreurs
Ensuite, nous devons veiller à ce que le patch 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 nommé checkpath.pl qui est fourni avec les sources du noyau à cette fin :
# 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 aussi prévus à l'intérieur de la source du noyau de 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 sur l'arbre Git le Linus, le compiler et le 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 gens à soumettre patch pour
En supposant que votre patch compilé, a 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 votre patch. Il existe deux méthodes pour ce faire:
Méthode 1: Utiliser le script fourni dans le source 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 à l' MAINTAINERS fichier qui est de fournir à l'intérieur de l'arbre des sources du noyau. Vous avez besoin d'au moins e-mail de votre patch pour toutes les personnes qui ont «M» devant leur nom.
Remarque: Vous devez aussi envoyer votre patch pour au moins une liste de diffusion. Si vous n'êtes pas capable de trouver une 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 e-mail à la liste de diffusion du noyau Linux (linux-kernel @ vger . kernel.org).
Étape 9: Test Email votre patch
Bien que vous pouvez utiliser n'importe quel client de messagerie et le serveur SMTP que vous voulez et avoir accès à, j'ai trouvé que l'utilisation de Gmail a été le meilleur depuis un grand nombre de développeurs du noyau utiliser. Maintenant, il est très important que vous devez d'abord tester votre patch en lui envoyant vos propres adresses de courriel (possible compte e-mail différente avec différents services de messageries). J'utilise le texte suivant:
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 sera demandé votre mot de passe compte Gmail dont vous avez besoin pour entrer dans le but pour envoyer le courriel.
Vous pouvez maintenant vérifier les comptes de messagerie mentionnés ci-dessus afin de vérifier si vous avez obtenu l'e-mail et tout semble bon pour la soumission.
Etape 10: Enfin Envoyer votre patch
Si tout semble à droite, puis vous avez enfin envoyer votre patch sur la base de la liste des personnes que vous avez trouvés à l'étape 8. C'est ce que j'ai fini par en utilisant:
# 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 que journal de validation de l'acceptation de mon patch par Ingo Molnar qui a ensuite coulé de l'arbre Ingo Molnar à Stephen Rothwell linux-next arbre et enfin dans de Linus Torvalds noyau principal Linux arbre.
Ça y est! Bonne chance avec votre premier patch!











11 mars 2011 à 9:19 am
hey my name is Abderrahmane i'am de l'Algérie
dans un premier temps désolé pour mon anglais.
vous avez un système Debian exécutant en tant que serveur, je voudrais ajouter un peu de 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é qui après instalation de cd cd ou en live mon serverice sera prêt pour courir comme atsrisk apache ...
merci beaucoup
Répondre à ce commentaire
7 avril 2011 à 12:31 am
Salut,
merci pour ce howto super!
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
Howto Excellent avec ce que j'ai obtenu mon patch facilement créés et inclus dans le processus de développement du noyau linux. Merci.
Compiler le noyau de test pourrait être un peu difficile pour nous newbiez. Voici un wiki excellente 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 de
2010-10 Comment faire un patch GNU / Linux kernel - Embedded en direct de Londres
http://www.reliableembeddedsystems.com/publications.html
Cordialement,
Robert
Répondre à ce commentaire
23 juillet 2011 à 6:59 am
Je vous remercie pour la clarté et technique how-to. Vous êtes une inspiration pour
nous dans la communauté Debian et Linux.
Depuis, vous avez des études supérieures formelle, des références de livres supplémentaires, telles
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 à 3:19 am
Je suis encore à apprendre sur Ubuntu. Loin de patcher le noyau. Lol
Répondre à ce commentaire
18 octobre 2011 à 23h13
vraiment bon didacticiel sur les HOWTO:. Créer et soumettre votre premier patch du noyau Linux à l'aide GIT Merci pour cette ...
et j'ai un blog linux de mon propre ... http://www.linuxthebest.com/root-in-ubuntu-tutorial.html
merci
Répondre à ce commentaire
25 janvier 2012 à 20h05
[...] Restrictive sur le style de l'e-mail, patch, etc, consultez la FAQ de la liste du noyau. Mais il ya un tutoriel intéressant pour éviter la plupart des [...]
9 février 2012 à 15h48
Merci pour l'introduction idéale. Essayer d'ajouter git à mon processus de soumission de code.
Répondre à ce commentaire