相关:
我也刚刚遇到这个问题,而不是修补;
我用不同的 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 作为默认值),使用它都会生成一个工作内核(或正在运行的内核的模块)。