एक लिनक्स कर्नेल इतना छोटा कैसे हो सकता है?


54

एक साधारण स्थिर 3 * कर्नेल अब लगभग 70 mb है। लेकिन सॉफ्टवेयर और अन्य सामानों के साथ 30-10 mb के लिनेक्स डिस्ट्रीब्यूशन बहुत कम हैं।

इन डिस्ट्रोन्स में लिनेक्स कर्नेल इतना छोटा कैसे हो सकता है? क्या केवल अनावश्यक मॉड्यूल और ड्राइवर को अलग करने से नाटकीय रूप से आकार कम हो सकता है? कर्नेल आकार को कम करने के लिए और क्या किया जाता है?


3
एक अन्य विकल्प संकलन करते समय आकार अनुकूलन का उपयोग करना है, लेकिन मुझे यकीन नहीं है कि यह कितना बड़ा प्रभाव बना सकता है।
आंद्रेजाको

5
"लीनुस कॉल लिनक्स 'फूला हुआ और विशाल'" theregister.co.uk/2009/09/22/linus_torvalds_linux_bloated_huge
अकी

1
@AndrejaKo - एक बहुत। (यदि आप छोटे आकार के लिए जाते हैं।)
शकी

19
70 एमबी स्रोत का आकार है। एक मानक संकलित और संकुचित कर्नेल लगभग 2 एमबी है, 10 एमबी जैसे मॉड्यूल।
ott--

1
हां, वास्तव में, इसका 3.6 एमबीटी जबकि इनट्रामर्फ्स मेरे डिस्ट्रो में 21mb है।
puzzled tux

जवाबों:


36

हाँ। यदि आप उन्हें स्ट्रिप करते हैं (केवल उन चीज़ों को संकलित / बनाते हैं जिनकी आपको आवश्यकता है), कर्नेल को संपीड़ित करें (आकार के लिए ऑप्टिमाइज़ करें) ... इसका परिणाम इतने छोटे कर्नेल में होगा। आप लक्षित प्रणाली के लिए और भी छोटे बना सकते हैं। जैसे मैं अपने पीसी को जानता हूं, मैं अपना सामान जानता हूं। इसलिए मुझे सिर्फ वही चाहिए जो मुझे चाहिए। जैसे मेरे अपने SATA ड्राइवर, USB के लिए ड्राइवर इत्यादि और कुछ नहीं। कोई वेबकैम नहीं, कोई पुराना आईडीई ड्राइव नहीं, कुछ भी नहीं।

इसके अलावा: आपके सामने आने वाले बड़े लोग कर्नेल हैं (जिनका उपयोग करने की आवश्यकता नहीं है)। यहां तक ​​कि डेस्कटॉप वाले भी (अधिकांश समय, मॉड्यूल के रूप में) बहुत सारे अनावश्यक सामान होते हैं। लेकिन newbies को उम्मीद है कि हर तरह का हार्डवेयर वे प्लग-इन करेंगे।

