Debian

使用備用 GCC 版本編譯核心可能會產生什麼後果?

  • October 30, 2016

相關:

無法編譯核心:錯誤,核心不支持PIC模式

我也只是遇到了這個問題,而不是打更新檔;

我用不同的gcc版本配置了alternatives,從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。

根據核心文件,您應該能夠使用從 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

無論預設的 GCC(我使用 GCC 6 作為預設值),使用它CC都會生成一個工作核心(或執行核心的模組)。

引用自:https://unix.stackexchange.com/questions/319908