関連:
カーネルをコンパイルできません:エラー、カーネルはPICモードをサポートしていません。
私もパッチを適用するのではなく、この問題に直面しました。
私は別のgccバージョンで代替を設定し、v4からv5にジャンプし、今コンパイル中です。
$ update-alternatives --config gcc
There are 3 choices for the alternative gcc (providing /usr/bin/gcc).
Selection Path Priority Status
------------------------------------------------------------
0 /usr/bin/gcc-6 30 auto mode
1 /usr/bin/gcc-4.8 10 manual mode
* 2 /usr/bin/gcc-5 20 manual mode
3 /usr/bin/gcc-6 30 manual mode
問題が発生する可能性があり、カーネルをコンパイルするGCCバージョンを選択するベストプラクティスはありますか?
システムはDebian Stretchです。
答え1
~によるとカーネル文書、3.2から始まるすべてのバージョンのGCCが利用可能である必要があります。しかし、実際には、以前のバージョンのGCCはカーネルビルドであまりテストされていない傾向があるので、最新バージョンのGCCを使用する方が良いでしょう(ただし、新しいものではありませんが、GCC 6に問題があります)。
Debianでは、次のように適切なGCCバージョンを見つけることができます。カーネルソースパッケージ依存関係またはカーネルヘッダパッケージの依存関係を構築します。したがって、linux-headers-4.7.0-1-amd64
に依存するlinux-compiler-gcc-5-x86
時によって異なります。gcc-5
。
CC
値を取得して/usr/src/linux-headers-$(uname -r)/.kernelvariables
(必要に応じてインストール後)、正しい値を自動的に取得できます。linux-headers-$(uname -r)
たとえば、私のシステムは現在
override ARCH = x86
override KERNELRELEASE = 4.7.0-1-amd64
CCACHE = ccache
CC = $(if $(DEBIAN_KERNEL_USE_CCACHE),$(CCACHE)) $(CROSS_COMPILE)gcc-5
ifneq ($(DEB_BUILD_ARCH),$(DEB_HOST_ARCH))
override CROSS_COMPILE = $(DEB_HOST_GNU_TYPE)-
endif
CC
デフォルトのGCCが何であれ(私はGCC 6をデフォルトとして使用します)、これを使用すると、動作するカーネル(または実行中のカーネルのモジュール)が生成されます。