(ध्यान दें कि, मॉड्यूल तब तक लोड नहीं होंगे जब तक उन्हें ज़रूरत नहीं है। 3 राज्य हैं:
[ ]- संकलित नहीं किया जाएगा, आपके कर्नेल का हिस्सा नहीं होगा।
[M]- एक मॉड्यूल के रूप में संकलित किया जाएगा।
(आप इसे modprobe कर सकते हैं । , या आपका सिस्टम जरूरत पड़ने पर इसे ऑटो-लोड करेगा।
सिस्टम, यूजरलैंड पर निर्भर करता है।)
[X]- इसे कर्नेल में संकलित किया जाएगा और हमेशा मौजूद रहेगा।

छोटे कर्नेल के साथ विकृत:


बस एक छोटा सा जोड़ - [X] का अर्थ है कि इसे कर्नेल में संकलित किया जाएगा , इस कारण यह हमेशा लोड रहता है।
लॉरेंस

20

टॉम के रूट-बूट , म्यूलिंक्स , डाइट-राउटर , (अब डिफंक्ट) LOAF और कई अन्य जैसे शुरुआती लिनक्स वितरण अब विदा हो गए, सभी ने एक काम कर रहे लिनक्स सिस्टम को एक या दो 1.44 एमबी डिस्कसेट पर फिट किया।

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

देखें: कर्नेल आकार ट्यूनिंग गाइड - eLinux.org

यदि आप Linux_tiny.pdf पढ़ते हैं तो आप इसे देखेंगे

  • ऐतिहासिक 0.99pl15 कर्नेल: स्लैकवेयर 1.1.2, 1994 301K
  • फेडोरा कोर 2 1.2 मीटर
  • SuSE 9.1 1.5M
  • 2.6.5-small1 टेस्ट कॉन्फिग: IDE, ext2, TCP, NIC 363K

9

डिफ़ॉल्ट कर्नेल कॉन्फ़िगरेशन संभव के रूप में कई हार्डवेयर का समर्थन करने के लिए कॉन्फ़िगर किया गया है। डिफ़ॉल्ट कॉन्फ़िगरेशन के साथ एक गैर-स्ट्रिप्ड कर्नेल 1897996 kB (कर्नेल + मॉड्यूल सहित) के आकार का था। जब कई अनावश्यक ड्राइवर और विकल्प छीन लिए जाते हैं (यदि मुझे एचपी मॉड्यूल की आवश्यकता होगी, अगर मेरे पास एक क्लीवो नोटबुक है), तो इसके परिणामस्वरूप 892892 kB का आकार होता है जो स्टॉक कर्नेल की तुलना में 53% की कमी है।

कर्नेल मॉड्यूल स्थापित करते समय, INSTALL_MOD_STRIP=1विकल्प जोड़ें । यह सभी डिबगिंग प्रतीकों को छीन लेगा और मेरे लिए आकार को 92% कम कर देगा (892892 kB से 69356 kB तक)। ध्यान दें कि यह केवल स्थापित किए जाने वाले मॉड्यूल को प्रभावित करता है न कि कर्नेल (vmlinuz) को:

make INSTALL_MOD_STRIP=1 modules_install

से प्रलेखन / kbuild / kbuild.txt :

INSTALL_MOD_STRIP
--------------------------------------------------
INSTALL_MOD_STRIP, if defined, will cause modules to be
stripped after they are installed.  If INSTALL_MOD_STRIP is '1', then
the default option --strip-debug will be used.  Otherwise,
INSTALL_MOD_STRIP value will be used as the options to the strip command.

3
वाह, 1897996 kB लगभग 2GB है!
netvope

3

अधिकांश प्रमुख डिस्ट्रोस अपनी गुठली को अधिकतम हार्डवेयर समर्थन के साथ कॉन्फ़िगर करते हैं, इसलिए यह अधिकांश कंप्यूटरों और कुछ भी जिसे आप बाद में प्लग करते हैं, के साथ बॉक्स से बाहर काम करेंगे। वे एक initrd सिस्टम का भी उपयोग करते हैं जिसकी ज्यादातर मामलों में आवश्यकता नहीं होती है। कर्नेल कॉन्फ़िगरेशन में विकल्प भी होते हैं जो बिल्ड प्रक्रिया को आकार के लिए अनुकूलित करते हैं, और एक बेहतर (हालांकि धीमी) संपीड़न विधि को भी चुना जा सकता है। अंत में, यदि आप कर्नेल स्रोत कोड के आकार को देख रहे हैं, तो ध्यान रखें कि इसमें x86 / amd64, नेटवर्क प्रोटोकॉल, फ़ाइल सिस्टम और अन्य सुविधाओं से परे कई आर्किटेक्चर का समर्थन भी शामिल है, जिनका आप शायद कभी उपयोग नहीं करेंगे और वह भी विकलांग होना।


1

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


ध्यान दें कि बिजीबॉक्स "रोजमर्रा" सामान की सबसे अधिक देखभाल करता है।
new123456

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