Tous les articles par karles

Kernel 2.6.x

Compiler son propre noyau linux afin de l’adapter à sa machine est une étape dans l’utilisation intensive de gnu / Linux. Voici ma propre procédure basée sur la méthode debian et réalisée après lecture de nombreuse documentation.

Avec une Debian Woody

Si vous avez une debian woody et uniquement dans ce cas. En premier, ajoutez la ligne suivante à la fin du fichier /etc/fstab pour que le système de fichiers virtuel du noyau 2.6 sysfs soit monté au démarrage :
sysfs /sys sysfs defaults 0 0

Vous devez également créer le répertoire dans lequel il sera monté :
mkdir /sys

A la suite, il faut mettre à jour le package concernant le client DHCP :
apt-get install --purge dhcp3-client

Puis ajoutez la ligne suivante à la fin du fichier /etc/apt/sources.list :
deb http://www.backports.org/debian/ stable

Enfin installez les deux packages requis pour les modules
apt-get update
apt-get install module-init-tools modutils

Préparation

Pour pouvoir compiler depuis son compte et éviter de jouer avec root par la suite. Sous root saisir la commande suivant pour ajouter votre identifiant au groupe src qui possede les droits nécéssaire à la manipulation des sources :
adduser votrelogin src .
Maintenant le reste des opérations s’effectue avec un compte utilisateur.

Pour connaitre le modele exacte de son procésseur (cpu) :
cat /proc/cpuinfo .

Voici le résultat pour mon portable Dell C600 :

model name : Pentium III (Coppermine)
flags : fpu vme de pse tsc msr pae mce cx8 sep mtrr pge mca cmov pat pse36 mmx fxsr sse

Mettre à jour la base d’ID PCI permétant la reconnaisance du matériel :
update-pciids

Optenir la liste du matériel présent sur votre ordinateur :
lspci liste du matos

Voici le résultat sur mon portable :

0000:00:00.0 Host bridge: Intel Corp. 440BX/ZX/DX - 82443BX/ZX/DX Host bridge (rev 03)
0000:00:01.0 PCI bridge: Intel Corp. 440BX/ZX/DX - 82443BX/ZX/DX AGP bridge (rev 03)
0000:00:03.0 CardBus bridge: Texas Instruments PCI1420
0000:00:03.1 CardBus bridge: Texas Instruments PCI1420
0000:00:07.0 Bridge: Intel Corp. 82371AB/EB/MB PIIX4 ISA (rev 02)
0000:00:07.1 IDE interface: Intel Corp. 82371AB/EB/MB PIIX4 IDE (rev 01)
0000:00:07.2 USB Controller: Intel Corp. 82371AB/EB/MB PIIX4 USB (rev 01)
0000:00:07.3 Bridge: Intel Corp. 82371AB/EB/MB PIIX4 ACPI (rev 03)
0000:00:08.0 Multimedia audio controller: ESS Technology ES1983S Maestro-3i PCI Audio Accelerator (rev 10)
0000:00:10.0 Ethernet controller: 3Com Corporation 3c556 Hurricane CardBus [Cyclone] (rev 10)
0000:00:10.1 Communication controller: 3Com Corporation Mini PCI 56k Winmodem (rev 10)
0000:01:00.0 VGA compatible controller: ATI Technologies Inc Rage Mobility M3 AGP 2x (rev 02)

Donc on résume :

  • le controleur à tout faire : Intel Corp. 440BX/ZX/DX
  • la carte son : audio controller : ESS Technology…Maestro-3i
  • La carte réseau : 3Com Corporation 3c556
  • La carte graphique : ATI Technologies Inc Rage Mobility M3 AGP
  • Le modem : 3Com Corporation Mini PCI 56k Winmodem

Attention pour le modem aucun espoire de le faire fonctionner pour le moment.

Ajouter à cela ma carte wifi Netgear MA401.

Installer les outils pour la décompression et la configuration du noyau :
apt-get install bzip2 libncurses5-dev

