Aller au contenu

[Tuto][Initié] Noyau linux


tuXXX

Messages recommandés

Il est souvent question de recompiler le noyau sous linux, de manière à en avoir un qui corresponde le plus près possible au système, que ce soit pour les périphériques que pour le processeur et la mémoire.

Je vais donc essayer de rendre cette opération la plus simple possible, tout en essayant de ne pas être redondant avec les autres topic dédiés concernant une distribution précise.

Mon but ici est notamment de donner des explications par rapport aux différentes options des noyaux, et je supposerait que tous les outils nécessaires pour compiler sont là (make, gcc, ncurses, etc...).

Je supposerait également que le noyau choisi est un 2.6, les noyaux 2.4 n'étant plus à jour (même si malheureusement certains drivers ne sont compatibles uniquement pour ces versions)

:-DSommaire

  • :roll: Pourquoi un noyau?
    :mdr: Installation du noyau
    :non: Installation d'un patch
    :non: Configuration du noyau
    :yes: Un module? Mais queskecé? (update : 22/08/2004)
    :yes: Part I : General setup
    :yes: Part II : Processor & System
    :yes: Part III : File format, system et devices
    :arrow: Part IV : Kernel Hacking & Others
    :arrow: Sauvegarde
    :arrow: Compilation
    :arrow: Installation
    :arrow: Trucs et astuces
    :arrow: A quoi sert l'initrd? (new : 19/08/2004)

Quelques liens du forum :

:arrow:Pourquoi un noyau?

Tout d'abord, à quoi il sert?

Le noyau permet la gestion de la mémoire et des processus, ainsi que la communication entre le système et les périphériques.

Il peut y avoir plusieurs raisons pour vouloir changer de noyau, mais la plus courante est pour mettre à jour les drivers.

Lien vers le commentaire
Partager sur d’autres sites

  • Réponses 298
  • Créé
  • Dernière réponse

:-DInstallation du noyau

Je vais ici expliquer comment installer les sources d'un noyau correctement, ainsi que le patcher.

Si vous utilisez les "kernel-source" de votre distribution, vous pouvez passer cette partie :non:

Tout d'abord, télécharger le noyau sur http://www.kernel.org, il vaut mieux en général prendre celui qu'ils appellent "latest stable version".

Une fois que ceci est fait, il faut décompresser ce fichier (qui est au format .tar.bz2) dans le répertoire /usr/src

 $ cd /usr/src
$ tar -xvjf linux-2.6.X.tar.bz2

Maintenant que le noyau est décompressé, il va falloir faire un lien symbolique vers lui à /usr/src/linux:

 $ ln -s linux-2.6.X linux

(si "linux" existe déjà, le supprimer avec "rm linux")

Et vous pouvez vérifier :

 $ ls -l /usr/src/linux
/usr/src/linux -> /usr/src/linux-2.6.X

maintenant, il suffit d'aller dans ce répertoire pour être prêt pour les étapes suivante :non:

:roll:Installation d'un patch

Il existe des patches de noyau, qui modifient certains fichiers afin d'optimiser certaines partie du code.

Par exemple, le patch "mm" d'Andrew Morton, disponible sur kernel.org, incluant par exemple il y a peu un patch pour les P4 "HT" (entre beaucoup d'autres !!! Il suffit de regarder le "Changelog" pour voir la quantité de modifications)

Une fois le patch téléchargé et décompressé ("bunzip2 2.6.X-mmY.bz2" par exemple), il faut patcher le noyau avec la commande suivante :

 $ patch -p1 < 2.6.X-mmY

Voilà ! le noyau est patché et prêt à être compilé !

:mdr:Configuration du noyau

Il y a plusieurs manières de configurer un noyau, mais la plus intéressante est le "make menuconfig", c'est donc cela que bous allons faire :yes:

Mais avant, il faut s'assurer que plus rien ne reste des configurations précédentes, de même que les modules qui pourraient rester...

 $ make clean
$ make mrproper

C'est bon, vous pouvez maintenant faire le fameux "make menuconfig" (c'est ici qu'il faut avoir toutes les librairies, notamment ncurses.), il existe aussi "make config", que je déconseille fortement (de toute façon, vous abandonneriez avant la 100eme question :yes: ) et "make xconfig", qui est plus abordable, mais mois pratique à mon goût.

 $ make menuconfig

