page en cours de rédaction
ancienne page : Tuto Compiler un noyau Temps-Réel
sujet lié : wiki noyau RT
Table des matières
Introduction
Compiler un noyau soi même n'est généralement pas un tâche obligatoire. La plupart des noyaux préemptifs fournis avec grande majorité des distributions devraient convenir pour l'utilisation d'un système dit MAO. Cependant pour des raisons de configuration matérielle, parce qu'on attends une fonctionnalité qui se trouve dans le dernier noyau ou tout simplement par curiosité, certaine personnes se verront obligé de faire un petit détour dans l'univers des compilateurs.Même si aujourd'hui grâce à l'automatisation du processus, cela devient une tâche aisé, n'oubliez pas que ceci est une manipulation relativement avancée où il faut être sûr de ce que l'on fait. Cet article se focalise donc sur les parties importante concernant la MAO pour que chaque débutant puisse optimiser sont système avec le moindre effort. Cet article n'est pas un tutoriel générale sur la compilation d'un noyau Linux. Pour ceci veuillez vous référer au multiples pages disponibles sur Internet.
Pré-requis
Avant de commencer, assurer de posséder une distribution récente qui fonctionne déjà sous un noyau 3.x. N'espérez pas compiler un noyau 3.x sous un système 2.6!Pour compiler un noyau, il vous faudra télécharger quelques outils et librairies, soit notamment le compilateur gcc et les "headers" du noyau de votre distribution, nous aurons ainsi une configuration sur laquelle nous baser. De plus nous allons préparer un dossier où nous allons télécharger et compiler notre noyau.
Ubuntu 11.10:
A COMPLETER je suis plus trop sûr si c'est tout ... :-p
~~blue:$~~ sudo apt-get install build-essential linux-headers-$(uname -r) wget patch libncurses5-dev ~~blue:$~~ sudo adduser $(whoami) src
Il se peut que vous deviez refermer et ré ouvrir la session pour que vous fassiez réellement parti du groupe src pour avoir le droit d'effectuer les commande suivantes:
~~blue:$~~ mkdir /usr/src/linux-rt/ ~~blue:$~~ cd /usr/src/linux-rt/
Sinon demandez à root un petit coup de main:
~~blue:$~~ sudo mkdir /usr/src/linux-rt/ ~~blue:$~~ sudo chown root.src /usr/src/linux-rt/ ~~blue:$~~ cd /usr/src/linux-rt/
Téléchargement des sources et patchage du noyau
Si vous avez suivi les opérations précédentes, vous devriez vous trouver dans un répertoire tout frais. Téléchargez les sources avec wget depuis le site kernel.org, soit les source du noyau avec le bon patch. Il faut être relativement rigoureux sur les numéros de version utilisés. De plus pour chaque version de patchs, hormis le format de compression, il y a plusieurs façons d'avoir empaqueté le patch mais en regardant les noms de fichier (patch/patches) on arrive s'en sortir. Le mieux et de regarder la dernière version du patch disponible et prendre le noyau concerné:Nous allons donc télécharger le dernier patch et les sources du noyau:
~~blue:$~~ wget ftp://ftp.kernel.org/pub/linux/kernel/projects/rt/3.2/patch-3.2-rt10.patch.bz2 ~~blue:$~~ wget ftp://ftp.kernel.org/pub/linux/kernel/v3.x/linux-3.2.1.tar.bz2
Extraire le noyau et tester le patch:
~~blue:$~~ tar xvfj linux-3.2.1.tar.bz2 ~~blue:$~~ cd linux-3.2.1 ~~blue:linux-3.2.1$~~ bzcat ../patch-3.2-rt10.patch.bz2 | patch -p1 --dry-run
Si vous avez des avertissements ou des messages bizarres, probablement que vous avez pas téléchargé le bon couple version patch/kernel. Assurez-vous d'avoir télécharger le fichier nommé "patch" et non "patches" avec exactement les même version.
Si le patch s'applique sans problème, vous pouvez passer au vrai patchage:
~~blue:linux-3.2.1$~~ bzcat ../patch-3.2.1-rt10.patch.bz2 | patch -p1
Configuration du noyau
Dans un premier temps nous allons copier le fichier de configuration de notre distribution:Ubuntu 11.10:
~~blue:linux-3.2.1$~~ cp /usr/src/linux-headers-$(uname -r)/.config .
Adaptons le fichier de configuration au nouveau noyau. Ici vous pouvez répondre à toutes les questions par défaut, la plupart du temps il s'agit d'un choix judicieux, il est toujours possible de reconfigurer plus tard. Personnellement, je garde la touche "enter" enfoncée jusqu'à la fin.
~~blue:linux-3.2.1$~~ make oldconfig
Nous allons ensuite entrer dans la configuration de notre noyau. Ici les options les plus importantes pour la MAO sont indiquées. Les puristes voudront enlever tous les pilotes de périphérique dont ils n'ont pas besoin, puisque la configuration par défaut des grandes distributions incluses beaucoup de choses. Cependant, la plupart étant compilé en tant que module, cela ne gênera pas vraiment votre système, vous économiserez du temps lors de la compilation.
Passons au vif du sujet en entrez dans le menu de configuration du noyau:
~~blue:linux-3.2.1$~~ make menuconfig
présentée dans le même ordre que menuconfig, les options spécifiques MAO sont marquées d'une étoile ?.
Processor type and features
- Processor family (Generic-x86-64) --->
- Choisissez l'architecture la mieux adaptée, en cas de doute laissez generic
- Preemption Model ?
- A vrai dire, je connais pas la différence entre ces deux modèles de préemption, ça doit être nouveau ... Disons que je suis parti en Full RT, peut-être que basic RT offre une meilleure expérience au niveau du desktop ..???
- Preemptible Kernel (Basic RT)
- Fully Preemptible Kernel (RT)
- Timer frequency (1000 HZ) ?
- Staging drivers
- Les staging drivers ont parfois quelques problèmes à se compiler avec un noyau RT, je conseille de les désactiver
pilotes proprio
- si vous voulez utiliser des pilotes propriétaires pour votre carte graphique, il faut modifier votre code source de manière a pouvoir construire les modules. A noter que cela semble "casser" la licence GPL , mais est légal pour un utilisateur privé. Ces commandes semblent faire l'affaire :
~~blue:linux-3.2.1$~~sed -i 's/EXPORT_SYMBOL_GPL(migrate_enable);/EXPORT_SYMBOL(migrate_enable);/' kernel/sched.c sed -i 's/EXPORT_SYMBOL_GPL(migrate_disable);/EXPORT_SYMBOL(migrate_disable);/' kernel/sched.c sed -i 's/EXPORT_SYMBOL_GPL(~np~__rt_mutex_init);/EXPORT_SYMBOL(__rt_mutex_init);/' kernel/rtmutex.c
Compilation et installation
Lorsque vous êtes content avec votre configuration, vous pouvez passer à la compilation. l'option -j permet d'indiquer le nombre de processus. Mon petit calcul personnel, je fait nombre de CPUs * 4 pour les multi-cœurs, un double-cœurs, 3 processus devraient faire l'affaire:~~blue:linux-3.2.1$~~ make -j32
Lorsque la compilation est terminées, vous pouvez directement passer à l'installation. Cette commande va vous générer une image de démarrage et configurer GRUB pour vous:
Ubuntu 11.10:
~~blue:linux-3.2.1$~~ sudo make modules_install ~~blue:linux-3.2.1$~~ sudo make install
Et voilà votre noyau est installé et près à être démarré. C'est le moment de construire si nécessaire les pilotes proprio Vous pouvez tester votre noyau en le sélectionnant au prochain démarrage et vérifier la version utilisée cette commande :
~~blue:linux-3.2-rc6$~~ uname -ar Linux random-studio 3.2.0-rc6-rt9 #1 SMP PREEMPT RT Mon Dec 26 13:11:31 CET 2011 x86_64 x86_64 x86_64 GNU/Linux
Problèmes connues
Les personnes utilisant les pilotes graphiques NVidia peuvent rencontrer des problèmes d'affichage et avoir une basse résolution...- solution possible : voir plus haut, pilotes proprio
Conclusion
Maintenant que vous avez un noyau temps-réel, pour un peu plus d'optimisation, je conseille de faire un tour sur la gestion des IRQs : Temps-réel pour les processus IRQTodo
à ajouter dans les options de compil :
- CONFIG_USB_DYNAMIC_MINORS=n (voir ce fil)