相關:
我也剛剛遇到這個問題,而不是修補;
我用不同的 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 作為預設值),使用它都會產生一個工作內核(或正在運行的內核的模組)。