เคอร์เนลไม่รองรับโหมด PIC ในการรวบรวม?


14

ฉันพยายามรวบรวมเคอร์เนล Linux v4.8.9 ล่าสุดบน Ubuntu 16.10 และข้อผิดพลาดนี้ยังคงโผล่ขึ้นมาหลังจากที่ฉันได้กำหนดค่าเริ่มต้น. config แก้ไขด้วย menuconfig และรันด้วยตัวเอง ฉันยังใช้งาน mrproper ทันทีที่ฉันปลดไฟล์ นี่คือผลลัพธ์ทันทีหลังจากที่ฉันเรียกใช้ make:

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

ฉันยังได้พยายามรวบรวมด้วยตัวเลือก -no-pie หลังจากคำสั่ง make แต่มันทำให้เกิดข้อผิดพลาดชุดใหม่อย่างต่อเนื่องบอกว่ามี "เป้าหมายที่ขาดหายไป" ฉันมี gcc เวอร์ชั่น 6.2.0 ฉันยังติดตั้ง gcc-5 เพราะฉันสันนิษฐานว่าในตอนแรกอาจเป็นเพราะ gcc ใหม่เกินไป แต่ปัญหาเดิมยังคงอยู่ใน gcc-5 บางคนในรายการส่งเมลหรือฟอรัมอื่นกล่าวว่าปัญหาได้รับการแก้ไขโดยการโคลนโดยตรงจากคอมไพล์ แต่ไม่ได้ช่วยในสถานการณ์ของฉัน

ฉันอยากรู้ว่ามีใครประสบปัญหานี้หรือไม่และถ้าเป็นเช่นนั้นการแก้ไขที่เป็นไปได้อาจเป็นอย่างไร

หมายเหตุ: ฉันใช้งาน Ubuntu ใน Virtualbox บน Mac หากนั่นอาจเป็นสาเหตุของปัญหา

คำตอบ:


14

ปัญหาเกิดขึ้นจากการติดตั้ง gcc ของคุณใน gcc รุ่น 6+ PIE (ตำแหน่งที่สามารถทำงานได้อิสระ) เปิดใช้งานตามค่าเริ่มต้น ดังนั้นเพื่อรวบรวมคุณจำเป็นต้องปิดการใช้งาน แม้แต่ gcc 5 ก็มีปัญหา นี่เป็นข้อผิดพลาดที่รู้จักสำหรับ gcc การเชื่อมโยงข้อผิดพลาด

จนถึงขณะนี้ยังไม่มีแพตช์อย่างเป็นทางการจากด้าน gcc ดังนั้นวิธีแก้ปัญหาคือการแก้ไข Makefile ของเคอร์เนลซอร์ส

หากคุณคุ้นเคยกับการแพตช์ไฟล์ต้นฉบับให้ใช้รหัสจากลิงก์นี้เพื่อสร้างไฟล์แพตช์จากนั้นลองรวบรวม ไฟล์ Patch

แจ้งให้เราทราบหากคุณประสบปัญหาในการติดตั้งโปรแกรมปะแก้


ฉันเป็น linux noob ที่สมบูรณ์ฉันจะติดตั้งแพตช์ในเว็บไซต์ที่กำหนดได้อย่างไร? ฉันคิดว่าฉันคัดลอกและวางบางส่วนลงในไฟล์และเรียกใช้คำสั่งหรือไม่?
John Long

1
น่าเสียดายที่ฉันไม่มีคะแนนตัวแทนเพียงพอที่จะทำ upvote แต่ฉันถามคำถามเดียวกันกับที่คุณเพิ่งตอบใน Superuser และฉันต้องการถามว่าคุณต้องการเชื่อมโยงคำตอบนี้กับคำถาม Superuser และทำเครื่องหมายว่าตอบเองหรือคุณเอง สามารถตอบได้ใน superuser เพียงแค่ต้องการให้แน่ใจว่าจะให้เครดิตที่ครบกำหนดเครดิต!
John Long

1
สวัสดี Ninetainedo โปรดตรวจสอบให้แน่ใจว่าคุณคัดลอกมันถูกต้องและคัดลอกจาก "จาก" ถึง "2.8.1" เท่านั้น
Joy

1
@Joy ฉันมีข้อผิดพลาดเดียวกัน: ไฟล์การปะ Makefile Hunk # 1 FAILED ที่ 608 1 จาก 1 ก้อนใหญ่ FAILED - การบันทึกปฏิเสธไปยังไฟล์ Patch Makefile.rej โดยไม่คาดคิดจบลงกลางบรรทัด
rainman

1
แพทช์ไม่ทำงานสำหรับรุ่น 2.6.x (ฉันลองใน 2.6.39) รับสิ่งนี้ในไฟล์ปฏิเสธการแก้ไขของฉัน - pastebin.com/Pmdv1MTTมีความคิดเห็นอะไรบ้าง?
SatheeshJM

8

เปิด Makefile ค้นหา CFLAGS_EXTRA และเพิ่มตัวเลือกต่อไปนี้ -fno-pie

ฉันมีสาย:

EXTRA_CFLAGS += $(CFLAGS_EXTRA)

ฉันเปลี่ยนเป็น:

EXTRA_CFLAGS += $(CFLAGS_EXTRA) -fno-pie

สำหรับการสร้างเคอร์เนล 4 KBUILD_CFLAGSธงดังกล่าวเป็น:

และมันก็เริ่มรวบรวมอีกครั้ง


สิ่งนี้ใช้ได้ดี
King Stone
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.