Ne pas oublier d’installer les sources du noyau. J’ai fais le choix de prendre le package debian, c’est plus facile que d’aller chercher les source sur kernel.org. En outre les sources debian sont pré-patché pour appliquer la methode de compilation et d’enpaquetage debian.
apt-get install kernel-source-2.6.4

La méthode debian à pour particularité la création d’un paquet .deb compremant le noyau et les modules associés. Ceci permet une installation plus facile. Cela me permet egalement de compiler sur mon portable puissant des noyaux pour d’autre machine moins puissante, comme un vieux 486 servant de routeur. Imaginer si vous aviez une ferme de plusieur dizaines de serveur s tous identique. Avec une compilation de noyau et un paquage vous pourrier tous les mettre à jours rapidement.
apt-get install build-essential kernel-package fakeroot

Je me déplace dans le répertoir des sources.
cd /usr/src/

L’installation du paquet des sources du noyaux à pour concéquence la présence d’une archive tar.bz2 que je décompresse :
tar xvjf linux-version.tar.bz2

Je crée un lien nommé linux vers le répertoire des sources :
ln -sfn linux-version linux

Je me déplace dans le répertoir des sources du noyaux.
cd linux

Configuration

Comme je migrais d’un noyau 2.4 vers un 2.6 je souhaitais retrouver les options de configuration adaptées à mon matériel si durement recherchées. En concéquence j’ai choisis de reprendre le fichier .config de configuration des options de mon noyau 2.4 et d’appliquer la procédure de migration afin d’optenir un .config valide et au format 2.6 :
cd /usr/src/kernel-sources-2.4.21/
cp .config /usr/src/linux
cd /usr/src/linux
make oldconfig

Bon pour chaque nouvelle option pour le noyaux 2.6 dont la réponse n’est pas dans votre .config du noyau 2.4 vous avez droit à une question. A vous d’y répondre au mieux. Dans mon cas n’étant pas vraimment confiant dans les réponses données j’ai fais le choix de mettre de coter le fichier .config optenue pour le consulter plus tard.
mv .config config-migration.2.6.

Je suis donc repartir d’un fichier de configuration du noyaux 2.6 déjà partiellement complété disponible sur le site de la formation debian de Alexis de Lattre [1]. Pour récuperer ce fichier j’installe l’utilitaire wget :
apt-get install wget

Puis je télécharge le ficher en question :
wget http://people.via.ecp.fr/~alexis/formation-linux/config/config-2.6.x

A partir de la j’ai repris le fichier .config optenue avec la precedure de migration de mon fichier de configuration pour noyau 2.4.
cp config-migration.2.6. .config

J’ai regarder option par option, ligne par ligne ce qui avait été configurer dedant grâce à mon fichier de configuration pour noyau 2.4. et j’ai tout noter sur un papier. Note pour plus tard, toujours avoir un bloc note et un feutre. L’age du zéro papier n’est pas encore arrivé.
make menuconfig

NOTE : pour le passage d’un serveur installer en Sarge vers un noyau 2.4.27 j’ai du installer le paquet libncurses5-dev que aucune dépendance n’appelait pour pouvoir utiliser make menuconfig. Je sais c’est logique mais peut être pas pour tout le monde d’ailleur je veins de le re-découvrir.

Après avoir tout noter, j’ai supprimer le fichier .config de migration et repris le fichier .config de Alexis de Lattre en finissant de le préparer à la lumière des informations optenues par la procédure de migration et avec la liste des composants de mon portable.
rm .config
cp config-2.6.X .config
make menuconfig