Vous vous retrouvez donc devant une jolie interface (c'est pas mal, quand même...)

Donc on se déplace avec les flêches directionnelles, on choisit <Select> <Exit> ou <Help> et on utiliser la touche "Entrée".

Pour mettre une fonction en module, il faut appuyer sur la touche "M" (comme module, tient :yes: )

Pour intégrer une fonction au noyau, il faut appuyer sur "Y"

Et pour enlever totalement cette fonctionnalité, appyer sur "N"

Il est aussi possible d'appuyer sur "?" pour avoir l'aide au lieu de sélectionner <Help>

Garder l'ancienne configuration

Il est aussi possible de garder l'ancienne configuration.

Pour cela, il faut d'abord vérifier que cette configuration est dans le noyau :

 $ ls /proc/config.gz

Si le fichier existe, c'est bon !

Après le traditionnel "make clean && make mrproper", il suffit maintenant de décompresser ce fichier pour obtenir le fichier .config :

 $ gunzip -c /proc/config.gz > .config

Puis de mettre à jour :

make oldconfig

Lien vers le commentaire
Partager sur d’autres sites

:-DUn module? Mais queskecé?

Un module permet de rendre le systèle linux plus modulaire, et peut être chargé (quasiment) à n'importe quel moment.

Il s'agit d'un fichier binaire qui communique avec le noyau.

Cela permet d'alléger la taille du noyau, mais aussi de pouvoir ajouter plus tard des modules (par exemple pour des drivers vidéo)

Les modules sont uniques à un noyau, et sont d'ailleur stockés dans /lib/modules/<numéro du noyau>

C'est donc le cas pour les drivers vidéos, et les drivers propriétaires qu'il faudra recompiler à chaque fois.

Lien vers le commentaire
Partager sur d’autres sites

:-DPart I : General setup

:roll: Code maturity level options

1: [*] Prompt for development and/or incomplete code/drivers

2: [*] Select only drivers expected to compile cleanly

3: [*] Select only drivers that don't need compile-time external firmwware

Ici, il faut tout laisser :

Cela permet d'avoir accès aux drivers en développement (1), ne montrer que ceux qui compilent bien(2), et cacher ceux qui nécessitent un firmware spécifique(3) (ouais, enfin vous savez lire l'anglais :yes: )

:mdr: General setup

1: [*] Support for paging of anonymous memory (swap)

2: [*] System V IPC

3: [*] POSIX Message Queues

4: [ ] BSD Process Accounting

5: [*] Sysctl support

6: [*] Auditing support

7: [*] Enable system-call auditing support

8: [*] Support for hot-pluggable devices

9: [*] Kernel .config support

10:[*] Enable access to .config through /proc/config.gz

11:[ ] Configure standard kernel features (for small systems) --->

1) Support pour la SWAP :non:

5) Pour activer certains contrôles du noyau "on the fly" (file:Documentation/sysctl/)

9 et 10) permet d'avoir le .config du noyau dans /proc... très très utile !

11) On va pas toucher à ça, on veut pas faire un noyau pour système embarqué...

:non: Loadable module support

1: [*] Enable loadable module support

2: [*] Module unloading

3: [ ] Forced module unloading

4: [*] Module versioning support

5: [*] Automatic kernel module loading

1) Active le support des modules :yes:

2) pouvoir enlever des modules (rmmod)

3) forcer à décharger les modules avec rmmod -f ...pas recommandé

4) ça peut être utile... donc tant qu'à faire...

5) utile pour charger automatiquement les dépendances des modules, obligatoire pour hotplug entre autres

Lien vers le commentaire
Partager sur d’autres sites

:-DPart II : Processor & System

:roll: Processor type and features

1: Subarchitecture Type (PC-compatible) --->

2: Processor family (Athlon/Duron/K7) --->

3: [ ] Generic x86 support

4: [*] HPET Timer Support

5: [*] Symmetric multi-processing support

6: (2) Maximum number of CPUs (2-255)

7: [ ] SMT (Hyperthreading) scheduler support

8: [*] Preemptible Kernel

9: [*] Machine Check Exception

10:<*> Check for non-fatal errors on AMD Athlon/Duron / Intel Pentium 4

11:[ ] check for P4 thermal throttling interrupt.

12:< > Toshiba Laptop support

13:< > Dell laptop support

14:< > /dev/cpu/microcode - Intel IA32 CPU microcode support

15:< > /dev/cpu/*/msr - Model-specific register support

16:< > /dev/cpu/*/cpuid - CPU information support

17: Firmware Drivers --->

18: High Memory Support (off) --->

19:[ ] Math emulation

20:[*] MTRR (Memory Type Range Register) support

21:[ ] Boot from EFI support

22:[*] Enable kernel irq balancing

