2010-02-25 8 views
6

लिनक्स कर्नेल जीसीसी के साथ संकलन के लिए लिनक्स कर्नेल संकलित है और बहुत सारे छोटे और बदसूरत जीसीसी-हैक्स का उपयोग करता है। कौन से कंपाइलर gcc को छोड़कर linux कर्नेल संकलित कर सकते हैं?गैर-जीसीसी

एक, जो इंटेल कंपाइलर कर सकता है। कर्नेल संकलन के लिए इसका न्यूनतम संस्करण आवश्यक है?

एक छोटा सी कंपाइलर भी था, लेकिन यह कर्नेल के केवल कम और विशेष रूप से संपादित संस्करण को संकलित करने में सक्षम था।

क्या कर्नेल बनाने में सक्षम अन्य कंपाइलर्स हैं?

+0

डुप्लिकेट: http://stackoverflow.com/questions/689327/is-it-possible-to-compile-linux- कर्नेल-with-sethingething-other-than-gcc – dmckee

+0

मेरा पहला प्रश्न होगा .."जीसीसी एक विकल्प क्यों नहीं है?" मैं यह नहीं कह रहा हूं कि आप जो भी कर रहे हैं वह करने की कोशिश नहीं करनी चाहिए, वास्तव में जिज्ञासा को देखने के लिए यह बहुत अच्छा है। लेकिन आप लेजर से सशस्त्र शार्क के एक पूल में डाइविंग कर रहे हैं, इसलिए हम में से ज्यादातर जानना चाहते हैं कि क्यों। –

+1

@ टिम पोस्ट, मैं सीखना चाहता हूं, लिनक्स कर्नेल को गैर-जीसीसी कंपाइलर्स के साथ संकलित करने में कौन सी समस्याएं हैं। मैं एक प्रयोगात्मक कंपाइलर के साथ काम करता हूं और मुझे लिनक्स कर्नेल संकलित करने के लिए आवश्यक gnu एक्सटेंशन के समर्थन में सुधार करना होगा। इंटेल (linuxdna) से पैच मेरे लिए बहुत दिलचस्प हैं। – osgx

उत्तर

2

वेनिला कर्नेल (2013-2014) में एलएलवीएमएलिनक्स पैच करने की चल रही प्रक्रिया चल रही है।

एलएलवीएमएलआईक्सक्स लिनक्स फाउंडेशन द्वारा प्रोजेक्ट है: http://llvm.linuxfoundation.org/ ताकि वेनिला कर्नेल को एलएलवीएम के साथ बनाया जा सके। बेहद पैच बेहान वेबस्टर द्वारा तैयार किए जाते हैं, जो एलएलवीएमएलिनक्स प्रोजेक्ट लीड हैं।

मई से इस परियोजना के बारे LWN लेख वहाँ 2013 https://lwn.net/Articles/549203/ "LFCS: LLVMLinux परियोजना"

LLVMLinux परियोजना के

वर्तमान स्थिति पेज पर की जाती है http://llvm.linuxfoundation.org/index.php/Bugs#Linux_Kernel_Issues

चीजें (मूल रूप से जीसीसी-वाद) पहले से ही समाप्त किया गिरी से: * Expicit चर (गैर C99) रजिस्टर * VLAIS struct S { int array[N];} या यहाँ तक कि struct S { int array[N]; int array_usb_gadget[M]; } जहां एन और एम गैर निरंतर समारोह तर्क हैं (गैर C99 अनुरूप गैर-दस्तावेजी जीसीसी सुविधा "structs में चर लंबाई सरणियों") की तरह * नेस्टेड फ़ंक्शंस (एडीए सुविधा जीसीसी/जीएनटी डेवलपर्स द्वारा सी में पोर्ट की गई है; C99 में अनुमति नहीं है) * विशेष क्षेत्रों जैसे कुछ जीसीसी/गैस जादू, या मैक्रो

बातें किया जाना: * __builtin_constant_p builtin का उपयोग जैसा BUILD_BUG_ON(!__builtin_constant_p(offset));

