Ubuntu 16.10で最新のLinux v4.8.9カーネルをコンパイルしようとしましたが、デフォルトの.configを作成し、menuconfigで変更し、makeを単独で実行した後、このエラーが表示され続けます。また、ファイルを展開したらすぐにmake mrproperを実行しました。これは、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
また、makeコマンドの後に-no-pieオプションを使用してコンパイルしようとしましたが、一連の新しいエラーが表示され、「ターゲットが見つからない」と常に言われます。 gccバージョン6.2.0があります。また、最初はgccが新しすぎたのかもしれないが、gcc-5でも同じ問題が続いていると思われるため、gcc-5をインストールしました。メーリングリストまたは別のフォーラムの誰かが、この問題はgitから直接クローンを作成することで解決されたと述べましたが、それは私のシナリオでも役に立ちませんでした。
他の誰かがこの問題に遭遇したかどうか知りたいのですが、もしそうなら、可能な修正は何ですか?
注:MacのVirtualboxでUbuntuを実行しているのは、それが問題の原因である可能性がある場合です。
Makefileを開き、CFLAGS_EXTRAを探して、次のオプションを追加します-fno-pie
私はラインを持っていました:
EXTRA_CFLAGS += $(CFLAGS_EXTRA)
私はそれを変更しました:
EXTRA_CFLAGS += $(CFLAGS_EXTRA) -fno-pie
カーネル4をビルドする場合、上記のフラグはKBUILD_CFLAGS
です。
そして、再びコンパイルを開始しました。