낮은 버전의 커널을 최신 혹은 높은 버전의 gcc로 컴파일 할 때
cc1: error: code model kernel does not support PIC mode
라는 에러를 볼 수 있다. gcc특정 버전 이상에서는 pie적용이 기본으로 설정되어있어서 나는 오류이다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | diff --git a/Makefile b/Makefile index dda982c..f96b174 100644 --- a/Makefile +++ b/Makefile @@ -608,6 +608,12 @@ endif # $(dot-config) # Defaults to vmlinux, but the arch makefile usually adds further targets all: vmlinux +# force no-pie for distro compilers that enable pie by default +KBUILD_CFLAGS += $(call cc-option, -fno-pie) +KBUILD_CFLAGS += $(call cc-option, -no-pie) +KBUILD_AFLAGS += $(call cc-option, -fno-pie) +KBUILD_CPPFLAGS += $(call cc-option, -fno-pie) + # The arch Makefile can set ARCH_{CPP,A,C}FLAGS to override the default # values of the respective KBUILD_* variables ARCH_CPPFLAGS := | cs |
이 코드를 pie.patch로 만들고 커널 소스 최상위 디렉토리에서
patch -p1 < pie.patch 해주면 된다. (Makefile을 다 설정해준 후에 해줘야한다.)
'Linux Kernel' 카테고리의 다른 글
Linux kernel debugging with qemu (0) | 2018.03.27 |
---|---|
커널 옛날 버전 컴파일 하다가 ____ilog2_nan 에러날 때 (0) | 2018.03.20 |