On 9 Apr 2002, Filipe Bonjour wrote:

> du kernel. Puis un jour j'ai lu quelque part (et perdu la reference,
> helas) qu'avant de configurer le kernel (avec make menuconfig, p. ex.)
> il fallait s'assurer que les repertoires /usr/include/asm,
> /usr/include/linux et /usr/include/scci devraient en fait etre des liens

En fait, la m�thode de compilation du kernel a �volu�.

Aujourd'hui, on se base sur l'hypoth�se que la machine qui va tourner un
kernel donn� n'est _pas forc�ment_ celle qui a compil� ce kernel: et la
machine de g�n�ration ne tourne m�me pas forc�ment la m�me version majeure
du kernel. Il n'est m�me pas garanti que la machine cible poss�de les
outils n�cessaires � la g�n�ration d'un kernel (packages de d�veloppement
de la libc, outils binutils, compilateur, includes, sources du kernel). 

Pour cette raison, on se base sur les hypoth�ses suivantes:

   - on peut avoir envie de g�n�rer un kernel pour une machine cible
     diff�rente sans avoir besoin de droits root.

   - on peut avoir envie de g�n�rer un kernel pour des sous-syst�mes
     (Debian les appelle modules) en relation avec un kernel.

       sous-syst�mes: p.ex. le sous-syst�me PCMCIA avec un kernel 2.2.x

en cons�quence, mettre le kernel dans /usr/src n'est plus une bonne
solution par d�faut. Avoir besoin de modifier /usr/include/linux ou
/usr/include/asm est encore moins une bonne chose.

La m�thode choisie est alors la suivante:

   - avoir sur la machine qui g�n�re les kernels les outils de base
     n�cessaires

   - d�compacter sous un utilisateur normal le kernel source choisi, dans
     un r�pertoire normal (p.ex. ~schaefer/KERNELS/linux-2.4.9/)

   - configurer ce kernel (make menuconfig p.ex.)

   - g�n�rer ce kernel, y compris les modules associ�s

   - g�n�rer �ventuellement un package binaire, installable sur la
     machine cible.

   - on ne touche pas /usr/include/linux, /usr/include/asm et encore
     moins /usr/src: /usr/include/linux et /usr/include/asm doivent
     correspondre, en fait, � la version de la *libc* install�e: celle-ci
     s'arrange pour la compatibilit� avec diff�rentes versions majeures
     des kernels. Bien souvent aujourd'hui, ces fichiers sont livr�s
     avec la libc: 

        schaefer@defian:~% dpkg -S /usr/include/linux/version.h 
        libc6-dev: /usr/include/linux/version.h

Qu'en est-il des sous-syst�mes ?  Ceux-ci ne devraient, dans l'id�al,
jamais d�pendre d'un kernel source � un endroit pr�cis, mais au contraire
donner la possibilit� � l'utilisateur qui les g�n�re de donner ces
informations. Cela est �galement valable pour les modules propri�taires ou
libres qui ne sont pas livr�s avec le kernel. Prenons l'exemple du pilote
3Com 3c90x, qui supporte certains chips utilis�s dans le mat�riel Dell
mieux que le pilote 3c59x standard du kernel, et qui est GPL: dans ce cas
il suffit d'�diter le script de compilation et de mettre la bonne option
-I, comme par exemple ~/KERNELS/linux-2.2.18m/include/. 

Maintenant qu'en est-il de l'impl�mentation ?  Comme toujours, il y a des
diff�rences entre les distributions: mais apparemment, au moins depuis la
libc6 (glibc 2.x), il semble y avoir une convergence compatible avec ce
qui pr�c�de.

Le cas de la distribution Debian stable:

   - il est recommand� d'utiliser le package kernel-package qui permet
     de recompiler ses propres kernels en suivant � peu pr�s ce qui
     pr�c�de

   - on peut compiler, avec kernel-package, o� l'on veut et sous
     l'utilisateur que l'on veut (via fakeroot), sans modifier le syst�me.

   - on peut facilement g�n�rer des packages binaires kernel, comprenant
     kernel, modules du kernel, configuration et System.map, et supportant
     la modification automatique de la configuration du boot-loader (p.ex.
     LILO) si l'on n'a pas modifi� ce fichier manuellement. On peut
     sp�cifier une version locale pour le package.

   - kernel-package peut, si on le d�sire, �tre utilis� �galement avec
     les packages sources Debian (kernel, sous-syst�mes, patches appliqu�s
     automatiquement � choix), mais ce n'est pas obligatoire: je
     recommande l'utilisation de kernels `pristine' de kernel.org

   - malheureusement, si l'on veut pouvoir utiliser kernel-package pour
     �galement compiler des sous-syst�mes (ce que Debian appelle des
     modules: p.ex. PCMCIA), il faut installer ceux-ci dans
     /usr/src/modules/: sinon la compilation n'est pas automatique. Cela
     implique en r�gle g�n�rale une installation et une compilation sous
     root, ce qui est dommage (*)

NB: dans ce qui pr�c�de, on n'a jamais trait� le th�me de la
cross-compilation (compilation crois�e: p.ex. compiler un kernel SPARC
sous ix86). A mon avis cela viendra un jour �galement.

(*) je n'ai pas creus� pour voir si l'on peut respecter les hypoth�ses de
base �galement dans le cas de sous-syst�mes, vu que mon syst�me de
pr�paration de kernels est justement mon portable et que les autres n'ont
pas besoin du sous-syst�me PCMCIA.

Il y avait un article de Linus expliquant cela mais je ne l'ai plus
retrouv�, � vos search engines :9


--
http://www-internal.alphanet.ch/linux-leman/ avant de poser
une question. Ouais, pour se d�sabonner aussi.

Répondre à