カーネルはコンパイルでPICモードをサポートしていませんか?


14

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を実行しているのは、それが問題の原因である可能性がある場合です。

回答:


13

問題はgccのインストールにあります。gcc6+バージョンでは、PIE(位置独立実行可能ファイル)はデフォルトで有効になっています。そのため、コンパイルするには、無効にする必要があります。gcc 5にも問題があります。これはgccの既知のバグです。バグリンク

これまでのところ、gcc側からの公式パッチはないため、回避策はカーネルソースのMakefileにパッチを適用することです。

ソースファイルへのパッチ適用に慣れている場合は、このリンクのコードを使用してパッチファイルを作成し、コンパイルしてみてください。パッチファイル

パッチのインストールに問題がある場合はお知らせください。


私は完全なLinux初心者です。特定のWebサイトにパッチをインストールする方法を教えてください。一部をファイルにコピーして貼り付け、コマンドを実行すると仮定しますか?
ジョンロング

1
残念ながら、私は賛成票を出すのに十分な担当ポイントを持っていませんが、あなたがスーパーユーザーで答えたのと同じ質問をしました。スーパーユーザーで答えることができます。クレジットの支払いが必要な場合は、必ずクレジットを付与してください。
ジョンロング

1
こんにちはNinetainedo、正しくコピーし、「From」から「2.8.1」にのみコピーしたことを確認してください。
喜び

1
@Joy私は同じエラーでした:パッチ適用ファイルMakefileのハンクを#1 FAILED 1つの塊の608 1アウト時に失敗しました-行の途中で、予想外のファイルMakefile.rejパッチに拒否端を節約
RAINMAN

1
-パッチは、2.6.xのバージョン(私は2.6.39で試してみました)ファイルを拒否し、私のパッチでこれを取得するために動作しませんpastebin.com/Pmdv1MTT任意のアイデア?
-SatheeshJM

8

Makefileを開き、CFLAGS_EXTRAを探して、次のオプションを追加します -fno-pie

私はラインを持っていました:

EXTRA_CFLAGS += $(CFLAGS_EXTRA)

私はそれを変更しました:

EXTRA_CFLAGS += $(CFLAGS_EXTRA) -fno-pie

カーネル4をビルドする場合、上記のフラグは次のとおりKBUILD_CFLAGSです。

そして、再びコンパイルを開始しました。


これはうまく機能しています
キングストーン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.