使用備用 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 作為預設值),使用它都會產生一個工作內核(或正在運行的內核的模組)。

相關內容