Çekirdek derleme için PIC modunu desteklemiyor mu?


14

Ubuntu 16.10 üzerinde en son Linux v4.8.9 çekirdeğini derlemeye çalışıyorum ve varsayılan .config'i yaptıktan, menuconfig ile değiştirdikten ve kendi başına yaptıktan sonra bu hata ortaya çıkıyor. Ben de dosyayı untarred en kısa sürede yapmak mrproper çalıştırın. Bu, make'i çalıştırdıktan hemen sonra çıktıdır:

scripts/kconfig/conf  --silentoldconfig Kconfig
  SYSTBL  arch/x86/entry/syscalls/../../include/generated/asm/syscalls_32.h
  SYSHDR  arch/x86/entry/syscalls/../../include/generated/asm/unistd_32_ia32.h
  SYSHDR  arch/x86/entry/syscalls/../../include/generated/asm/unistd_64_x32.h
  SYSTBL  arch/x86/entry/syscalls/../../include/generated/asm/syscalls_64.h
  SYSHDR  arch/x86/entry/syscalls/../../include/generated/uapi/asm/unistd_32.h
  SYSHDR  arch/x86/entry/syscalls/../../include/generated/uapi/asm/unistd_64.h
  SYSHDR  arch/x86/entry/syscalls/../../include/generated/uapi/asm/unistd_x32.h
  HOSTCC  arch/x86/tools/relocs_32.o
  HOSTCC  arch/x86/tools/relocs_64.o
  HOSTCC  arch/x86/tools/relocs_common.o
  HOSTLD  arch/x86/tools/relocs
  CHK     include/config/kernel.release
  UPD     include/config/kernel.release
  WRAP    arch/x86/include/generated/asm/clkdev.h
  WRAP    arch/x86/include/generated/asm/cputime.h
  WRAP    arch/x86/include/generated/asm/dma-contiguous.h
  WRAP    arch/x86/include/generated/asm/early_ioremap.h
  WRAP    arch/x86/include/generated/asm/mcs_spinlock.h
  WRAP    arch/x86/include/generated/asm/mm-arch-hooks.h
  CHK     include/generated/uapi/linux/version.h
  UPD     include/generated/uapi/linux/version.h
  CHK     include/generated/utsrelease.h
  UPD     include/generated/utsrelease.h
  CC      kernel/bounds.s
kernel/bounds.c:1:0: error: code model kernel does not support PIC mode
 /*

Kbuild:45: recipe for target 'kernel/bounds.s' failed
make[1]: *** [kernel/bounds.s] Error 1
Makefile:1015: recipe for target 'prepare0' failed
make: *** [prepare0] Error 2

Ayrıca make komutundan sonra -no-pie seçeneği ile derleme denedim ama sürekli "eksik hedefler" olduğunu söyleyerek, yeni hatalar bir dizi oluşturur. Gcc 6.2.0 sürümüne sahibim. Ayrıca gcc-5'i yükledim çünkü başlangıçta gcc çok yeni olduğu için olabileceğini düşündüm, ancak aynı sorun gcc-5'te devam ediyor. Posta listelerindeki veya başka bir forumdaki bir kişi, sorunun doğrudan git'ten klonlama ile çözüldüğünü, ancak bu da benim senaryomda yardımcı olmadığını belirtti.

Başka birinin bu problemle karşılaşıp karşılaşmadığını merak ediyorum ve eğer öyleyse, olası bir düzeltme olabilir mi?

NOT: Olası bir sorun kaynağı olabilirse Mac üzerinde Ubuntu'yu Virtualbox'ta çalıştırıyorum.

Yanıtlar:


14

Sorun gcc kurulumunuzda, gcc 6+ sürümlerinde PIE (pozisyondan bağımsız yürütülebilir dosyalar) varsayılan olarak etkindir. Bu yüzden derlemek için devre dışı bırakmanız gerekir. Gcc 5'in bile sorunu var. Bu gcc için bilinen bir hatadır. Hata bağlantısı .

Şimdiye kadar gcc tarafından resmi bir yama yoktur, bu nedenle geçici çözüm Makefile'in çekirdek kaynağını yamalamaktır.

Kaynak dosyayı yamalamayı biliyorsanız, yama dosyasını oluşturmak için bu bağlantıdaki kodları kullanın ve derlemeyi deneyin. Yama Dosyası

Düzeltme ekini yüklerken sorun yaşıyorsanız bana bildirin.


Ben tam bir linux noob, verilen web sitesine yama yüklemek için nasıl giderdim? Bir kısmını kopyalayıp bir dosyaya yapıştırıp bir komut çalıştırdığımı varsayıyorum?
John Long

1
Ne yazık ki, upvotes yapmak için yeterli rep puanım yok ama ben sadece Superuser'da cevapladığınız aynı soruyu sordum ve bu cevabı Superuser sorusuna bağlayıp yanıtladığınızı işaretlemek isteyip istemediğinizi sormak istedim. süper kullanıcı cevap verebilir. Kredinin vadesi geldiğinde kredi vermek istediğinizden emin olun!
John Long

1
Merhaba Ninetainedo, lütfen doğru şekilde kopyaladığınızdan ve yalnızca "Kimden" den "2.8.1" e kopyaladığınızdan emin olun.
Sevinç

1
@Joy Aynı hatayla karşılaştım: yama dosyası Makefile Hunk # 1 FAALED 608'de. 1 iri üzerinden 1 BAŞARISIZ - Makefile.rej yamasını dosyaya reddetmek kaydediliyor beklenmedik bir şekilde satırın ortasında bitiyor
rainman

1
yama 2.6.x sürümleri için çalışmıyor (i 2.6.39 denedim) bu benim yama reddetme dosya alma - pastebin.com/Pmdv1MTT herhangi bir fikir?
SatheeshJM

8

Makefile'ı açın, CFLAGS_EXTRA'yı arayın ve aşağıdaki seçeneği ekleyin -fno-pie

Çizgim vardı:

EXTRA_CFLAGS += $(CFLAGS_EXTRA)

Şunun için değiştirdim:

EXTRA_CFLAGS += $(CFLAGS_EXTRA) -fno-pie

Kernel 4 bina, yukarıda bayrak: KBUILD_CFLAGS.

Ve tekrar derlemeye başladı.


Bu iyi çalışıyor
King Stone
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.