Voici l’arborecence des options de configuration du noyau version 2.6.5. Attention j’ai reporté ici que les options complémentaires au travail de Alexis de Lattre et qui correspondent spécifiquement à mon portable Dell C600, à mes cartes pcmcia (MA401) ou à mes choix techniques (frame buffer, wifi, nfs, acpi et samba).

  • Processor type and features —>
    • Processor family (Pentium-III/Celeron(Coppermine)/Pentium-III Xeon) —>
      • <*>Pentium-III/Celeron(Coppermine)/Pentium-III Xeon
    • Dell laptop support
  • Power management options (ACPI, APM) —>
    • [*] Suspend-to-Disk Support
    • ACPI (Advanced Configuration and Power Interface) Support —>
      • [*] ACPI Support -***[*] Sleep States (EXPERIMENTAL)
      • AC Adapter
      • Battery
      • Button
      • Fan
      • Processor
      • Thermal Zone
    • CPU Frequency scaling —>
      • <*> ‘powersave’ governor
      • <*> ‘userspace’ governor for userspace frequency scaling
      • <*> CPU frequency table helpers
      • <*> Intel SpeedStep on 440BX/ZX/MX chipsets (SMI interface)
  • Bus options (PCI, PCMCIA, EISA, MCA, ISA) —>
    • [*] PCI device name database
    • [*] ISA support
  • Executable file formats —>
  • Device Drivers —>
    • ATA/ATAPI/MFM/RLL support —>
      • <*> Intel PIIXn chipsets support
    • Networking support —>
      • Ethernet (10 or 100Mbit) —>
        • [*] 3COM cards
        • 3c590/3c900 series (592/595/597) « Vortex/Boomerang » support
      • Wireless LAN (non-hamradio) —>
        • Hermes chipset 802.11b support (Orinoco/Prism2/Symbol)
        • Hermes in PLX9052 based PCI adaptor support (Netgear MA301 etc.)
        • Hermes PCMCIA card support
    • Graphics support —>
      • [*] Support for frame buffer devices
      • <*> VESA VGA graphics support
      • Console display driver support —>
        • [*] Video mode selection support
        • <*> Framebuffer Console support
        • [*] Select compiled-in fonts
        • [*] VGA 8×16 font
    • Sound —>
      • Sound card support
      • Advanced Linux Sound Architecture —>
        • PCI devices —>
          • ESS Allegro/Maestro
  • File systems —>
    • <*> Ext3 journalling file system support
    • Network File Systems —>
      • NFS server support
      • [*] Provide NFSv3 server support
      • SMB file system support (to mount Windows shares etc.)
  • Profiling support —>
  • Kernel hacking —>
  • Security options —>
  • Cryptographic options —>
  • Library routines —>

Compilation

Une fois le fichier .config terminé, nettoyer l’arborescence des sources de votre noyau. Attention il faut le faire à chaque nouvelle compilation !
fakeroot make-kpkg clean

Après c’est le grands saut : lancer la compilation. ici j’utilise l’option « append-to-version » permetant d’ajouter un numéro de version. C’est particulièrement utile si comme moi vous avez besoin de 11 compilations / versions différentes pour arriver au meilleur résultat :
fakeroot make-kpkg --append-to-version=-test001 kernel_image

La compilation terminée vous trouverez dans le répertoire /usr/src un fichier .deb comme ceci :
ls /usr/src
kernel-image-2.6.5-test001_10.00.Custom_i386.deb

Pour installer ce noyau avec modification automatique de lilo ou grub.
dpkg -i kernel-image-2.6.5-test001_10.00.Custom_i386.deb

Attention cette installation m’annonce qu’elle modifie les options de boot enregistrées dans mon fichier de configuration de grub. J’utilise grub car j’ai installer debian à partir d’un cd de Sarge (testing) et grub en est le bootloader par défaut.

Pour parer aux probléme je vérifie la configuration de grub.
vi /boot/grub/menu.lst

Effectivement le paramètre vga=791 pour activer le le framebuffer sur mon noyau 2.4.24 et ainsi avoir une console en 1024X768 a été éffacée, faite attention !

Il ne vous reste plus qu’a rebooter pour voir le résultat.

Dans le cas probable ou le résultat ne soit pas positif à 100% rebooter sur votre « vieux » noyau, pour moi je suis retourné sur mon 2.4.24, et faite une déinstallation de votre décevant noyau 2.6.5.
apt-get remove --purge kernel-image-2.6.5-test001

La déinstallation supprime le noyau, les modules associés et les modification faire dans le fichier de configuration de grub. A vous de reprendre la configuration de option du noyau avec de faire une nouvelle compilation.