23:[ ] Use register arguments

24: Performance-monitoring counters support --->

2) Changer en fonction du processeur

3) Seulement pour que les distribs soient largement compatibles

4) Pour activer le timer inclu dans le noyau...

5) Activer le support de plusieurs processeurs

6) Nombre précis de processeurs (chacun en plus du premier ajoute 8Ko au noyau inutilement)

:yes: A activer ([http://kerneltrap.org/node/view/3043] ICI pour un petit topo :non: )

18) Activer si plus de 1Go de ram, sinon off pour performances

20) Accélère les bus PCI et AGP, obligatoire pour les cartes ATI !

23) Peut permettre éventuellement des meilleures performances, auparavant invompatible avec les drivers vidéos ATI et nVIDIA, les drivers nVIDIA (>6106) supportent maintenant cette fonction, mais je ne sais pas pour les ATI

:mdr: Power management options (ACPI, APM)

1: [*] Power Management support

2: [ ] Software Suspend

3: [ ] Suspend-to-Disk Support

4: ACPI (Advanced Configuration and Power Interface) Support --->

4- 1: [*] ACPI Support

4- 2: [*] Sleep States

4- 3: <*> AC Adapter

4- 4: <*> Battery

4- 5: <*> Button

4- 6: <*> Fan

4- 7: <*> Processor

4- 8: <*> Thermal Zone

4- 9: < > ASUS/Medion Laptop Extras

4-10: < > Toshiba Laptop Extras

4-11: [ ] Debug Statements

4-12: [ ] Power Management Timer Support

5: APM (Advanced Power Management) BIOS Support --->

6: CPU Frequency scaling --->

1) Active la gestion de l'énergie ... Indispensable

2) et 3) permet d'activer une sorte de "veille prolongée", activez si vous pensez l'utiliser.

4) support de l'ACPI

5) support de l'APM, seulement si l'ACPI ne marche pas/fait planter l'ordinateur

6) seulement pour les portables

:non: Bus options (PCI, PCMCIA, EISA, MCA, ISA)

1: [*] PCI support

2: PCI access mode (Any) --->

3: [ ] Vector-based interrupt indexing (MSI)

4: [ ] Legacy /proc/pci interface

5: [*] PCI device name database

6: [ ] ISA support

7: [ ] MCA support

8: < > NatSemi SCx200 support

9: PCMCIA/CardBus support --->

10: PCI Hotplug Support --->

1) Permet d'activer le support pour les ports PCI (utile, non?)

2) Choix du mode "Any" devrait convenir pour 99.99% des cas :yes:

3) Moyennement utile

4) Anciennement utilisé pour voir les périphériques PCI, délaissé au profit de "lspci"

6) Pour les ports ISA => désactivé :yes:

9) Si portable avec PCMCIA

10) Support du "PCI hotplug" de certaine CM, à ne pas confondre avec le système "Hotplug" qui permet de détecter les périphériques et de charger les modules correspondant. A désactiver.

Lien vers le commentaire
Partager sur d’autres sites

:-DPart III : File format, system et devices

:roll: Executable file formats

1: [*] Kernel support for ELF binaries

2: <*> Kernel support for a.out and ECOFF binaries

3: <*> Kernel support for MISC binaries

Tout laisser pour un maximum de compatibilité

:mdr: Device Drivers

Bon là je ne détaillerais pas tout... à vous de chercher et d'agir en fonction du matériel.

Si vous avez un doute, mettez en module, ça ne peut pas faire de mal :non:

1: Generic Driver Options --->

2: Memory Technology Devices (MTD) --->

3: Parallel port support --->

4: Plug and Play support --->

5: Block devices --->

6: ATA/ATAPI/MFM/RLL support --->

7: SCSI device support --->

8: Multi-device support (RAID and LVM) --->

9: Fusion MPT device support --->

10:IEEE 1394 (FireWire) support --->

11:I2O device support --->

12:Networking support --->

13:ISDN subsystem --->

14:Telephony Support --->

15:Input device support --->

16:Character devices --->

17:I2C support --->

18:Misc devices --->

19:Multimedia devices --->

20:Graphics support --->

21:Sound --->

22:USB support --->

3) Port parallèle :yes: ça peut être utile, mais à vous de voir...

5) Activer "Loopback device support !!! (pour pouvoir monter les images CD .iso directement)

6) Activez en fonction de votre matériel...

:yes: Pour faire du raid software

