कर्नेल संकलन के लिए PIC मोड का समर्थन नहीं करता है?


14

मैं Ubuntu 16.10 पर नवीनतम लिनक्स v4.8.9 कर्नेल को संकलित करने की कोशिश कर रहा हूं और यह त्रुटि डिफ़ॉल्ट हो गई है। डिफ़ॉल्ट बनाने के बाद .config, इसे menuconfig के साथ संशोधित किया और अपने आप ही बना। जैसे ही मैंने फाइल को अनट्रेड किया, मैंने मेकप्रूपर भी चला दिया। मेरे द्वारा रन बनाने के बाद यह आउटपुट है:

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

मैंने मेक कमांड के बाद -नो-पाई विकल्प के साथ संकलन करने का भी प्रयास किया है, लेकिन यह नई त्रुटियों का एक सेट प्रदान करता है, लगातार कह रहा है कि "लापता लक्ष्य" हैं। मेरे पास जीसीसी संस्करण 6.2.0 है। मेरे पास gcc-5 भी है क्योंकि मैंने शुरुआत में यह मान लिया था कि हो सकता है क्योंकि gcc बहुत नया था लेकिन gcc-5 में भी यही समस्या बनी हुई है। मेलिंग सूचियों या किसी अन्य फोरम में किसी ने उल्लेख किया कि समस्या को सीधे गिट से क्लोन करके हल किया गया था लेकिन इससे मेरे परिदृश्य में मदद नहीं मिली।

मैं उत्सुक हूँ कि अगर किसी और ने इस समस्या में भाग लिया है और यदि ऐसा है, तो क्या संभव हो सकता है?

नोट: मैं एक मैक पर वर्चुअलबॉक्स में उबंटू चला रहा हूं यदि यह समस्याओं का एक संभावित स्रोत हो सकता है।

जवाबों:


14

समस्या आपके gcc इंस्टालेशन के साथ है, gcc में 6+ वर्जन PIE (पोजीशन इंडिपेंडेंट एक्ज़ीक्यूटेबल्स) डिफॉल्ट रूप से इनेबल है। तो संकलित करने के लिए आपको इसे अक्षम करने की आवश्यकता है। यहां तक ​​कि gcc 5 का मुद्दा है। यह gcc के लिए एक ज्ञात बग है। बग लिंक

अब तक gcc की तरफ से कोई आधिकारिक पैच नहीं है, इसलिए वर्कअराउंड मेकफिल ऑफ़ कर्नेल स्रोत को पैच करना है।

यदि आप पैच फ़ाइल के स्रोत से परिचित हैं तो पैच फ़ाइल बनाने के लिए इस लिंक से कोड का उपयोग करें फिर संकलन करने का प्रयास करें। पैच फ़ाइल

मुझे पता है अगर आप पैच स्थापित करने में कठिनाई हो रही है।


मैं एक पूर्ण लिनक्स नोब हूं, मैं दिए गए वेबसाइट में पैच स्थापित करने के बारे में कैसे जाऊंगा? मुझे लगता है मैं एक फ़ाइल में कुछ भाग कॉपी और पेस्ट करता हूं और एक कमांड चलाता हूं?
जॉन लॉन्ग

1
दुर्भाग्य से, मेरे पास upvotes करने के लिए पर्याप्त प्रतिनिधि नहीं हैं, लेकिन मैंने वही सवाल पूछा, जिसका आपने सिर्फ सुपरयुसर पर उत्तर दिया था और मैं पूछना चाहता था कि क्या आप पसंद करेंगे कि मैं इस उत्तर को सुपरसुसर प्रश्न से लिंक करूं और उत्तर के रूप में चिह्नित करूं या आप स्वयं इसका जवाब सुपरसुसर पर दे सकते थे। बस यह सुनिश्चित करना चाहते हैं कि क्रेडिट कहां देना है!
जॉन लॉन्ग

1
हाय Ninetainedo, कृपया सुनिश्चित करें कि आपने इसे सही तरीके से कॉपी किया है और केवल "से" से "2.8.1" में कॉपी किया है।
जोय

1
@ जॉय मैं एक ही त्रुटि थी: पैचिंग फाइल मेकफाइल हंक # 1 फेल्ड 608 पर। 1 में से 1 हंक फेल्ड - मेकफाइल.रेजे पैच फाइल को रिजेक्ट करने से बचत अनपेक्षित रूप से लाइन के बीच में समाप्त हो जाती है
रमनमैन

1
पैच 2.6.x संस्करणों के लिए काम नहीं करता है (मैंने 2.6.39 में कोशिश की) मेरी पैच अस्वीकृति फ़ाइल में इसे प्राप्त करना - pastebin.com/Pmdv1MTT कोई विचार?
सथेशजम

8

मेकफिल खोलें, CFLAGS_EXTRA देखें और इसके लिए निम्न विकल्प जोड़ें -fno-pie

मेरे पास लाइन थी:

EXTRA_CFLAGS += $(CFLAGS_EXTRA)

मैंने इसे इसके लिए बदल दिया:

EXTRA_CFLAGS += $(CFLAGS_EXTRA) -fno-pie

कर्नेल 4 के निर्माण के लिए, ध्वज के ऊपर है KBUILD_CFLAGS:।

और यह फिर से संकलन शुरू कर दिया।


यह अच्छी तरह से काम कर रहा है
किंग स्टोन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.