Forum Linux.noyau Problème lors de la compilation d'un noyau 2.4.32

Posté par  (site web personnel) .
Étiquettes : aucune
0
4
août
2006
Bonsoir à tous.

J'ai un vieux portable sur lequel j'envisage de mettre un noyau 2.4 compilé à la main (pour maintes raisons). La compilation se déroule sur un AMD Athlon XP 2400+ donc ca va de ce côté la.
Mais le problème qui se pose à moi est que, lors de la dite compilation ( "make bzImage" ), je me retrouve avec cette erreur ci :

make[1]: Entre dans le répertoire `/root/port_sys/linux-2.4.32/arch/i386/kernel'
as -D__ASSEMBLY__ -D__KERNEL__ -I/root/port_sys/linux-2.4.32/include -o entry.o entry.s
as: unrecognized option `-__ASSEMBLY__'
make[1]: *** [entry.o] Erreur 1
make[1]: Quitte le répertoire `/root/port_sys/linux-2.4.32/arch/i386/kernel'
make: *** [_dir_arch/i386/kernel] Erreur 2

Et c'est assez ennuyeux puisque malgré quelques bidouillages sur les makefile, elle ne veut pas partir. Quelqu'un aurait-il une solution à ce problème ?

Merci à vous.
  • # binutils

    Posté par  (site web personnel) . Évalué à 3.

    Ca ressemble fort à une version trop ou pas assez récente des binutils, je dirais pas assez... Quelle version as tu ?
    • [^] # Re: binutils

      Posté par  (site web personnel) . Évalué à 1.

      J'ai regardé, et apparement je n'ai pas le paquet binutils, même pas dans les cds d'installation (c'est une mdk10 (paix à mon âme ;) ) ).
      Quelle version est ce que je dois télécharger ?
      • [^] # Re: binutils

        Posté par  (site web personnel) . Évalué à 1.

        je ne crois pas un seul instant que tu n'aies pas binutils. Ce package fournit entre autres ld, as, strip, objdump, nm, ... bref, plein de choses indispensables dès lors qu'on veut compiler quoi que ce soit.

        Tu peux savoir ta version de binutils en faisant "ld -V" (ça marche aussi avec nm, strip, objdump, mais avec as, il faut mettre --version).

        Normalement, c'est censé fonctionner à partir de binutils 2.9.1.0.25, mais je ne me souviens plus à quand remonte ma dernière compilation avec une telle version. Dans la pratique, 2.11 à 2.16.1 fonctionnent très bien.

        En fait, ce qui m'inquiète dans ta capture, c'est que l'assembleur n'aurait pas dû être invoqué de cette manière (prise dans Rules.make), c'est la règle suivante qui aurait dû être utilisée (dans arch/i386/kernel/Makefile) :

        .S.o:
        $(CC) $(AFLAGS) -traditional -c $< -o $*.o

        Vérifie donc la version de make (make --version). Ca marche normalement avec 3.79.1 à 3.81, et je crois me souvenir de problèmes occasionnels avec les versions antérieures, bien que ça remonte trop loin pour que je puisse en être sûr.

        Willy
        • [^] # Re: binutils

          Posté par  (site web personnel) . Évalué à 1.

          Alors, en effet j'ai binutils ;) , version 2.12.90.0.15
          et make, c'est 3.79.1 :-/
          • [^] # Re: binutils

            Posté par  (site web personnel) . Évalué à 2.

            Ah mais je n'avais pas vu, ton fichier s'appelle "entry.s" au lieu de "entry.S", autrement dit, ce n'est pas la même extension, donc make utilise la règle correspondant à l'extension ".s" au lieu de celle de ".S". C'est donc normal que tu aies ce comportement.

            N'aurais-tu pas transféré tes fichiers sur un file-system FAT qui aurait supprimé les majuscules, ou bien les aurais-tu recopiés à partir d'un fichier ZIP ?

            En attendant, renomme le fichier "entry.s" en "entry.S", ça devrait aller mieux, mais rien ne dit si ça ira jusqu'au bout, vu que je trouve 540 fichiers avec cette extension chez moi !

            Bon courage !

            PS: si c'est pour mettre sur une machine et laisser tourner, tu devrais récupérer la mise à jour 2.4.33-rc3 qui corrige pas mal de pb et de vulnérabilités.
            • [^] # Re: binutils

              Posté par  (site web personnel) . Évalué à 1.

              en effet, j'ai dézippé sur du fat, bravo :-/

              C'est pas fait pour en faire un serveur à la base, et mon 56K aurait du mal à comprendre que je lui demande de télécharger un fichier de plusieurs dizaines de Mo qui aurait une curieuse odeur de déjà vu ;) . Mais merci du conseil.
              Et merci pour ton aide, j'aurais jamais pensé que ca viendrait du FAT32.

              Bon, je vais re dézipper et je reviens pour dire si la compilation s'est correctement déroulée.
              Et encore merci à vous ;)
  • # paramètre march

    Posté par  (site web personnel) . Évalué à 1.

    Bon ben ca marche ;)

    Seul petit truc qui me chiffone un peu. Lors de l'appel de gcc, je voyais un -march i686 , or, l'ordi sur lequel le système va tourner est un vieux pc (un bon vieux i386), est ce que quelqu'un pourrait confirmer ou infirmer mes inquiétudes ?
    merci
    • [^] # Re: paramètre march

      Posté par  (site web personnel) . Évalué à 10.

      je voyais un -march i686 , or, l'ordi sur lequel le système va tourner est un vieux pc (un bon vieux i386)

      Tu vas être embêté. Certaines instructions comme BSWAP qui font l'équivalent de htonl() en une instruction sur 486 n'existent pas sur 386. L'instruction CMOV qui fait en gros in if/then sur PPro et au-delà n'existait pas sur le pentium ni avant.

      Si tu choisis bien 386 comme modèle dans la sélection du processeur vers
      le début de la conf, tu ne dois jamais voir apparaitre -march=i686.

      Autre avantage de mettre '386', le code sera plus petit (moins d'alignements, etc...), ce qui est intéressant sur des petites machines. J'en ai eu un qui m'a servi de firewall pendant 3 ans avec 5 Mo de RAM, et bien j'étais content d'arriver à l'optimiser pour gagner jusqu'à 200 ko de RAM avec des kernels ultra-patchés !

      willy

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.