Forum Linux.noyau Compilation kernel 4.18.x impossible en X86

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
0
8
oct.
2018

Bonjour,

Je suis nouveau sur le forum.
Je cherche de l'aide pour compiler une noyau 4.18.7 Preempt RT 5 en X86 32 bits sous Xubuntu 18.04.1 32 bits. Impossible d'y arriver, il ne se passe rien sur le terminal au bout de qq secondes.
J'y arrivais très bien pour les compilations des noyaux en 4.16.x Preempt RT, mais plus en 4.18.x Preempt RT.
J'ai fait l'essai d'installer un Xubunut 18.04.1 64 bits, et dans ce cas la compilation 4.18.7 Preempt RT 5 en 64 bits se passe bien (mise à part un démarrage très long avec "random: crng init done" sous dmesg. Mais c'est un autre sujet…), mais j'en ai besoin en 32 bits.

--> est ce quelqu'un sait comment compiler un noyau 4.18.x en 32 bits ?

Olivier

  • # faut etre plus precis

    Posté par  . Évalué à 6.

    il ne se passe rien sur le terminal au bout de qq secondes.

    tu as bien tout installer (paquet build-essentials) ?
    tu lances quoi comme commande ?
    tu as des messages d'erreur ?

    • [^] # Re: faut etre plus precis

      Posté par  . Évalué à 1. Dernière modification le 08 octobre 2018 à 18:11.

      Merci de ce début de réponse.

      au préalable, je fais les appels apt-get install suivants :

      sudo apt-get install po-debconf libstdc++-5-dev g++-5 g++ dpkg-dev build-essential sgml-data docbook-xml docbook-xsl xmlto kernel-package libtinfo-dev libncurses5-dev zlib1g-dev libssl-dev
      sudo apt-get install build-essential libncurses-dev bison flex libssl-dev libelf-dev
      sudo apt-get install gcc-7-base libstdc++-7-dev g++-7

      Puis je prépare le noyau en lui appliquant le patch Preempt RT :

      tar xvf linux-4.18.7.tar.xz
      cd linux-4.18.7
      xz -c -d ../patch-4.18.7-rt5.patch.xz | patch -p1
      
      cp /boot/config-$(uname -r) .config
      make clean
      make olddefconfig
      make menuconfig

      Après avoir activé le patch Preempt RT dans le menu, je lance la compilation :

      make-kpkg --verbose --initrd --revision=1.0 --rootcmd=fakeroot kernel_image kernel_headers -j 16

      j'optiens ceci dans la console :

      exec make kpkg_version=13.018+nmu1 -f /usr/share/kernel-package/ruleset/minimal.mk debian DEBIAN_REVISION=1.0  V=1  INITRD=YES  ROOT_CMD=fakeroot 
      ====== making target debian/stamp/conf/minimal_debian [new prereqs: ]======
      This is kernel package version 13.018+nmu1.
      test -d debian             || mkdir debian
      test ! -e stamp-building || rm -f stamp-building
      install -p -m 755 /usr/share/kernel-package/rules debian/rules
      for file in ChangeLog  Control  Control.bin86 config templates.in rules; do                                      \
                  cp -f  /usr/share/kernel-package/$file ./debian/;                               \
              done
      cp: cannot stat '/usr/share/kernel-package/ChangeLog': No such file or directory
      for dir  in Config docs examples ruleset scripts pkg po;  do                                      \
                cp -af /usr/share/kernel-package/$dir  ./debian/;                                 \
              done
      test -f debian/control || sed         -e 's/=V/4.18.7/g'  \
                      -e 's/=D/1.0/g'         -e 's/=A/i386/g'  \
          -e 's/=SA//g'  \
          -e 's/=I//g'                    \
          -e 's/=CV/4.18/g'               \
          -e 's/=M/Unknown Kernel Package Maintainer <unknown@unconfigured.in.etc.kernel-pkg.conf>/g'             \
          -e 's/=ST/linux/g'      -e 's/=B/i386/g'    \
                      -e 's/=R/initramfs-tools | linux-initramfs-tool,/g'    /usr/share/kernel-package/Control > debian/control
      test -f debian/changelog ||  sed -e 's/=V/4.18.7/g'       \
                  -e 's/=D/1.0/g'        -e 's/=A/i386/g'       \
                  -e 's/=ST/linux/g'     -e 's/=B/i386/g'         \
                  -e 's/=M/Unknown Kernel Package Maintainer <unknown@unconfigured.in.etc.kernel-pkg.conf>/g'                            \
                   /usr/share/kernel-package/changelog > debian/changelog
      chmod 0644 debian/control debian/changelog
      test -d ./debian/stamp || mkdir debian/stamp
      make -f debian/rules debian/stamp/conf/kernel-conf
      make[1]: Entering directory '/opt/Kernel/linux-4.18.7'
      ====== making target debian/stamp/conf/kernel-conf [new prereqs: ]======
      make    ARCH=i386 \
                          oldconfig;
      make[2]: Entering directory '/opt/Kernel/linux-4.18.7'
      make -f ./scripts/Makefile.build obj=scripts/basic
      rm -f .tmp_quiet_recordmcount
      make -f ./scripts/Makefile.build obj=scripts/kconfig oldconfig
      scripts/kconfig/conf  --oldconfig Kconfig
      #
      # configuration written to .config
      #
      make[2]: Leaving directory '/opt/Kernel/linux-4.18.7'
      make    ARCH=i386 prepare
      make[2]: Entering directory '/opt/Kernel/linux-4.18.7'
      make -f ./Makefile syncconfig
      make -f ./scripts/Makefile.build obj=scripts/basic
      rm -f .tmp_quiet_recordmcount
      make -f ./scripts/Makefile.build obj=scripts/kconfig syncconfig
      mkdir -p include/config include/generated
      scripts/kconfig/conf  --syncconfig Kconfig
      make -f ./scripts/Makefile.build obj=arch/x86/entry/syscalls all
      make -f ./scripts/Makefile.build obj=scripts/basic
      rm -f .tmp_quiet_recordmcount
      make -f ./scripts/Makefile.build obj=arch/x86/tools relocs
      set -e; mkdir -p include/config/;   echo "4.18.7$(/bin/bash ./scripts/setlocalversion .)" < include/config/auto.conf > include/config/kernel.release.tmp; if [ -r include/config/kernel.release ] && cmp -s include/config/kernel.release include/config/kernel.release.tmp; then rm -f include/config/kernel.release.tmp; else : '  UPD     include/config/kernel.release'; mv -f include/config/kernel.release.tmp include/config/kernel.release; fi
      make -f ./scripts/Makefile.asm-generic \
                  src=uapi/asm obj=arch/x86/include/generated/uapi/asm
      make -f ./scripts/Makefile.asm-generic \
                  src=asm obj=arch/x86/include/generated/asm
      set -e; mkdir -p include/generated/uapi/linux/;     (echo \#define LINUX_VERSION_CODE 266759; echo '#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))';) < Makefile > include/generated/uapi/linux/version.h.tmp; if [ -r include/generated/uapi/linux/version.h ] && cmp -s include/generated/uapi/linux/version.h include/generated/uapi/linux/version.h.tmp; then rm -f include/generated/uapi/linux/version.h.tmp; else : '  UPD     include/generated/uapi/linux/version.h'; mv -f include/generated/uapi/linux/version.h.tmp include/generated/uapi/linux/version.h; fi
      rm -f include/linux/version.h
      set -e; mkdir -p include/generated/;    if [ `echo -n "4.18.7-rt5" | wc -c ` -gt 64 ]; then echo '"4.18.7-rt5" exceeds 64 characters' >&2; exit 1; fi; (echo \#define UTS_RELEASE \"4.18.7-rt5\";) < include/config/kernel.release > include/generated/utsrelease.h.tmp; if [ -r include/generated/utsrelease.h ] && cmp -s include/generated/utsrelease.h include/generated/utsrelease.h.tmp; then rm -f include/generated/utsrelease.h.tmp; else : '  UPD     include/generated/utsrelease.h'; mv -f include/generated/utsrelease.h.tmp include/generated/utsrelease.h; fi
      mkdir -p .tmp_versions 
      make -f ./scripts/Makefile.build obj=.
      set -e; mkdir -p include/generated/;    (set -e; echo "#ifndef __LINUX_BOUNDS_H__"; echo "#define __LINUX_BOUNDS_H__"; echo "/*"; echo " * DO NOT MODIFY."; echo " *"; echo " * This file was generated by Kbuild"; echo " */"; echo ""; sed -ne    's:^[[:space:]]*\.ascii[[:space:]]*"\(.*\)".*:\1:; /^->/{s:->#\(.*\):/* \1 */:; s:^->\([^ ]*\) [\$#]*\([^ ]*\) \(.*\):#define \1 \2 /* \3 */:; s:->::; p;}'; echo ""; echo "#endif" ) < kernel/bounds.s > include/generated/bounds.h.tmp; if [ -r include/generated/bounds.h ] && cmp -s include/generated/bounds.h include/generated/bounds.h.tmp; then rm -f include/generated/bounds.h.tmp; else : '  UPD     include/generated/bounds.h'; mv -f include/generated/bounds.h.tmp include/generated/bounds.h; fi
      set -e; mkdir -p include/generated/;    (echo 250 | bc -q kernel/time/timeconst.bc ) < kernel/time/timeconst.bc > include/generated/timeconst.h.tmp; if [ -r include/generated/timeconst.h ] && cmp -s include/generated/timeconst.h include/generated/timeconst.h.tmp; then rm -f include/generated/timeconst.h.tmp; else : '  UPD     include/generated/timeconst.h'; mv -f include/generated/timeconst.h.tmp include/generated/timeconst.h; fi
      set -e; mkdir -p include/generated/;    (set -e; echo "#ifndef __ASM_OFFSETS_H__"; echo "#define __ASM_OFFSETS_H__"; echo "/*"; echo " * DO NOT MODIFY."; echo " *"; echo " * This file was generated by Kbuild"; echo " */"; echo ""; sed -ne 's:^[[:space:]]*\.ascii[[:space:]]*"\(.*\)".*:\1:; /^->/{s:->#\(.*\):/* \1 */:; s:^->\([^ ]*\) [\$#]*\([^ ]*\) \(.*\):#define \1 \2 /* \3 */:; s:->::; p;}'; echo ""; echo "#endif" ) < arch/x86/kernel/asm-offsets.s > include/generated/asm-offsets.h.tmp; if [ -r include/generated/asm-offsets.h ] && cmp -s include/generated/asm-offsets.h include/generated/asm-offsets.h.tmp; then rm -f include/generated/asm-offsets.h.tmp; else : '  UPD     include/generated/asm-offsets.h'; mv -f include/generated/asm-offsets.h.tmp include/generated/asm-offsets.h; fi
        /bin/bash scripts/checksyscalls.sh gcc -Wp,-MD,./.missing-syscalls.d  -nostdinc -isystem /usr/lib/gcc/i686-linux-gnu/7/include -I./arch/x86/include -I./arch/x86/include/generated  -I./include -I./arch/x86/include/uapi -I./arch/x86/include/generated/uapi -I./include/uapi -I./include/generated/uapi -include ./include/linux/kconfig.h -include ./include/linux/compiler_types.h -D__KERNEL__ -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -fshort-wchar -Werror-implicit-function-declaration -Wno-format-security -std=gnu89 -fno-PIE -DCC_HAVE_ASM_GOTO -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -mno-avx -m32 -msoft-float -mregparm=3 -freg-struct-return -fno-pic -mpreferred-stack-boundary=2 -march=i686 -mtune=generic -Wa,-mtune=generic32 -ffreestanding -DCONFIG_AS_CFI=1 -DCONFIG_AS_CFI_SIGNAL_FRAME=1 -DCONFIG_AS_CFI_SECTIONS=1 -DCONFIG_AS_SSSE3=1 -DCONFIG_AS_CRC32=1 -DCONFIG_AS_AVX=1 -DCONFIG_AS_AVX2=1 -DCONFIG_AS_AVX512=1 -DCONFIG_AS_SHA1_NI=1 -DCONFIG_AS_SHA256_NI=1 -pipe -Wno-sign-compare -fno-asynchronous-unwind-tables -mindirect-branch=thunk-extern -mindirect-branch-register -DRETPOLINE -fno-delete-null-pointer-checks -Wno-frame-address -Wno-format-truncation -Wno-format-overflow -Wno-int-in-bool-context -O2 --param=allow-store-data-races=0 -Wframe-larger-than=1024 -fstack-protector-strong -Wno-unused-but-set-variable -Wno-unused-const-variable -fno-omit-frame-pointer -fno-optimize-sibling-calls -fno-var-tracking-assignments -pg -mfentry -DCC_USING_FENTRY -Wdeclaration-after-statement -Wno-pointer-sign -fno-strict-overflow -fno-merge-all-constants -fmerge-constants -fno-stack-check -fconserve-stack -Werror=implicit-int -Werror=strict-prototypes -Werror=date-time -Werror=incompatible-pointer-types -Werror=designated-init -mrecord-mcount    -DKBUILD_BASENAME='"missing_syscalls"' -DKBUILD_MODNAME='"missing_syscalls"' 
      make[2]: Leaving directory '/opt/Kernel/linux-4.18.7'
      echo done > debian/stamp/conf/kernel-conf
      make[1]: Leaving directory '/opt/Kernel/linux-4.18.7'
      make -f debian/rules debian/stamp/conf/full-changelog
      make[1]: Entering directory '/opt/Kernel/linux-4.18.7'
      ====== making target debian/stamp/conf/full-changelog [new prereqs: ]======
      for file in ChangeLog  Control  Control.bin86 config templates.in rules; do             \
           cp -f  /usr/share/kernel-package/$file ./debian/;          \
      done
      cp: cannot stat '/usr/share/kernel-package/ChangeLog': No such file or directory
      for dir  in Config docs examples ruleset scripts pkg po;    do              \
         cp -af /usr/share/kernel-package/$dir  ./debian/;                \
      done
      install -p -m 755 /usr/share/kernel-package/rules debian/rules
      sed         -e 's/=V/4.18.7-rt5/g'  \
                      -e 's/=D/1.0/g'         -e 's/=A/i386/g'  \
          -e 's/=SA//g'  \
          -e 's/=I//g'                    \
          -e 's/=CV/4.18/g'               \
          -e 's/=M/Unknown Kernel Package Maintainer <unknown@unconfigured.in.etc.kernel-pkg.conf>/g'             \
          -e 's/=ST/linux/g'      -e 's/=B/i386/g'    \
                      -e 's/=R/initramfs-tools | linux-initramfs-tool,/g'  /usr/share/kernel-package/Control > debian/control
      sed -e 's/=V/4.18.7-rt5/g' -e 's/=D/1.0/g'        \
          -e 's/=A/i386/g' -e 's/=M/Unknown Kernel Package Maintainer <unknown@unconfigured.in.etc.kernel-pkg.conf>/g' \
          -e 's/=ST/linux/g'   -e 's/=B/i386/g'         \
          /usr/share/kernel-package/changelog > debian/changelog
      chmod 0644 debian/control debian/changelog
      make -f debian/rules debian/stamp/conf/kernel-conf
      make[2]: Entering directory '/opt/Kernel/linux-4.18.7'
      make[2]: 'debian/stamp/conf/kernel-conf' is up to date.
      make[2]: Leaving directory '/opt/Kernel/linux-4.18.7'
      make[1]: Leaving directory '/opt/Kernel/linux-4.18.7'
      echo done > debian/stamp/conf/minimal_debian
      exec debian/rules  DEBIAN_REVISION=1.0  V=1  INITRD=YES  ROOT_CMD=fakeroot  kernel_image kernel_headers

      Et puis plus rien, cela s'arrête sur cette dernière ligne…
      Des idées ?
      Olivier

      • [^] # Re: faut etre plus precis

        Posté par  . Évalué à 2.

        pourquoi y a tant d'option dans ta ligne de make

        de memoire quand je faisais un kernel, meme "personnalisé"
        c'etait un simple

        make -j16 kernel-image 
        make -j16 install

        apres relecture je vois que tu ne fais pas un simple kernel,
        tu refais un paquet debian make-kpkg pour installer le kernel ailleurs

        quand tu dis qu'il ne se passe rien, cela te rend la main, ou ca reste "bloqué" ?

        • [^] # Ne pas/plus utiliser kernel-package

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

          Hello,

          kernel-package, fournissant la commande make-kpkg, est déprécié depuis fort longtemps.

          Basculer sur make deb-pkg (ou make bindeb-pkg) est une très bonne idée, c'est maintenu upstream (cf. scripts/package/Makefile) et c'est adapté quand nécessaire pour que ça continue à fonctionner de version en version.

          C'est également une recommandation côté debian-kernel, cf. le Debian Linux Kernel Handbook.

          Je finirais par mentionner que générer un .deb est très utile pour un usage local (et pas forcément pour une autre machine) : cela permet d'obtenir un paquet intégré dans le gestionnaire de paquets (y compris les hooks initramfs-tools, grub* etc.), plutôt que d'avoir des fichiers en vrac qu'il faut maintenir (ou laisser pourrir) soi-même…

          Debian Consultant @ DEBAMAX

          • [^] # Re: Ne pas/plus utiliser kernel-package

            Posté par  . Évalué à 2.

            Merci Cyril !
            En effet, en utilisant make bindeb-pkg ça a marché !
            J'ai enfin mon noyau 4.18.7.RT 5 compilé en X86.

            Bravo et encore merci pour votre aide à tous,
            Olivier

      • [^] # Re: faut etre plus precis

        Posté par  . Évalué à 1. Dernière modification le 08 octobre 2018 à 18:59.

        Essaye avec -j 0 la fin sera plus au moment bloquant, car avec 16 proccessus l'erreur n'est pas toujours indiqué vers la fin.

        En tout cas je vois pas l'erreur.

        Moi j'utilise ceci sous debian pour avoir les 2 fichiers .deb:
        - cd 4.1xxx
        - cp /boot/config-$(uname -r) .config
        - make menuconfig
        - make-kpkg clean
        - fakeroot make-kpkg -j 15 --initrd kernel-image kernel-headers
        ou
        Pour avoir un nom unique et incrémenté suivant les secondes écoulé entre 2 compil:
        - fakeroot make-kpkg -j 15 --initrd --append-to-version=-$(date '+%s') kernel-image kernel-headers

        Sous debian je suis obliger de vider CONFIG_SYSTEM_TRUSTED_KEYS="" car il compile pas (mais j'ai l'erreur d'afficher).

Suivre le flux des commentaires

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