![使用备用 GCC 版本编译内核可能会产生什么后果?](https://linux22.com/image/97605/%E4%BD%BF%E7%94%A8%E5%A4%87%E7%94%A8%20GCC%20%E7%89%88%E6%9C%AC%E7%BC%96%E8%AF%91%E5%86%85%E6%A0%B8%E5%8F%AF%E8%83%BD%E4%BC%9A%E4%BA%A7%E7%94%9F%E4%BB%80%E4%B9%88%E5%90%8E%E6%9E%9C%EF%BC%9F%20.png)
相关:
我也刚刚遇到这个问题,而不是修补;
我用不同的 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 作为默认值),使用它都会生成一个工作内核(或正在运行的内核的模块)。