12) Activez le driver correspondant à votre carte réseau. (le driver pour les cartes mères nVIDIA se trouve là : "Ethernet (10 or 100Mbit)">"Reverse Engineered nForce Ethernet support", appelé "forcedeth", activer les RealTek 8139 est généralement une bonne idée, au moins en module !

16) Pour modifier l'"agpgart" ... Possibilité de le désactiver pour laisser le driver de la carte 3D le faire tout seul... Le mettre dans un premier temps, histoire d'avoir un noyau qui marche :yes:

17) à activer pour les cartes TV (notamment bt848) : "I2C Support"+"Bit Banging interfaces". Aussi utile pour les senseurs de la carte mère (température) pour lm_sensors. (mettre tous les Hardware Sensors en module :yes: )

19) Activer pour avoir le support des cartes TV (en général 848 ou 878, regardez le "lspci") (il vaut mieux mettre en module pour pouvoir passer des paramètres)

20) Activer le framebuffer peut produire des effets négatif sur la stabilité ensuite, en plus c'est à peut près inutile en général.

21) Activer alsa absolument ! Ne pas oublier "OSS [*] API" . Et configurer pour la carte son (dans PCI devices)

22) Activer surtout ehci et ohci, uhci éventuellement (si carte Intel ou Via) (enfin au moins tout en modules). Activer aussi "USB Mass Storage support" pour avoir le support des clé USB (mettre en dur pour ne pas à avoir à charger le module!) ainsi que "USB Human Interface Device (full HID) support" pour les souris/claviers USB

:non: File systems

Mettre le maximum de systèmes de fichiers en dur afin de pouvoir booter n'importe où...

(Ext2, Ext3, Reiserfs, JFS, XFS), ainsi que le NTFS éventuellement (pas en écriture! voire aide).

Activer aussi "SMB file system support" dans "Network File Systems"

Activer également "NLS ISO 8859-15 (Latin 9; Western European Languages with Euro)" sous "Native Language Support" afin de pouvoir accéder tranquillement aux données des disques ntfs et fat de windows.

Lien vers le commentaire
Partager sur d’autres sites

:-DPart IV : Kernel Hacking & Others

:roll: Profiling support

Moyennement utile, "If unsure say N" :yes:

:mdr: Kernel hacking

1: [*] Kernel debugging

1-1: [ ] Check for stack overflows

1-2: [ ] Stack utilization instrumentation

1-3: [ ] Debug memory allocations

1-4: [*] Magic SysRq key

1-5: [ ] Spinlock debugging

1-6: [ ] Page alloc debugging

1-7: [ ] Compile the kernel with debug info

2: [ ] Kernel lock metering

3: [*] Sleep-inside-spinlock checking

4: [ ] Compile the kernel with frame pointers

5: [*] Use 4Kb for kernel stacks instead of 8Kb

1-4) Permet d'activer les combinaisons de touches "Alt"+"Sys"+[lettre] ... afin de ne pas faire de reset trop violent.

5) Permet d'utiliser des piles de 4K au lieu de 8 afin de faire tourner plus de threads et de réduire la "pression" de l'interface graphique sur le système. Vous pouvez activer sans problème si vous avez une carte nVIDIA (et les drivers >6106), je ne sais pas pour ATI mais il semble que ce soit bon (à tester quand même sans avant;) )

:non: Security options

Pour rendre encore plus sécurisé linux... A priori c'est inutile sauf si vous savez ce que vous faîtes...

:non: Cryptographic options

Pour crypter un système de fichiers... à vous de voir mais à piori c'est moyennement utile...

:yes: Library routines

Activer CRC32c pour permettre le chargement de certains modules...

Lien vers le commentaire
Partager sur d’autres sites

:-DSauvegarde

Une fois que tout est bien configuré, je vous conseille de faire "Save Configuration to an Alternate File" Car il ne sauvegarde pas toujours très bien (et puis, pour pouvoir recharger après un "make clean mrproper")

Personnellement, je sauvegarde avec le noyau en 0.config (puis 1.config pour le suivant, etc...)

Il va sans dire qu'il est préférable de reconfigurer à chaque fois le noyau... Même si copier le fichier de config marche dans 99% des cas... Il peut y avoir des nouvelles options, ainsi que disparition d'anciennes.