LLVMLinux के बारे में अच्छी खबर यह डरावना जादू लागू करने के लिए कर रहे हैं इसके पैच कर्नेल के बाद न केवल एलएलवीएम + क्लैंग के साथ बिल्ड करने योग्य बन जाता है, बल्कि अन्य गैर-जीसीसी कंपाइलर्स द्वारा भी निर्माण करना आसान होता है, क्योंकि प्रोजेक्ट में सीएलए कोड जैसे वीएलआईएस, यूएसबी गैजेट लेखक द्वारा निर्मित, नेटफिल्टर हैकर्स द्वारा और क्रिप्टो सबसिस्टम द्वारा हैकर्स; नेस्टेड फ़ंक्शंस भी मारे गए हैं।

0

संक्षेप में, आप नहीं कर सकते, क्योंकि कर्नेल कोड जीसीसी के कंपाइलर अर्थशास्त्र का लाभ लेने के लिए लिखा गया था ... और कर्नेल और संकलित कोड के बीच, संबंध एक बहुत मजबूत है, यानी जीसीसी के साथ संकलित होना चाहिए ... चूंकि जीसीसी 'ईएलएफ' (एंबेडेड लिंकिंग फॉर्मेट) ऑब्जेक्ट फाइलों का उपयोग करता है, इसलिए कर्नेल ऑब्जेक्ट कोड प्रारूप का उपयोग करके बनाया जाना चाहिए। जब तक आप इसे किसी अन्य कंपाइलर के साथ काम करने के लिए हैक नहीं कर सकते - यह अच्छी तरह से संकलित हो सकता है लेकिन काम नहीं कर सकता है, क्योंकि विंडोज के तहत कंपाइलर्स पीई कोड उत्पन्न करते हैं, अप्रत्याशित परिणाम हो सकते हैं, जिसका अर्थ है कि कर्नेल बूट नहीं हो सकता है!

+0

विंडोज़ पे के अलावा बहुत सारे ओएस और कंपाइलर हैं। कई यूनिक्स में एल्फ कंपाइलर्स हैं, लिनक्स के लिए बहुत सारे वाणिज्यिक कंपाइलर्स भी हैं (एम्बेडेड प्लेटफॉर्म के लिए especailly)। कई कंपाइलर्स ईएलएफ के साथ काम करते हैं, और उनमें से कुछ जीसीसी एक्सटेंशन के एक हिस्से का समर्थन करते हैं। – osgx

+0

मैंने 2 कंपाइलर्स का नाम दिया, जो वास्तव में कुछ समय में कर्नेल को संकलित करने में सक्षम था - इंटेल सीसी और टिनी सीसी। मैं यहां लिनक्स कर्नेल संकलन समर्थन की वर्तमान स्थिति सुनना चाहता हूं। उदा। क्या "सन प्रो कंपाइलर" कर्नेल का निर्माण कर सकता है? – osgx

+0

ऐसे कई कंपाइलर्स हैं जो ईएलएफ ऑब्जेक्ट कोड उत्पन्न कर सकते हैं; यह सिर्फ गलत है। यही कारण नहीं है कि जीसीसी की आवश्यकता है। –

3

एक outdatet जानकारी: http://forums.fedoraforum.org/showthread.php?p=1328718

: आप आगे लिंक और जानकारी

सबसे हाल ही में सूत्रों के पर के लिए भी Is it possible to compile Linux kernel with something other than gcc इंटेल सीसी Download Linux kernel patch for Intel® Compiler

देखें का उपयोग कर संकलन करने में गिरी पैच करने के लिए की जरूरत है

+0

68 9 327 प्रश्न थोड़ा पुराना है (लगभग एक वर्ष)। कर्नेल के लिए गैर-जीसीसी कॉमप्लर्स की कोई नई जानकारी या यहां तक ​​कि एक सूची है? – osgx

+0

और मैं gcc, icc, tinycc के अलावा किसी भी कंपाइलर को जानना चाहता हूं, जो कर्नेल बिल्डिंग में सक्षम हैं। – osgx

+0

क्लेंग के साथ llvm इस मौसम के बाद से एक लिनक्स कर्नेल बनाने में सक्षम है – osgx