質問: カーネルはコンパイルでpicモードをサポートしていませんか? 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を実行しているのは、それが問題の原因である可能性がある場合です。
回答: 問題はgccのインストールにあります。gcc6+バージョンでは、デフォルトでpie(位置独立実行可能ファイル)が有効になっています。そのため、コンパイルするには、無効にする必要があります。 gcc 5にも問題があります。これはgccの既知のバグです。 バグリンク 。これまでのところ、gcc側からの公式パッチはないため、回避策はカーネルソースのmakefileにパッチを適用することです。ソースファイルのパッチ適用に慣れている場合は、このリンクのコードを使用してパッチファイルを作成し、コンパイルしてみてください。 パッチファイル パッチのインストールに問題がある場合はお知らせください。