Bon, je vais essayer de faire le plus précis possible, ça va pas être de la tarte vu que ça fait un moment que j'ai fait ça déjà.
Déjà, quelques notions:
Compiler, c'est transformer les sources en exécutable. En l'occurrence, les sources du noyau Linux sont disponibles, donc on peut les modifier à sa guise pour se compiler un noyau perso. Il y a deux façons de les obtenir: Soit on télécharge le noyau Linux "Vanilla", le truc d'origine, mais c'est pas trop conseillé. Soit on télécharge le noyau Linux correspondant à sa distro, qui est fourni avec des patches spécifiques que je suppose nécessaires pour conserver une cohérence dans son système. L'idée ici, c'est d'ajouter un patch supplémentaire aux patches déjà présents.
Un patch c'est un fichier qui décrit les différences entre deux fichiers. En gros, c'est ce qui doit être ajouté/enlevé pour passer d'une version A à une version B. On peut créer un patch avec la commande "diff".
La première étape, c'est RTFM. Yen a des tartines, mais c'est nécessaire.
Donc commencer par là:
http://doc.fedora-fr.org/wiki/Recompilation_du_noyau_Fedora
Et s'attacher tout particulièrement à cette partie:
http://doc.fedora-fr.org/wiki/Recompilation_du_noyau_Fedora#La_compilation_des_sources_du_noyau_Fedora
La doc redirige vers une manip à faire pour créer un environnement de construction:
http://doc.fedora-fr.org/wiki/RPM_:_environnement_de_construction
Ce n'est pas une option, ça aide vraiment à ne pas couler. (Bon, les parties 5 et 8 peuvent être zappées allègrement mais pas le reste)
Pour faciliter les manips et être sûre de pas faire de conneries, je me suis carrément loguée en mode graphique avec le compte builder, mais c'est pas obligatoire.
Je me suis aidée également de la doc anglophone:
http://fedoraproject.org/wiki/Building_a_custom_kernel qui la de double avantage d'être plus concise et d'expliquer comment ajouter un patch. En l'occurrence, c'est bien ce qu'on veut faire. Ça tombe sacrément ien.
Très important:
À tout moment, il faut bien vérifier que les commandes sont bien adaptées à la version de fedora qu'on a ET à la version du noyau. Les exemples donnés ne sont pas nécessairement adaptés.
Donc, en tant que builder, il reste à effectuer les manips suivantes:
7.2 doc franco:
bien faire gaffe aux numéros dans le wget, toussa
7.3 doc franco:
bien repérer où est quoi, un peu d'exploration fait pas de mal 😉
7.4 et 7.5 doc franco:
c'est mieux, c'est sûr. Mais comme j'y suis allée comme une conna**e j'ai pas pris cette peine. Bon la compil a duré 2h mais osef, ça marche.
La suite ne nous intéresse pas car elle ne concerne pas ce qu'on souhaite faire (ajouter un patch et tout compiler définitivement). On passe donc à la création du patch, et c'est dans la doc anglophone que ça devient intéressant.
On va donc décompresser les sources, faire une copie du fichier à modifier et y faire les modifications nécessaires:
(attention à la version du noyau hein, je prends l'exemple du mien)
tar -jxf /home/builder/rpmbuild/SOURCES/linux-2.6.35.tar.bz2
cd /home/builder/rpmbuild/SOURCES/linux-2.6.35//drivers/gpu/drm/i915
cp intel_bios.c intel_bios.c.modif
Ensuite, tu ouvres le fichier .modif avec ton éditeur de texte préféré, et tu changes la ligne 270 et des brouettes (c'est la ligne 279 chez moi) de ça:
general->ssc_freq ? 100 : 120;
vers ça:
general->ssc_freq ? 120 : 100;
puis tu enregistres et tu quittes.
À présent on fait le patch:
toujours dans le même répertoire
diff -u intel_bios.c intel_bios.c.modif > /home/builder/rpmbuild/SOURCES/fix_intel_chipsetmerdique.patch
Reste encore à éditer le patch pour que les chemins soient corrects. Tu ouvres /home/builder/rpmbuild/SOURCES/fix_intel_chipsetmerdique.patch avec ton éditeur préféré, et dans les headers, tu modifies les chemins pour que ton fichier ressemble à ça:
--- a/drivers/gpu/drm/i915/intel_bios.c 2011-05-27 18:38:26.261139192 +0200
+++ b/drivers/gpu/drm/i915/intel_bios.c 2011-05-27 18:39:10.991813807 +0200
@@ -276,7 +276,7 @@
general->ssc_freq ? 66 : 48;
else if (IS_IRONLAKE(dev_priv->dev) || IS_GEN6(dev))
dev_priv->lvds_ssc_freq =
- general->ssc_freq ? 100 : 120;
+ general->ssc_freq ? 120 : 100;
else
dev_priv->lvds_ssc_freq =
general->ssc_freq ? 100 : 96;
Il faut que les chemins soient ceux-ci, avec le a pour l'un, le b pour l'autre, et bien virer le ".modif" du deuxième chemin.
Ensuite, il faut suivre la doc anglophone à la lettre à partir de la section "
Prepare Build Files". I faut éditer le fichier
kernel.spec pour:
- nommer son kernel (tu mets ce que tu veux pour le <custom text>, intelfixed par exemple)
- ajouter le patch à la liste (déjà longue) de patches présents.
Une fois que c'est édité comme il faut, on peut passer à la compil. Pour ne pas se prendre la tête, exécuter ça devrait suffire:
rpmbuild -bb --target=`uname -m` kernel.spec
Si on a en effet pas désactivé les autres archi, ça peut prendre longtemps. Pour moi, ça a pris à peu près 2h. Sinon, c'est l'affaire de 10 min.
Une fois que c'est fini, les paquets sont arrivés dans le dossier RPMS, ya plus qu'à installer.
cd /home/builder/rpmbuild/RPMS/x86_64
su
rpm -ivh kernel-2.6.35.13-91.intelfixed.fc14.x86_64.rpm
Voilà, ça devrait suffire. Ya plus qu'à booter dessus et voir si ça fait des chocapics.
(j'ai fait ça un peu vite, donc ya ptêtre des erreurs, mais l'idée est là)