Próbowałem skompilować najnowsze jądro Linux v4.8.9 na Ubuntu 16.10 i ten błąd pojawia się po utworzeniu domyślnego pliku .config, zmodyfikowaniu go za pomocą menuconfig i uruchomieniu go. Uruchomiłem make mrproper, jak tylko rozpakowałem plik. Oto wynik zaraz po uruchomieniu make:
scripts/kconfig/conf --silentoldconfig Kconfig
SYSTBL arch/x86/entry/syscalls/../../include/generated/asm/syscalls_32.h
SYSHDR arch/x86/entry/syscalls/../../include/generated/asm/unistd_32_ia32.h
SYSHDR arch/x86/entry/syscalls/../../include/generated/asm/unistd_64_x32.h
SYSTBL arch/x86/entry/syscalls/../../include/generated/asm/syscalls_64.h
SYSHDR arch/x86/entry/syscalls/../../include/generated/uapi/asm/unistd_32.h
SYSHDR arch/x86/entry/syscalls/../../include/generated/uapi/asm/unistd_64.h
SYSHDR arch/x86/entry/syscalls/../../include/generated/uapi/asm/unistd_x32.h
HOSTCC arch/x86/tools/relocs_32.o
HOSTCC arch/x86/tools/relocs_64.o
HOSTCC arch/x86/tools/relocs_common.o
HOSTLD arch/x86/tools/relocs
CHK include/config/kernel.release
UPD include/config/kernel.release
WRAP arch/x86/include/generated/asm/clkdev.h
WRAP arch/x86/include/generated/asm/cputime.h
WRAP arch/x86/include/generated/asm/dma-contiguous.h
WRAP arch/x86/include/generated/asm/early_ioremap.h
WRAP arch/x86/include/generated/asm/mcs_spinlock.h
WRAP arch/x86/include/generated/asm/mm-arch-hooks.h
CHK include/generated/uapi/linux/version.h
UPD include/generated/uapi/linux/version.h
CHK include/generated/utsrelease.h
UPD include/generated/utsrelease.h
CC kernel/bounds.s
kernel/bounds.c:1:0: error: code model kernel does not support PIC mode
/*
Kbuild:45: recipe for target 'kernel/bounds.s' failed
make[1]: *** [kernel/bounds.s] Error 1
Makefile:1015: recipe for target 'prepare0' failed
make: *** [prepare0] Error 2
Próbowałem też kompilować z opcją -no-pie po komendzie make, ale wyświetla ona zestaw nowych błędów, ciągle mówiąc, że „brakuje celów”. Mam wersję gcc 6.2.0. Mam również zainstalowany gcc-5, ponieważ zakładałem, że na początku mogło być tak, ponieważ gcc był zbyt nowy, ale ten sam problem występuje w gcc-5. Ktoś z list dyskusyjnych lub innego forum wspomniał, że problem został rozwiązany przez bezpośrednie klonowanie z git, ale to również nie pomogło w moim scenariuszu.
Jestem ciekawy, czy ktoś jeszcze napotkał ten problem, a jeśli tak, to jaka może być możliwa poprawka?
UWAGA: Używam Ubuntu w Virtualbox na komputerze Mac, jeśli może to być możliwe źródło problemów.
Otwórz plik Makefile, poszukaj CFLAGS_EXTRA i dodaj do niego następującą opcję
-fno-pie
Miałem linię:
Zmieniłem to dla:
Dla jądra 4 Budynek przede flaga jest:
KBUILD_CFLAGS
.I zaczęło się ponownie kompilować.
źródło