Documentations

Voici les documentations [2], formation ou support de cours consultés, bonne lecture :

  1. http://people.via.ecp.fr/ alexis/formation-linux/
  2. http://ernest.cheska.net/
  3. http://www.rycks.com/
  4. http://www.debian-fr.org/
  5. http://qref.sourceforge.net/
  6. http://rsuinux.free.fr/

Pour l’exemple

Voici pour l’exemple mon fichier .config actuel utiliser pour compiler mon noyau 2.6.5. Attention il correspond à mes besoin et spécifiquement à mon matériel, un portable Dell C600 avec carte Wifi Netgear MA401.

NOTE : J’ai migré mon portable sur un noyau 2.6.8 avec ce fichier de configuration sans changer un ligne et ceci sans le moindre problème

GZ - 177 octets
Mon .config

[1] A lire absolument ! http://people.via.ecp.fr/ alexis/formation-linux/

[2] Dont la lecture est très fortement conseillée

Post-Scriptum

Merci à P0upy dont j’ai intégré les différentes remarque.

Raccourcie dans Metacity

Utilisant gpm pour avoir une sourie en console j’avais une problème de compatibilité avec l’APM. Celuis-ci faisait perdre les pédales à gpm à chaque mise en veille de mon portable. Je souhaitais donc créé un raccourcie dans gnome 2.4.1 avec metacity pour quand la sourie était partie en sucette lancer mon xterm au clavier afin de réinitialiser gpm.

Pour créé une raccourcie clavier dans gnome 2.4.1 avec metacity voici la recette :

Débutons par l’installation de « gconf-editor » pour cela ouvrer u terminal et passer sous l’utilisateur root et lancer :
apt-get install gconf-editor

Une fois l’installation terminé Lancer gconf-editor présent dans le menue « Application » puis « Outils système ».

Dans gconf-editor aller dans /apps/metacity/global_keybindings et changer la valeur de run_command_N (où N est un nombre entre 1 et 12) avec les valeurs de touche choisie pour votre raccourci. Pour mon cas j’ai configurer « run_command_1 » avec :
<Control><Alt>x

PNG - 56.9 ko
gconf-editor 1
configurer « run_command_1 »

Puis aller dans /apps/metacity/keybinding_commands et changer la valeur du command_N correspondant à la commande voulue. Pour mon cas j’ai configurer « command_1 » avec :
/usr/X11R6/bin/xterm

PNG - 52.3 ko
gconf-editor 2
configurer « command_1 »

Et voilà ! <Control><Alt>x me lance mon xterm qui s’intègre si bien dans cette superbe usine à gaz qu’est Gnome.

J’ajoute immédiatement un autre raccourcies pour lancer gkrellm cela m’évite de le lance systématiquement au lancement de gnome. Je gagne ainsi du temps quant le lance Xwindows juste pour faire une action ou un test avant de le refermer.

dans /apps/metacity/global_keybindings/"run_command_2"
j'ajoute <Control><Alt>g
Et dans/apps/metacity/keybinding_commands/command_2/
j'ajoute usr/bin/gkrellm

Encore un autre pour lancer xkill dans le cas ou un programme Xwindows plante :

dans /apps/metacity/global_keybindings/"run_command_3"
j'ajoute <Control><Alt>k
Et dans/apps/metacity/keybinding_commands/command_3/
j'ajoute usr/X11R6/bin/xkill

Un raccourcie sur une commande shell

Un coup d’oeil dans le man xterm vous indique que l’option a utiliser est -e. Prenons l’exemple d’un raccourcie pour la commande top pour expliquer la syntaxe :
/usr/X11R6/bin/xterm -e top

A la fin de la commande en question, ici top le xterm se ferme. C’est à dire dans notre exemple quant je presse la touche q pour sortir de top.

Ubuntu

Cette astuce fonctionne parfaitement sur Ubuntu avec gnome 2.8. En rêgle général Ubuntu étant une enfant de debian il n’y a pas de problème avec les astuces debian.