Tidak dapat mengkompilasi kernel: kesalahan, kernel tidak mendukung mode PIC

8

Saya mengalami masalah saat mengkompilasi ulang Kernel saya. Unduh paket sumber, dekompres dan jalankan

fakeroot make-kpkg kernel_image  

menuntun saya ke kesalahan

               [...]

  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

Masalah ini dapat diatasi dengan mengubah konfigurasi Kernel yang diperoleh make menuconfig.

Cara menghilangkan kesalahan ini dan memiliki kompilasi yang berhasil

pengguna123456
sumber
PIE itu tidak ada hubungannya dengan masalah Anda. Apa distribusi yang tepat dan versi paket yang Anda gunakan? Versi make dan gcc apa? Arsitektur apa?
Gilles 'SANGAT berhenti menjadi jahat'
uname -amemberi saya Linux hostname 4.6.0-kali1-amd64 #1 SMP Debian 4.6.4-1kali1 (2016-07-21) x86_64 GNU/Linux dan versi gcc adalah gcc (Debian 6.2.0-9) 6.2.0 20161019. Saya telah mengikuti mereka indikasi yang tepat.
user123456

Jawaban:

7

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

Anda dapat mencoba tambalan berikut:

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

Sepasang tiket debian terkait:

Dan paraphenilia lainnya:

Raymond Burkholder
sumber
Bagaimana seseorang menerapkan tambalan ini? Lihat juga pertanyaan terkait saya tentang mengkompilasi driver Intel e1000e, yang memberikan kesalahan yang sama: askubuntu.com/questions/851721/…
Amedee Van Gasse
/usr/src/linux-headers-4.8.0-27/arch/x86$ cat ~ / e1000e-3.3.4 / disable-pie.patch | sudo patch -p1 file patch Makefile patch: **** patch cacat pada baris 7: semua: vmlinux
Amedee Van Gasse
Untuk tambalan yang saya perlihatkan di atas, ini dimaksudkan untuk diterapkan pada Makefile di direktori linux. Sebagai contoh, setelah mengunduh cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.8.15.tar.xz , dan memperluas sumbernya, ubah ke linux-4.8.15, dan harus ada Makefile sana. Patch di atas diterapkan pada Makefile itu, atau hanya mengedit file secara manual (saya menggunakan sed untuk menerapkan perubahan). Catatan lain: bendera dibutuhkan dengan gcc6 tetapi tidak dengan gcc5.
Raymond Burkholder
Saya menggunakan yang berikut ini untuk build kernel saya: github.com/rburkholder/vagrant/blob/master/bldkrnlpkg/… di debian / stretch
Raymond Burkholder