लिनक्स कर्नेल का संकलन करके मैं क्या लाभ देख सकता था? क्या कुछ दक्षता है जिसे आप अपने हार्डवेयर में कस्टमाइज़ करके बना सकते हैं?
लिनक्स कर्नेल का संकलन करके मैं क्या लाभ देख सकता था? क्या कुछ दक्षता है जिसे आप अपने हार्डवेयर में कस्टमाइज़ करके बना सकते हैं?
जवाबों:
मेरे मन में, आपके अपने लिनक्स कर्नेल को संकलित करने से आपको वास्तव में केवल एक ही लाभ होगा:
आप अपने खुद के लिनक्स कर्नेल को संकलित करना सीखते हैं।
यह कुछ आप नहीं है की जरूरत है और अधिक गति / स्मृति / जो कुछ भी xxx के लिए क्या करना है। यह एक मूल्यवान बात है कि अगर आपको लगता है कि मंच आपके विकास में है। यदि आप इस बारे में गहन जानकारी चाहते हैं कि यह पूरा "खुला स्रोत" चीज के बारे में क्या है, कर्नेल के विभिन्न भाग कैसे और क्या हैं, तो आपको इसे देना चाहिए। यदि आप अपने बूट समय में 3 सेकंड की गति बढ़ाने के लिए देख रहे हैं, तो ... क्या बात है ... एक एसएसडी खरीदें। यदि आप जिज्ञासु हैं, यदि आप सीखना चाहते हैं, तो अपने कर्नेल को संकलित करना एक महान विचार है और आपको इससे बहुत कुछ प्राप्त होने की संभावना है।
उस के साथ, कुछ विशिष्ट कारण हैं, जब अपने कर्नेल को संकलित करना उचित होगा (जैसा कि कई लोगों ने अन्य उत्तरों में बताया है)। आम तौर पर ये विशिष्ट परिणाम के लिए आपके पास एक विशिष्ट आवश्यकता से उत्पन्न होते हैं, उदाहरण के लिए:
मुद्दा यह सोचने में निहित है कि जब कुछ पहले से ही जिस तरह से होना चाहिए, वह काम कर रहा है, तो अपने ही कर्नेल को संकलित करने के कुछ आंतरिक लाभ हैं। और मुझे नहीं लगता कि वहाँ है। यद्यपि आप उन चीजों को अक्षम करने में घंटों का समय बिता सकते हैं जिनकी आपको आवश्यकता नहीं है और उन चीजों को जो कि tweakable हैं, को ट्विंक कर रहे हैं, तथ्य यह है कि लिनक्स कर्नेल पहले से ही अधिकांश उपयोगकर्ता स्थितियों के लिए बहुत अच्छी तरह से (आपके वितरण द्वारा) तैयार है।
अधिकांश उपयोगकर्ताओं को अपने स्वयं के कर्नेल को संकलित करने की आवश्यकता नहीं है, उनके वितरण ने उनके लिए यह काम किया है। आमतौर पर वितरण में पैच का एक सेट शामिल होगा, जिसमें वितरण कार्य, डिवाइस ड्राइवरों के बैकपार्ट्स और नए से फिक्स होने के कुछ हिस्सों को एकीकृत किया जाता है, लेकिन कर्नेल के अनरिलीज्ड वर्जन या फीचर्स जो वे अपने उपयोगकर्ताओं के साथ अग्रणी हैं।
जब आप अपने स्वयं के कर्नेल को संकलित करते हैं, तो आपके पास कुछ विकल्प होते हैं, आप एक आधिकारिक लिनुस टॉर्वाल्ड कर्नेल को संकलित कर सकते हैं, इसमें आपके वितरण द्वारा जोड़े गए कोई भी पैच या अनुकूलन शामिल नहीं होंगे (जो अच्छे या बुरे हो सकते हैं) या आप कर सकते हैं अपने कर्नेल के निर्माण के लिए अपने वितरण पुनर्निर्माण उपकरण का उपयोग करें।
जिन कारणों से आप अपनी कर्नेल को फिर से बनाना चाहते हैं, उनमें शामिल हैं:
कई डेवलपर्स इसका उपयोग एम्बेडेड सिस्टम के लिए कर्नेल के कस्टम संस्करण बनाने के लिए करते हैं या उन बॉक्स को सेट करते हैं जहां उन्हें विशेष उपकरण ड्राइवरों की आवश्यकता होती है, या वे कार्यक्षमता को निकालना चाहते हैं जिनकी उन्हें आवश्यकता नहीं है।
bisect
पता लगाने के लिए आईएनजी जोड़ना चाहिए कि एक बग कहां पेश किया गया ...
कर्नेल को स्वयं संकलित करने से आप केवल अपने कंप्यूटर से संबंधित भागों को शामिल कर सकते हैं, जो इसे छोटे और संभावित रूप से तेज बनाता है, खासकर बूट समय पर। जेनेरिक कर्नेल को यथासंभव हार्डवेयर के लिए समर्थन शामिल करने की आवश्यकता है; बूट समय में वे पता लगाते हैं कि आपके कंप्यूटर से कौन सा हार्डवेयर जुड़ा हुआ है और उपयुक्त मॉड्यूल लोड करता है, लेकिन यह सब करने में समय लगता है और कोड को सीधे कर्नेल में बेक किए जाने के बजाय उन्हें गतिशील मॉड्यूल लोड करने की आवश्यकता होती है। जब आपके कंप्यूटर में केवल एक ही है, या ब्लूटूथ चूहों का समर्थन करने के लिए आपके कर्नेल का समर्थन करने का कोई कारण नहीं है, अगर आपके पास एक नहीं है, तो यह सब व्यर्थ है जिसे आप खाली कर सकते हैं
मुझे विश्वास नहीं हो रहा है कि यहां स्वीकृत उत्तर यह कहना शुरू करता है कि "यह वह चीज नहीं है जो आपको अधिक गति / मेमोरी / xxx के लिए करने की आवश्यकता है।"
यह बात भी पूरी तरह ग़लत है। मैं नियमित रूप से अपने कर्नेल का निर्माण करता हूं दोनों अनावश्यक कोड को हटाने के साथ-साथ प्रदर्शन को बढ़ाने वाला कोड भी शामिल करता है जो ज्यादातर हार्डवेयर से संबंधित होता है। उदाहरण के लिए, मैं कुछ पुराने हार्डवेयर चलाती हूं और कुछ परफॉरमेंस गेन को सक्षम कर सकती है जैसे कि कुछ पुराने मॉबोस पर HPT36x चिपसेट सपोर्ट के रूप में सक्षम कर्नेल ड्राइवर।
एक अन्य उदाहरण, स्लैकवेयर के तहत बिग एसएमपी डिफ़ॉल्ट है और एक डेल 2800 पर, उदाहरण के लिए, जीएफएसडी (एक कर्नेल मॉड्यूल के रूप में नहीं) जैसी चीजों को चलाने के लिए एक बड़े पैर प्रिंट का उपभोग करेगा, वैसे भी, मैं कुछ के लिए सीपीयू टिक का उपभोग करता हूं। जरूरत नहीं है इसी तरह एनएफएसडी और अन्य कैच-ऑल के लिए सभी मानसिकताओं को खुश करने के लिए जो ठीक है अगर आप सिर्फ एक बॉक्स पर लिनक्स प्राप्त करने की कोशिश कर रहे हैं और चल रहे हैं लेकिन अगर आप "स्पीड / मेमोरी / एक्सएक्सएक्स जो भी" के बारे में परवाह करते हैं तो ये चीजें मायने रखती हैं ।
मेरे सभी प्रोडक्शन बॉक्स कस्टम कर्नेल हैं। अगर मैं डेल श्रृंखला (2800, 2850, 2900, आदि ...) जैसे सामान्य हार्डवेयर पर हूं, तो यह कर्नेल की .config फ़ाइल को प्रत्येक बॉक्स में कॉपी करने और कर्नेल को संकलित करने और स्थापित करने का सरल मामला है।
यहाँ कुछ स्थितियाँ हैं जहाँ आपके अपने कर्नेल को संकलित करने से आपको लाभ होगा:
मॉड्यूल लोडिंग अक्षम के साथ एक कर्नेल अधिक सुरक्षित है। इसके लिए आपको उन मॉड्यूल का चयन करने की आवश्यकता होगी जिन्हें आप जानते हैं कि आपको उनकी आवश्यकता है और उन्हें कर्नेल के भाग के रूप में शामिल करना है, क्योंकि उन्हें मॉड्यूल के रूप में संकलित करने का विरोध किया गया है।
/ Dev / kmem के लिए समर्थन को अक्षम करना, या उपयुक्त संकलक विकल्प के साथ इसे अपंग करना सुरक्षा के लिए एक अच्छी बात है। मुझे लगता है कि अधिकांश डिस्ट्रोस डिफ़ॉल्ट रूप से अब ऐसा करते हैं।
मैं जब संभव हो initrd का उपयोग नहीं करना पसंद करता हूं। हार्डवेयर से अपने कर्नेल को अनुकूलित करना यह initrd को समाप्त करने से बूट करता है।
कभी-कभी बाद के कर्नेल संस्करण में आपके लिए आवश्यक विशेषताएं होंगी, लेकिन यह आज बहुत दुर्लभ है। मुझे याद है कि जब मैंने पहली बार डेबियन का उपयोग करना शुरू किया था, तो यह 2.4 कर्नेल का उपयोग कर रहा था, लेकिन मुझे udv समर्थन के लिए 2.6 कर्नेल की आवश्यकता थी।
नेटवर्किंग प्रोटोकॉल / विकल्प अक्षम करने की आवश्यकता नहीं है आप अपने टीसीपी / आईपी प्रदर्शन को गति दे सकते हैं।
विकल्पों को अक्षम करने के लिए आपको कर्नेल की मेमोरी फ़ुटप्रिंट को कम करने की आवश्यकता नहीं है, जो कम रैम वातावरण में महत्वपूर्ण है। जब आप एक राउटर के रूप में 256MB रैम सिस्टम का उपयोग कर रहे हैं, तो यह मदद करता है।
मैं उन सभी "ट्टी" उपकरणों को / उन सिस्टम पर डिस्टर्बिंग के लिए खोजता हूँ जहाँ मैं आमतौर पर केवल सीरियल या ssh के माध्यम से लॉग इन करता हूँ।
अपनी खुद की गिरी को संकलित करना आपको कर्नेल विकास प्रक्रिया में भाग लेने की अनुमति देता है, चाहे वह साधारण सामान हो, जैसे कि मौजूदा ड्राइवर के लिए पीसीआई / यूएसबी डिवाइस आईडी की आपूर्ति करना जो आपके लिए एक नया उपकरण काम कर सकता है, कोर के मैदान में गहराई से शामिल होने के लिए। गिरी विकास।
यह आपको अपने हार्डवेयर पर विकास गुठली का परीक्षण करने और प्रतिक्रिया देने की अनुमति देता है यदि आप किसी भी प्रतिगमन को नोटिस करते हैं। यह विशेष रूप से आपके और दूसरों के लिए उपयोगी हो सकता है यदि आपके पास हार्डवेयर का कोई असामान्य टुकड़ा है। यदि आप डिस्ट्रो कर्नेल की प्रतीक्षा करते हैं, तो आपकी समस्या रिपोर्ट से नए डिस्ट्रो कर्नेल रिलीज़ में फ़िल्टर करने में कुछ समय लग सकता है।
मैं व्यक्तिगत रूप से अपने स्वयं के कर्नेल को केवल उस हार्डवेयर के लिए समर्थन शामिल करने के लिए संकलित करना चाहता हूं जो मेरे पास है। जब आप डिस्ट्रो कर्नेल चलाते हैं और के आउटपुट को lsmod(8)
देखते हैं, तो आपके पास हार्डवेयर के लिए बहुत सारे मॉड्यूल लोड होते हैं जो आपके पास नहीं हैं। यह मॉड्यूल सूची, / proc, / sys और आपके लॉग को प्रदूषित कर सकता है जब आप कुछ खोज रहे होते हैं तो यह शोर के बीच छिपा हो सकता है; आप यह भी शत-प्रतिशत सुनिश्चित नहीं कर सकते हैं कि जिन मॉड्यूल्स में आप निदान करने की कोशिश कर रहे हैं, उन मॉड्यूल का योगदान नहीं है।
मैं दूसरा gabe। का उत्तर (मेरी टिप्पणी बहुत लंबी है इसलिए मैं एक उत्तर के रूप में पोस्ट कर रहा हूं)।
जब तक आपके पास एक अत्यधिक विशिष्ट उद्देश्य (जैसे एम्बेडेड मशीन, सख्त सुरक्षा रूपरेखा) नहीं है, मुझे यह देखने के अलावा कि यह कैसे किया जाता है, इसके अलावा अपने स्वयं के कर्नेल को संकलित करने का कोई व्यावहारिक लाभ नहीं दिखता है। व्यवस्थित रूप से विकल्पों की समीक्षा करके, यह देखने के लिए कि सिस्टम बनाने के लिए वे एक-दूसरे के साथ कैसे बातचीत करते हैं, यह समझने का एक शानदार तरीका है कि आपका सिस्टम कैसे काम करता है। यह आश्चर्यजनक है कि जब आप उन घटकों को हटाने की कोशिश करते हैं, जो उन कार्यों को पूरा करने के लिए प्रकट नहीं होते हैं जिन्हें आप पूरा करने की कोशिश कर रहे हैं।
हालांकि चेतावनी दी है - क्यों खरगोश छेद नीचे कूद निस्संदेह प्राणपोषक है, यह संभव से अधिक रातों और सप्ताहांत वापस चूसना होगा जितना आपने सोचा था!
काम पर, हम हाथ से लुढ़का हुआ कर्नेल का उपयोग करते हैं ताकि आउट-ऑफ-ट्री पैच जैसे कि वेसरवर और यूनियनफ़्स लागू हो सकें।
घर पर, मैं हाथ से लुढ़कने वाली गुठली संकलित कर रहा हूं ताकि यह पता चले कि किस बग का सामना करना पड़ रहा है। एक बार जब मैंने वह पूरा कर लिया, तो मैं शायद हाथ से लुढ़कने वाली गिरी से चिपक जाऊंगा, जब तक कि बग को मेरे वितरण (डेबियन) में तय नहीं किया जाता है, जिस समय मैं फिर से उनकी गुठली को वापस कर दूंगा।
यह धागा अभी पुराना है और फिर भी आज भी मान्य है क्योंकि यह प्रश्न पूछा गया था!
इसका उत्तर है: आप अपनी ज़रूरत और आवश्यकताओं के अनुसार अपनी पसंद के लिनेक्स कर्नेल को संकलित करते हैं।
कई परिदृश्य मान्य हैं:
आप एक इंजीनियर हैं और आपको अपने सिस्टम के लिए प्रदर्शन और सुरक्षा आवश्यकताओं / मांगों को पूरा करने के लिए अपने निर्माण की आवश्यकता है, आप निर्दिष्ट मानदंडों को पूरा करने और / या पार करने के लिए recompile करते हैं।
आप एक सामान्य उपयोगकर्ता हैं और आपके पास एक पुरानी प्रणाली है जिसे आप जितनी देर तक रखना चाहते हैं, आप अपने पुराने सिस्टम को अनुकूलित रखने के लिए घटकों को जोड़ने / हटाने के लिए पुन: व्यवस्थित करते हैं।
आप नवीनतम तेज हार्डवेयर के साथ एक सामान्य उपयोगकर्ता हैं और इसमें पर्याप्त मेमोरी / रैम है। फिर से जोड़ने की आवश्यकता नहीं है लेकिन आप अभी भी कर सकते हैं यदि आप अपने सिस्टम के बारे में थोड़ा और जानने में रुचि रखते हैं।
आप बस Microsoft और / या मैक रोजमर्रा के उपयोगकर्ता की तरह बनना चाहते हैं, फिर से संगठित न हों और अपने अपस्ट्रीम डिस्ट्रो से अपडेट के साथ ही जाएं।
परिदृश्यों को बनाए रखें :-)
मैक / विंडोज उपयोगकर्ताओं के विपरीत, लिनक्स जो प्रदान करता है वह विकल्प है। इसे आसानी से लेने या अपनी आवश्यकताओं के लिए सिस्टम को ऑप्टिमाइज़ करने का विकल्प।
अधिकांश उपयोगों के लिए जेनेरिक कर्नेल लगभग किसी भी हार्डवेयर के लिए अच्छे हैं। इसके अतिरिक्त वे आम तौर पर (एड) वितरण-विशिष्ट पैच होते हैं, ताकि आपके अपने कर्नेल का संकलन (समस्या) हो सकती है।
अपने कर्नेल को संकलित करने के लिए अनुनाद हैं:
अगर मैं स्रोत-आधारित डिस्ट्रो का उपयोग नहीं कर रहा था, तो मैं कर्नेल का संकलन नहीं करूंगा।
मुझे आश्चर्य है कि किसी ने कस्टम कर्नेल के संकलन के लिए इस कारण का उल्लेख नहीं किया है:
क्योंकि आप किसी भिन्न C / c ++ कंपाइलर का उपयोग करना चाहते हैं। लिनक्स कर्नेल को संकलित करने के लिए जीसीसी बहुत अच्छा है। लेकिन वहाँ बाहर बहुत बेहतर संकलक हैं! GCC के अनुकूलन इंटेल के C / C ++ कंपाइलर से थोड़ा पीछे हैं। और Intel प्रदर्शन प्राइमेटिव लाइब्रेरीज़ और vtune टूल सप्लाई करता है, जो दोनों ही उच्च-प्रदर्शन वाले लिनक्स कर्नेल के निर्माण में अपरिहार्य हैं। आप केवल GCC और G ++ के साथ ही प्राप्त कर सकते हैं। व्यावहारिक रूप से कोई फर्क नहीं पड़ता कि आप क्या करते हैं परिणाम संकलक द्वारा सीमित होगा। इसलिए, मैं इंटेल कंपाइलर और प्रदर्शन पुस्तकालयों का उपयोग करता हूं यह थोड़ा बड़ा है - 1.5 जीबी डाउनलोड, लेकिन यह एक अच्छा विचार देता है कि सभी एक अच्छे कंपाइलर में क्या निहित है।
इंटेल का C / C ++ कंपाइलर गैर-व्यावसायिक उपयोग के लिए मुफ्त उपलब्ध है। लेकिन यह गैर-वाणिज्यिक लाइसेंस इंटेल सी + + कंपाइलर डाउनलोड पृष्ठ है जो इंटेल की वेबसाइट को खोजना आसान है। मैं आमतौर पर किसी चीज के लिए जीसीसी / जी ++ का उपयोग नहीं करता हूं। और आपको एक प्रोग्रामर होने की आवश्यकता नहीं है। आप बस अपना वातावरण सेट करें और इंटेल के कंपाइलर को इंगित करने के लिए मेक फाइल में दो लाइनें बदलें।
तब आप कुछ गंभीर गति प्राप्त कर सकते हैं!
What are the pros and cons of compiling your own kernel?
विपक्ष से पूछें = आसान नहीं, कई स्थितियों में कोई मूल्य नहीं जोड़ा गया। पेशेवरों = सुरक्षा, प्रदर्शन, यदि आप जानते हैं कि आप क्या कर रहे हैं, तो उदाहरण के लिए एनएएस डिवाइस, लिनक्स का उपयोग करके कुछ हार्डवेयर काम करते हैं और नेटवर्किंग और ग्राफिक क्षमता रखते हैं।