와 연관되다:
커널을 컴파일할 수 없습니다: 오류, 커널은 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에 문제가 있습니다).
데비안에서는 다음을 보면 적절한 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을 기본값으로 사용합니다).