3 votes

Erreur fatale : linux/compiler-gcc7.h : Aucun fichier ou dossier de ce type

Je suis en train d'essayer d'installer l'outils Atheros CSI (les instructions d'installation fournies ici), en exécutant Ubuntu 18.04.2 LTS sur un ordinateur portable Dell Inspiron 5570 avec un adaptateur sans fil QCA9377.

Je suis capable de faire tout ce qui est listé dans la section "Préparer" de "Compiler le noyau" dans les instructions d'installation. (Il y a quelques choses non spécifiées dans les instructions que j'ai pu comprendre à faire, comme installer make et gcc.) Cependant, je suis confus au sujet de l'étape make menuconfig et au-delà. Quand je tape make menuconfig dans le dossier Atheros-CSI-Tool, je clique immédiatement sur "Sauvegarder", sauvegardant un fichier nommé .config, puis je quitte le menu.

Quand je tape ensuite make -j16 (j'ai 8 cœurs de CPU), voici ce que j'obtiens :

  CHK     include/config/kernel.release
  CHK     include/generated/uapi/linux/version.h
  CC      scripts/mod/empty.o
  CC      scripts/mod/devicetable-offsets.s
cc1: erreur : le modèle de code noyau ne prend pas en charge le mode PIC
cc1: erreur : le modèle de code noyau ne prend pas en charge le mode PIC
scripts/Makefile.build:258: recipe for target 'scripts/mod/empty.o' failed
make[2]: *** [scripts/mod/empty.o] Error 1
make[2]: *** Waiting for unfinished jobs....
scripts/Makefile.build:153: recipe for target 'scripts/mod/devicetable-offsets.s' failed
make[2]: *** [scripts/mod/devicetable-offsets.s] Error 1
scripts/Makefile.build:403: recipe for target 'scripts/mod' failed
make[1]: *** [scripts/mod] Error 2
make[1]: *** Waiting for unfinished jobs....
Makefile:555: recipe for target 'scripts' failed
make: *** [scripts] Error 2
make: *** Waiting for unfinished jobs....
make: *** wait: No child processes.  Stop.

Quand je tape ensuite make modules, voici le résultat :

  CHK     include/config/kernel.release
  CHK     include/generated/uapi/linux/version.h
  CHK     include/generated/utsrelease.h
  CC      arch/x86/purgatory/purgatory.o
In file included from include/linux/compiler.h:54:0,
                 from include/uapi/linux/stddef.h:1,
                 from include/linux/stddef.h:4,
                 from ./include/uapi/linux/posix_types.h:4,
                 from include/uapi/linux/types.h:13,
                 from include/linux/types.h:5,
                 from arch/x86/purgatory/sha256.h:14,
                 from arch/x86/purgatory/purgatory.c:13:
include/linux/compiler-gcc.h:121:1: fatal error: linux/compiler-gcc7.h: Aucun fichier ou dossier de ce type
 #include gcc_header(__GNUC__)
 ^~~~
compilation terminée.
scripts/Makefile.build:258: recipe for target 'arch/x86/purgatory/purgatory.o' failed
make[1]: *** [arch/x86/purgatory/purgatory.o] Error 1
arch/x86/Makefile:185: recipe for target 'archprepare' failed
make: *** [archprepare] Error 2

J'ai essayé de corriger ces erreurs rencontrées en installant une ancienne version d'Ubuntu (14.04) depuis les archives, mais le Wi-Fi ne fonctionnait pas sur mon ordinateur portable sous ce système d'exploitation (ce qui est important car je collecte des données sur les connexions Wi-Fi avec l'outil que j'essaie d'installer). J'ai également installé un ancien noyau Linux (4.1.10) depuis une archive en ligne, mais j'ai rencontré les mêmes erreurs que celles indiquées ci-dessus.

3voto

Bogdan Boamfa Points 11

Voici deux problèmes:

  1. Le noyau ne prend pas en charge le mode PIC pour la compilation, les détails peuvent être suivis dans ce post. Comme @Joy l'a noté, actuellement gcc5+ installé avec apt a PIE activé par défaut, nous devons ajouter -fno-pie aux options de gcc.

    Ici, je suis en train de suivre cette solution, ajoutez les lignes suivantes à partir de L774 du fichier Makefile sous le dépôt git que vous avez cloné.

    # forcer no-pie pour les compilateurs de distribution qui activent pie par défaut
    KBUILD_CFLAGS += $(call cc-option, -fno-pie)
    KBUILD_CFLAGS += $(call cc-option, -no-pie)
    KBUILD_AFLAGS += $(call cc-option, -fno-pie)
    KBUILD_AFLAGS += $(call cc-option, -no-pie)
    
    # optionnel, désactive les avertissements sur le signe des pointeurs pour accélérer la compilation
    KBUILD_CFLAGS += $(call cc-option, -Wno-pointer-sign)
  2. include/linux/compiler-gcc.h:121:1: fatal error: linux/compiler-gcc7.h, cela signifie essentiellement que sous le dossier include/linux du dépôt git que vous avez cloné, il n'y a pas de fichier nommé compiler-gcc7.h. Actuellement sous ce dossier, il n'existe qu'au maximum compiler-gcc5.h. Par conséquent, une approche directe consiste à installer et temporairement choisir gcc-5 comme compilateur par défaut. Suivez :

    # installer gcc-5
    sudo apt-get install gcc-5
    
    # utiliser update-alternatives pour changer la version de gcc par défaut
    # enregistrer gcc-7
    sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 50
    sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 60
    
    # choisissez gcc-5 à l'invite
    update-alternatives --config gcc
    
    # vérifiez maintenant la version de gcc, vérifiez si elle utilise gcc-5
    gcc -v
    
    ## version gcc 5.5.0 20171010 (Ubuntu 5.5.0-12ubuntu1)

Les instructions d'installation indiquaient d'installer libnl-dev via

sudo apt-get install libnl-dev

mais libnl-dev semble ne plus exister pour 18.04. Considérez d'utiliser

sudo apt-get install libnl-3-dev

à la place si vous rencontrez des problèmes.

Enfin, vous pouvez revenir à gcc-7 après l'installation via

# choisissez gcc-7 à l'invite
update-alternatives --config gcc

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X