대체 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에 문제가 있습니다).

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을 기본값으로 사용합니다) 이를 사용하면 작동하는 커널(또는 실행 중인 커널의 모듈)이 생성됩니다.

관련 정보