无法编译内核:错误,内核不支持PIC模式


8

我在重新编译内核时遇到麻烦。下载源程序包,解压缩并运行

fakeroot make-kpkg kernel_image  

把我引向错误

               [...]

  CHK     include/generated/utsrelease.h
  UPD     include/generated/utsrelease.h
  CHK     include/generated/package.h
  UPD     include/generated/package.h
  CC      kernel/bounds.s
kernel/bounds.c:1:0: error: code model kernel does not support PIC mode

可以通过更改通过获得的内核配置来解决该问题make menuconfig

如何摆脱这个错误并成功编译


该PIE与您的问题无关。您使用什么确切的发行版和软件包版本?什么版本的make和gcc?在什么架构上?
吉尔(Gilles)'所以

uname -a给我的Linux hostname 4.6.0-kali1-amd64 #1 SMP Debian 4.6.4-1kali1 (2016-07-21) x86_64 GNU/Linux ,gcc版本是gcc (Debian 6.2.0-9) 6.2.0 20161019。我已经遵循了这些确切的指示。
2016年

Answers:


7

来自http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.8-rc2/0002-UBUNTU-SAUCE-no-up-disable-pie-when-gcc-has-it-enabl.patch

您可以尝试以下补丁:

diff --git a/Makefile b/Makefile
index 5c18baa..e342473 100644
--- a/Makefile
+++ b/Makefile
@@ -612,6 +612,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 :=

几个相关的Debian门票:

和其他旁腺:


一个人如何应用此补丁?另见我的相关问题,如何编译英特尔E1000E驱动程序,它给出了同样的错误:askubuntu.com/questions/851721/...
阿梅代范Gasse

/usr/src/linux-headers-4.8.0-27/arch/x86$ cat〜/ e1000e-3.3.4 / disable-pie.patch | sudo patch -p1修补文件Makefile修补程序:****第7行的格式不正确的修补程序:全部:vmlinux
Amedee Van Gasse

对于上面显示的补丁,该补丁应应用于linux目录中的Makefile。例如,下载cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.8.15.tar.xz并扩展源之后,更改为linux-4.8.15,并且应该有一个Makefile那里。上面的补丁将应用于该Makefile,或者只是手动编辑文件(我使用sed来应用更改)。另一个注意事项:gcc6需要标记,但gcc5不需要。
雷蒙德·伯克霍尔德

我在内核构建中使用以下命令: github.com/rburkholder/vagrant/blob/master/bldkrnlpkg/…在debian / stretch上
Raymond Burkholder
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.