Không thể biên dịch kernel: lỗi, kernel không hỗ trợ chế độ PIC


8

Tôi gặp khó khăn khi biên dịch lại kernel của tôi. Tải xuống gói nguồn, giải nén nó và chạy

fakeroot make-kpkg kernel_image  

dẫn tôi đến lỗi

               [...]

  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

Vấn đề có thể được giải quyết bằng cách thay đổi cấu hình Kernel thu được bằng make menuconfig.

Làm thế nào để thoát khỏi lỗi này và biên dịch thành công


PIE đó không liên quan gì đến vấn đề của bạn. Phiên bản gói và phân phối chính xác nào bạn đang sử dụng? Phiên bản nào của make và gcc? Trên kiến ​​trúc nào?
Gilles 'SO- ngừng trở nên xấu xa'

uname -acho tôi Linux hostname 4.6.0-kali1-amd64 #1 SMP Debian 4.6.4-1kali1 (2016-07-21) x86_64 GNU/Linux và phiên bản gcc là gcc (Debian 6.2.0-9) 6.2.0 20161019. Tôi đã làm theo những chỉ dẫn chính xác.
user123456

Câu trả lời:


7

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

bạn có thể thử bản vá sau:

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 :=

Một vài vé debian liên quan:

Và paraphenilia khác:


Làm thế nào để áp dụng bản vá này? Xem thêm câu hỏi liên quan của tôi về việc biên dịch trình điều khiển Intel e1000e, lỗi này cũng có lỗi tương tự: askubfox.com/questions/851721/ mẹo
Amedee Van Gasse

/usr/src/linux-headers-4.8.0-27/arch/x86$ cat ~ / e1000e-3.3.4 / vô hiệu hóa-pie.patch | sudo patch -p1 file patch patch Makefile patch: **** patch không đúng định dạng ở dòng 7: all: vmlinux
Amedee Van Gasse

Đối với bản vá tôi hiển thị ở trên, điều này có nghĩa là được áp dụng cho Makefile trong thư mục linux. Ví dụ: sau khi tải xuống cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.8.15.tar.xz và mở rộng nguồn, thay đổi thành linux-4.8.15 và cần có Makefile ở đó Bản vá ở trên được áp dụng cho Makefile đó hoặc chỉ chỉnh sửa tệp theo cách thủ công (tôi sử dụng sed để áp dụng thay đổi). Một lưu ý khác: các cờ là cần thiết với gcc6 nhưng không phải với gcc5.
Raymond Burkholder

Tôi sử dụng cách sau cho các bản dựng kernel của mình: github.com/rburkholder/vagrant/blob/master/bldkrnlpkg/ trên on debian / Stretch
Raymond Burkholder
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.