커널을 컴파일하기 위해 대체 GCC 버전을 사용하면 어떤 결과가 발생할 수 있습니까?

커널을 컴파일하기 위해 대체 GCC 버전을 사용하면 어떤 결과가 발생할 수 있습니까?

와 연관되다:

커널을 컴파일할 수 없습니다: 오류, 커널은 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)/.kernelvariableslinux-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을 기본값으로 사용합니다).

관련 정보