Compiler un noyau 2.6 "Temps Réel"
(Dans l'antémémoire)
|
|
Page Suivante : Accès temps réel pour les applications Cette documentation, peut-être plus concrète que la précédente, vous guidera pas-à-pas dans la compilation d'un noyau temps réel. Table des matières1. PrésentationSi le noyau Linux offre naturellement de bonnes performances, seul un noyau patché "Temps Réel" vous permettra d'obtenir la plus petite latence possible sur votre matériel. Le mode "Temps réel" est un privilège particulier pouvant être accordé à une application, en lui offrant une priorité maximale, c'est à dire que le noyau lui donne l'accès au processeur le plus tôt possible. Il en résulte une latence réduite. L'installation d'un tel noyau, présentée ci-dessous, sera intéressante notamment dans 2 situations :
L'idéal sera donc de faire en sorte que l'image résultant de la compilation ne remplace pas celle par laquelle vous démarrez habituellement, faisant de noyau RT un noyau secondaire, et de votre noyau habituel une roue de secours en cas de compilation infructueuse. Il vous sera proposé ici d'autres options permettant également d'accroître les performances de votre système (optimisation en fonction de votre processeur, désactivation des options inutiles voire préjudiciables, etc.). Il vous faudra donc installer les sources du noyau (et non le noyau lui-même) de votre choix pour pouvoir le configurer à votre guise. Canal IRC d'aide : #linux-rt sur freenode.net Le temps réel, explication chez fedora très intéressante : http://doc.fedora-fr.org/wiki/Fedora_et_le_Temps_Réel 2. Choix du noyauLa plupart des distributions offrent un noyau qu'elles ont patché pour lui attribuer de nouvelles fonctionnalités ("fbsplash" par ex, qui vous affiche un bel écran de bienvenue au démarrage de l'ordinateur...). Cependant, s'il ne s'agit pas d'une distribution spécialisée, il est peu probable que le patch "realtime preemption" (patch RT) ait été appliqué.Par contre, certaines vous proposent d'autres versions de noyau, dont des versions déjà "patchées-RT", ou "lowlatency" : ce qui vous économisera l'étape "patchage du noyau". Pour Mandriva, vous pouvez utiliser le noyau standard qui a le mérite d'avoir un timer 1000Hz mais qui est en mode 'voluntary preemtion'. Les noyaux multimedia ont été abandonnés depuis la version 2008.1. Le kernel-desktop fonctionne très bien avec des latences jack autour de 10ms tout en incluant un grand support matériel, et il est à préférer au kernel-laptop. Mandriva inclut également un noyau avec realtime preemption activée : ce sont les paquets kernel-rt. Ces noyaux sont des noyaux vanilla avec comme seul patch appliqué le patch rt. Il peut s'avérer problématique avec certains composants matériels. Note : le métapaquet "kernel-...-latest" permet de garder à jour le dernier kernel disponible, et à chaque mise à jour l'ancien noyau reste bootable jusqu'à sa désinstallation. C'est très confortable et sûr. Néanmoins, pour une vraie et complète utilisation MAO, nous vous recommandons de prendre le kernel vanilla et de le patcher en suivant les explications de cette page (à noter que la page Mandriva présente le patch sur un noyau 2.6.17) Vous avez donc les choix suivants :
3. Installation des sourcesUtilisez le gestionnaire de paquets de votre distribution. Exemple sous Gentoo:emerge rt-sources etc. Pour les "vanilla-sources", placez-vous dans le répertoire "/usr/src" (en "root"), téléchargez les sources et décompressez-les. Exemple avec le noyau 2.6.31.12 (dernière version stable le 17/06/09; vérifier s'il existe une version plus récente) : cd /usr/src wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.31.12.tar.bz2 tar -jxf linux-2.6.31.12.tar.bz2 Vous devrez également créer, toujours dans le répertoire "/usr/src", un lien symbolique nommé "linux" et pointant vers les sources que vous venez d'installer. Exemple : ln -sf linux-2.6.31.12 linux Enfin, si vous voulez recompilez des sources déjà installées, sauvegarder le fichier de configuration (/usr/src/linux/.config) et faites un peu de ménage : cd /usr/src/linux make clean 4. "Patchage" du noyau4.1. PrincipeCette étape n'est indispensable que si vous n'utilisez pas un noyau déjà patché RT.Le "patch RT" était développé par Ingo Molnar, un des développeurs du noyau. Maintenant, c'est Thomas Gleixner qui s'en occupe (après Steven Rostedt). Il est disponible ici Il convient de choisir une version correspondant aux sources que vous venez d'installer. Évitez par exemple d'utiliser un patch prévu pour un noyau 2.6.29 sur un noyau 2.6.30 !! Ainsi, "patch-2.6.31.12-rt21" signifie patch version 21 (oui, son auteur le modifie souvent) applicable sur un noyau 2.6.31.12. 4.2. ExempleTéléchargez donc le bon patch et placez-le dans le répertoire "/usr/src".Vérifiez aussi la présence du lien symbolique "linux" pointant sur les sources que vous souhaitez patcher (voir ci-dessus). La dernière version stable est la version "2.6.31.12-rt21". Télécharger le patch : cd /usr/src wget http://www.kernel.org/pub/linux/kernel/projects/rt/patch-2.6.31.12-rt21.bz2 Tester si le patch fonctionne : cd /usr/src/linux bzcat ../patch-2.6.31.12-rt21.bz2 | patch -p1 --dry-run Si le test se passe bien, appliquer le patch pour de bon : bzcat ../patch-2.6.31.12-rt21.bz2 | patch -p1 Vous obtiendrez sans doute des alertes ("warnings") sans trop d'importance. Par contre, si le patch refuse de s'appliquer, installez les vanilla-sources, vérifiez les versions (noyau/patch) et recommencez ! Nous allons ensuite renommer le répertoire de ces sources modifiées pour bien les repérer (facultatif). Puisque dans notre exemple précédent nous avons appliqué le patch "rt21" au noyau 2.6.31.12, nous renommerons ces sources "2.6.31.12-rt21" (c'est original Ne pas oublier de modifier également le lien symbolique : cd /usr/src/ mv linux-2.6.31.12 linux-2.6.31.12-rt21 ln -sf linux-2.6.31.12-rt21 linux 5. Configuration5.1. Le principeIl est plus rapide de récupérer la configuration du noyau que vous utilisez, puis de l'affiner, c'est à dire enlever tout ce qui n'est pas indispensable en laissant tout ce qui est nécessaire !Regardez si vous disposez d'un fichier nommé ".config" soit dans le répertoire "/boot", soit dans le répertoire "/usr/src/linux-2.x.x" d'un noyau précédemment installé. Enfin, il est possible de trouver une sauvegarde de cette configuration dans /proc/config.gz. Utiliser la commande "make oldconfig" pour la récupérer : cd /usr/src/linux gunzip -c /proc/config.gz > .config make oldconfig Pour configurer le noyau en mode "graphique", utilisez la commande : cd /usr/src/linux make xconfig ou make menuconfig Selon votre matériel, il faudra adapter votre fichier de configuration, aussi il n'est pas possible de donner un modèle utilisable par tous ! La commande "lspci -v" (lspcidrake -v sur Mandriva ) vous donnera des renseignements indispensables sur votre matériel, pour pouvoir en activer le support dans le noyau. Il est conseillé de compiler "en dur" tout ce qui est nécessaire au démarrage de l'ordinateur (accès à la partition qui comporte votre système en particulier). Le reste peut facilement être placé en module. Le fichier "/etc/modprobe.conf" vous permettra de choisir les modules à charger automatiquement au démarrage de la machine. N' oubliez pas d'éditer le MakeFile afin de changer le nom du noyau qui va être créer, si vous souhaitez utiliser les mêmes sources pour compiler divers noyaux. 5.2. Exemple illustréVoici quelques conseils, en rappelant que d'une version à l'autre du noyau, et surtout en fonction des patchs appliqués ou non, l'organisation et la liste des options change ! N'oubliez pas non plus que certaines options n'apparaissent que si vous en activez d'autres ! (ex : sans support ISA activé, pas de carte-son ISA dans ALSA ...).La première partie est essentielle, elle définit le cœur de votre système. Adaptez-là à votre classe de processeur, et suivez les options recommandées :
General setup --->
Local version - append to kernel release (pour donner un nom particulier
à votre super noyau de la mort !)
[*] Support for paging of anonymous memory (swap) (active la swap)
[...]
[*] Kernel .config support (utile pour pouvoir récupérer la
[*] Enable access to .config through /proc/config.gz configuration du noyau dans /proc)
[ ] Optimize for size (à désactiver)
[ ] Configure standard kernel features (for small systems) ---> (à désactiver)
Loadable module support --->
[*] Enable loadable module support (utile pour pouvoir charger ...
[*] Module unloading ... et décharger des modules)
[ ] Forced module unloading
[*] Module versioning support
[*] Automatic kernel module loading (pour charger automatiquement les
dépendances des modules nécessaires)
Block layer --->
IO Schedulers ---> (activer les 3 ordonnanceurs)
<*> Anticipatory I/O scheduler
<*> Deadline I/O scheduler
<*> CFQ I/O scheduler
Default I/O scheduler (CFQ) (CFQ est utilisé par Demudi)
Processor type and features --->
Subarchitecture Type (PC-compatible) --->
[*] PC-compatible
Processor family --->
[*] VOTRE_TYPE_DE_PROCESSEUR (choisir votre type de processeur)
[ ] Generic x86 support (à désactiver, le choix du processeur
ci-dessus est préférable car + précis)
[*] HPET Timer Support (à activer)
[*] High Resolution Timer Support
(1000) High Resolution Timer resolution (nanoseconds)
[ ] Symmetric multi-processing support (à activer et configurer si vous avez
[ ] Maximum number of CPUs (2-255) un système multi-processeurs ...
[ ] SMT (Hyperthreading) scheduler support ... veinards !)
Preemption Model --->
[ ] No Forced Preemption (Server)
[ ] Voluntary Kernel Preemption (Desktop)
[ ] Preemptible Kernel (Low-Latency Desktop)
[*] Complete Preemption (Real-Time) (voilà l'option que nous rajoute le
"patch RT" ... INDISPENSABLE !)
--- Thread Softirqs (options à activer si vous n'utilisez
--- Thread Hardirqs pas la "Complete Preemption")
[ ] Preempt The Big Kernel Lock
[...]
High Memory Support ---> (selon votre quantité de mémoire vive)
[*] off (si vous avez moins de 1 Go)
[ ] 4GB (si vous avez entre 1 et 4 Go)
[ ] 64GB (hum ... si vous avez plus de 4 Go !)
[...]
[ ] Math emulation (inutile sur les processeurs actuels)
[*] MTRR (Memory Type Range Register) support (accélère les bus PCI et AGP)
[...]
Timer frequency ---> (à ce sujet, voir la discussion sur
[ ] 100 HZ le site d'[http://ardour.org/node/117|Ardour]
[ ] 250 HZ 1000Hz semble préférable)
[*] 1000 HZ
[...]
Ensuite, vous intègrerez le support des composants de votre carte mère, souvent sous forme de module. La commande "lspci" vous aidera à en établir la liste. Si vous avez un doute sur une option, compilez-la en module. Notez en particulier les choix conseillés et déconseillés pour le support IDE (pour limiter les goulots d'étranglement), et adaptez la partie son à votre matériel. Selon vos besoins, vous placerez aussi en module le support Firewire (disque dur externe ou autre), Carte réseau (choisir votre modèle), USB (selon ce que vous utilisez, clé usb, souris, etc.) et "en dur" les éventuels supports SATA dont vous avez besoin. Selon votre type de carte son, il faudra activer le bus correspondant (PCI, ISA, USB) pour la voir apparaître dans la liste d'ALSA (section "Sound").
Bus options (PCI, PCMCIA, EISA, MCA, ISA) ---> (support PCI)
PCI support --->
PCI access mode --->
[ ] BIOS
[ ] MMConfig
[ ] Direct
[*] Any (fonctionne pour la plupart des cas)
[ ] PCI Express support (à activer si votre carte mère en a !)
[ ] ISA support (requis pour certaine cartes sons)
[...]
Networking ---> (pour configurer notamment le "Network
packet filtering" (pare-feu et cie)
consulter les sites spécialisés !)
[...]
Device Drivers ---> (pour installer la prise en charge
de vos périphériques. A adaptez à votre
matériel. Seuls les points spécifiques
MAO sont détaillés ci-dessous)
[...]
Block devices --->
<*> RAM disk support
(16) Default number of RAM disks
(4096) Default RAM disk size (kbytes)
[*] Initial RAM disk (initrd) support
[...]
ATA/ATAPI/MFM/RLL support (cochez en particulier :)
<*> ATA/ATAPI/MFM/RLL support
<*> Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support
<*> Include IDE/ATA-2 DISK support (support IDE)
[*] Use multi-mode by default
[*] Include IDE/ATAPI CDROM support
[...]
[ ] IDE Taskfile Access (ces 2 options sont à désactiver
< > generic/default IDE chipset support pour des raisons de performances)
[...]
PCI IDE chipset support --->
[ ] Generic PCI IDE Chipset Support (désactiver, préférer le support
spécifique ci-dessous)
[*] Generic PCI bus-master DMA support ---> (support DMA, à activer !)
[*] Use PCI DMA by default when available (à activer)
<*> Cocher_le_support_de_VOTRE_chipset (commande lspci pour vérifier votre puce.
À mettre "en dur" et non pas en module)
[...]
SCSI device support --->
<*> SCSI device support (choisir les périphériques SCSI que vous
SCSI low-level drivers ---> avez. À compiler "en dur" si votre
[*] LE(S)_DRIVER(S)_SATA_DONT_VOUS_AVEZ_BESOIN système est placé dessus)
[...]
Multi-device support (RAID and LVM) ---> (À configurer si vous souhaitez utiliser
plusieurs disques durs en mode RAID.
Compilez en dur et non pas en module
si votre système est placé sur le RAID)
[...]
IEEE 1394 (FireWire) support ---> (à activer si besoin, en module)
[...]
Network device support ---> (activer vos cartes réseaux, en module)
[...]
Character devices --->
<M> Enhanced Real Time Clock Support (utilisé par certaines applications comme ((MusE)))
<M> Generic /dev/rtc emulation
[*] Extended RTC operation
[...]
[* ou M] /dev/agpgart (AGP Support) ---> (activer l'AGP de VOTRE puce, paraît-il
[* ou M] AGP_DE_VOTRE_CHIPSET recommandé même avec les cartes PCIe)
[* ou M ou non] Direct Rendering Manager ---> (activer le support DRI pour VOTRE
carte graphique. Les possesseurs de
cartes graphiques NVidia ou ATI DOIVENT
désactiver cette option si ils veulent
utiliser la 3D avec les pilotes
propriétaires, et choisir M ou * pour les
pilotes libres)
[...]
[*] HPET - High Precision Event Timer ---> (si quelqu'un peut (in/con)firmer
[*] HPET Control RTC IRQ l' (in)utilité de ces options ...)
[*] Allow mmap of HPET
[...]
I2C support ---> (à adapter à votre matériel, en module.
<M> I2C support Utile notamment pour les modules des
<M> I2C device interface capteurs de la carte-mère - température,
I2C Hardware Bus support ---> ventillateurs, etc.)
<M> VOTRE_CHIPSET
[...]
Hardware Monitoring support ---> (Utile pour éviter la surchauffe du processeur.
<*> Hardware Monitoring support Voir aussi I2C support ci-dessus)
<M> VOS_CAPTEURS_CARTE-MERE
[...]
Graphics support ---> (drivers cartes graphiques à adapter à
[* ou M ou non]VOTRE_CARTE_GRAPHIQUE votre matériel. Il s'agit ici des pilotes
libres, les possesseurs de C.G. NVIDIA et
ATI récentes préfèreront sans doute
installer les drivers non-libres pour en
tirer le meilleur. Et dans ce cas il est
préférable d'avoir le support ici sous
forme de modules pour avoir le choix
plus tard, ou même aucun si on est sûr
de soi)
Sound ---> (La partie intéressante)
<*> Sound card support (INDISPENSBLE)
<*> Advanced Linux Sound Architecture ---> (INDISPENSBLE)
<*> Sequencer support
<M> Sequencer dummy client
<M> OSS Mixer API (compatibilité avec le système obsolète OSS)
<M> OSS PCM (digital audio) API (idem)
[*] OSS Sequencer API (idem)
<M> RTC Timer support
[*] Use RTC as default sequencer timer
[*] Support old ALSA API
Generic devices --->
<M> Virtual MIDI soundcard (utile si vous n'avez pas de carte midi)
< > MOTU MidiTimePiece AV multiport MIDI (à mettre en module si vous avez besoin
< > UART16550 serial MIDI driver de ces périphériques. Ex : ports MIDI
< > Generic MPU-401 UART driver compatibles avec interfaces RolandMPU-401)
ISA devices ---> (mettre en module le driver pour VOTRE
PCI devices ---> carte son ISA, PCI ou USB et activer le
USB devices ---> support du port correspondant ISA/PCI/USB)
< > Open Sound System (DEPRECATED) (puisqu'on nous dit qu'OSS est obsolète...)
USB support ---> (à adapter à votre matériel, en module.)
La dernière partie vous permettra de choisir les supports pour les systèmes de fichiers que vous utilisez, ainsi que leurs options. Les "Magic SysRq key" "Realtime Capabilities" doit IMPERATIVEMENT être compilé sous forme de module pour installer "realtime-lsm" (voir Accès temps réel pour les applications).
File systems ---> (activer ceux que vous utilisez, Ext2,
Ext3, Reiserfs et XFS. A compiler "en dur"
au moins pour la partition racine)
[*] CD-ROM/DVD Filesystems ---> (à activer selon vos besoins)
[*] DOS/FAT/NT Filesystems ---> (à activer selon vos besoins)
[*] Pseudo filesystems --->
[*] Virtual memory file system support (former shm fs) (utile pour ((JACK)) - support tmpfs)
[*] Miscellaneous filesystems --->
<*> Compressed ROM file system support
Native Language Support ---> (choisir ISO 8859-15 ou UTF8 par défaut)
[*] Codepage 850 (Europe)
[*] NLS ISO 8859-1 (Latin 1; Western European Languages)
[*] NLS ISO 8859-15 (Latin 9; Western European Languages with Euro)
[*] NLS UTF8
[...]
Kernel hacking --->
[*] Magic SysRq key (utile pour les "reboot" d'urgence)
[...]
Security options --->
[*] Enable different security models
<M> Default Linux Capabilities (indispensable pour le module "Realtime-lsm")
<M> Realtime Capabilities (installe le module "Realtime-lsm").
Cryptographic options ---> (utile pour vérifier les sommes de
<*> MD5 digest algorithm contrôle de tout ce que vous téléchargez,
<*> SHA1 digest algorithm images ISO, etc.)
<*> SHA256 digest algorithm
5.3.
Voici une documentation très complete et très bien expliquée sur la configuration des différents modules du noyau. |
Mégaphone
|