(Je vous conseille aussi d'utiliser les touches numériques au-dessus des lettres, et non le pavé numérique, je me suis déjà fait avoir : ça a quitté le make menuconfig quand je tapais des chiffres et tout ça sans sauvegarder, bien sûr :non: )

Ensuite, il suffit de quitter en disant de sauvegarder la configuration.

:roll:Compilation

Comme il est écrit dans le README... la méthode pour compiler le noyau est la suivante :

 $ make
$ make modules_install
($ mount /boot)
$ cp ../linux/arch/i386/boot/bzImage /boot/kernel-2.6.X

/!\Je vous conseille de ne jamais écraser l'ancien noyau... Copiez donc avec un nouveau nom dans le répertoire /boot, ceci afin de pouvoir toujours booter sur l'ancien noyau/!\

Puis configurer :

*lilo: modifier /etc/lilo.conf et lancer "lilo"

*grub: modifier /boot/grub/grub.conf ou /boot/grub/menu.lst

/!\De même, créez une nouvelle entrée dans le bootloader, afin de pouvoir choisir entre l'ancien et le nouveau... Comme cela, si le noyau ne boote pas, il reste toujours l'ancien!/!\

Rebooter, et c'est bon !!!

:mdr:Trucs et astuces

  • Modifier le nom du noyau:
    Il est parfois utile de modifier le nom du noyau (par exemple pour fair plusieurs version...Il vaut mieux séparer les modules, et donc avoir des noms différents)
    Il faut pour cela modifier le Makefile et changer le paramètre EXTRAVERSION. Cette chaîne de caractère sera ajoutée au numéro du noyau, que ce soit pour le "uname" ou pour le répertoire où sont stockés les modules.
    Cela est à faire avant la compilation.
  • Utiliser les "Magic SysKeys":
    Quand tout à l'ai planté, au lieu de rebooter sauvagement le PC, il est possible d'utiliser les "Magic SysKeys". Cela consiste à appuyer simultanément sur "Alt", "Sys" (Impr.écran) et une touche du clavier.
    Alt+Sys+S : resynchronise les systèmes de fichiers montés afin de vider notamment les caches
    Alt+Sys+U : remonte les systèmes de fichiers en écriture seulement
    Alt+Sys+B : reboote l'ordinateur
    Il faut faire ces 3 commandes l'une après l'autre, dans un interval d'au moins 1 seconde (le temps que ça agisse)...
    Si l'ordinateur redémarre après avoir appuyé sur "B", il n'y aura pas de problèmes sur les systèmes de fichiers...Sinon il faudra faire un restet brutal.
  • Quelques optimisations
    ->Mettre de préférence le périphérique PCI correspondant à votre carte son (alsa) en "dur", cela permet au noyau de détecter automatiquement et de ne pas avoir à charger tous les modules...
    ->Pour ceux qui ont des cartes graphiques nvidia, désactivez totalement le support de l'agp, cela afin d'activer celui des drivers nvidia qui est plus efficace...

Lien vers le commentaire
Partager sur d’autres sites

:-DA quoi sert l'initrd?

L'initrd est une une sorte d'image disque qui contient principalement un exécutable ("linuxrc") et qui permet de faire certaines choses entre le chargement du noyau et l'init du système...

Par exemple :

->détecter les périphériques de boot et charger les modules correspondants (contrôleurs SATA/SCSI/USB/...)

->détecter le type de la partiton et cherger les modules correspondants (reiserfs, xfs, jfs...)

->booter en réseau avec un menu

->permettre d'avoir une ligne de commande simplifiée en cas de problème, etc...

Cependant, en général, tout ce que le noyau a besoin pour booter (contrôleur et système de fichiers) est mis "en dur" dans le noyau, et cet initrd est alors tout simplement inutile...

Si c'est votre cas, vous pouvez tout simplement vous en passer.

Lien vers le commentaire
Partager sur d’autres sites

je suis en train de l'incorporer dans le guide linux des inpactiens, mais c'est long a mettre en page... Je me suis permis aussi tuxxx de faire des screenshots avec gimp sur mon serveur pour les images des menu du noyau.... Je te les mailerais si tu veux...ou tu les repiqueras dans le guide..

Lien vers le commentaire
Partager sur d’autres sites

je suis en train de l'incorporer dans le guide linux des inpactiens, mais c'est long a mettre en page...

Tu m'étonne :incline:

Je me suis permis aussi tuxxx de faire des screenshots avec gimp sur mon serveur pour les images des menu du noyau.... Je te les mailerais si tu veux...ou tu les repiqueras dans le guide...

OK

Lien vers le commentaire
Partager sur d’autres sites

j'en integrerais d'autres par la suite, car je me suis rendu compte que ca ne serait pas tres pratique avec ta numerotation des lignes, pour y faire reference apres, donc, l'idee est de mettre le screenshot, suivi de ta version txt qui comporte la numerotation, qu'en penses tu ?

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.


×
×
  • Créer...