代替の GCC バージョンを使用してカーネルをコンパイルすると、どのような結果が生じる可能性がありますか?

代替の GCC バージョンを使用してカーネルをコンパイルすると、どのような結果が生じる可能性がありますか?

関連:

カーネルをコンパイルできません: エラー、カーネルは 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)/.kernelvariableslinux-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 を使用しています) に関係なく、動作するカーネル (または実行中のカーネルのモジュール) が生成されます。

関連情報