2012-07-13 15 views
9

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

तो मैं केवल अपने प्लेटफॉर्म के लिए आवश्यक सामान बनाने के लिए एक तरीका ढूंढ रहा था। "संक्षेप में लिनक्स कर्नेल" के अध्याय 7 और 8 ने हाथ से ऐसा करने का एक अच्छा विवरण दिया। यह एक अच्छा पढ़ा है: http://www.kroah.com/lkn/

लेकिन हालांकि मैं सामान को समझता हूं, फिर भी यह काम करने के लिए बहुत सारे बदलाव हैं।

2.6.32 और बाद में कर्नल ने एक नया लक्ष्य make localmodconfig जोड़ा। जो lsmod के माध्यम से स्कैन करता है और उचित रूप से .config को बदलता है। तो मैंने सोचा कि मुझे अपना "स्वचालन" मिला है। लेकिन इस पर्ल स्क्रिप्ट में कुछ समस्या भी है।

यह धागा समस्याओं का वर्णन करता है: https://bbs.archlinux.org/viewtopic.php?pid=845113

वहाँ भी था एक प्रस्तावित समाधान जो जाहिरा तौर पर अन्य लोगों के लिए काम किया, मेकअप के लक्ष्य का उपयोग करने का सीधे बजाय स्क्रिप्ट चलाने के लिए है।

हालांकि मेरे लिए, स्थानीयmodconfig बिल्कुल काम नहीं करता है। निम्नलिखित की वजह से इसकी:

make clean 
make mrproper 
cp /boo/config-'uname -r' .config 
make localmodconfig 

और यह

vboxguest config not found!! 
nf_defrag_ipv6 config not found!! 
vboxsf config not found!! 
vboxvideo config not found!! 

बात मेरी गिरी विकास के वातावरण के साथ रुकती virtualbox के अंदर है। जब मैंने "वर्चुअलबॉक्स अतिथि जोड़" स्थापित करना चुना था तो ये vbox मॉड्यूल स्थापित किए गए थे।

और नेटफिल्टर मॉड्यूल एक वितरण विशिष्ट मॉड्यूल हो सकता है (नेटफिल्टर मॉड्यूल का लोट मुख्य लाइन कर्नेल का हिस्सा नहीं है, इसलिए यह मेरे लिए कोई झटका नहीं है), जो मेनलाइन कर्नेल में शामिल नहीं है।

अब यह मॉड्यूल इन मॉड्यूल को अनलोड कर रहा है और फिर से प्रयास कर रहा है। लेकिन मैं सोच रहा हूं कि streamline_config.pl के लिए पैच है जो उपयोगकर्ता को कुछ मॉड्यूल को बाहर करने में सक्षम करेगा यदि वह चाहता है। समस्या यह है कि मेरे पास शून्य perl के बारे में ज्ञान है और मुझे यह पसंद है।

तो में अपनी समस्याओं के संक्षेप

  1. पैच streamline_config.pl तो मैं तर्क है जो यह कॉन्फ़िग फ़ाइल प्रसंस्करण से बाहर निकाल देगा के रूप में मॉड्यूल का नाम की एक सूची दे सकते हैं।

    स्क्रिप्ट kernel.org

  2. संपादित करें पर स्थित है: के बारे में पर्ल स्क्रिप्ट नहीं चल रहा सामान निकाला गया। जैसा कि मुगेन केनीची ने बताया (मैं कितना गूंगा हो सकता हूं?)। लेकिन अभी भी localmodconfig स्रोत पेड़ के नीचे कुछ मॉड्यूल कोड नहीं होने के कारण काम नहीं करता है। पैचिंग streamline_config.pl अभी भी वैध आवश्यकता है।

+2

आप नहीं चल सकता 'sh' के साथ एक पर्ल स्क्रिप्ट। 'Perl' आज़माएं और आपको उन' my: आदेश नहीं मिला 'त्रुटियां और इसके बजाय पर्ल त्रुटियां या चेतावनियां नहीं मिलेंगी। –

+0

ऐसा लगता है कि मैं दुनिया में सबसे कमजोर लड़का हूं। मैं यह कैसे कर सकता हूं :) – Aftnix

+0

क्या स्क्रिप्ट वास्तव में असफल हो जाती है? कोड से ऐसा लगता है कि यह सिर्फ त्रुटियों को प्रिंट करता है लेकिन यदि मॉड्यूल का कोड पेड़ में नहीं है तो विफल नहीं होता है। देखें [लाइन 375] (http://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=blob;f=scripts/kconfig/streamline_config.pl;h=bccf07ddd0b67a0e2f761fd5721f274a49bf9bbb ; एचबी = HEAD # l375) –

उत्तर

8

कोई और भी समय निर्माण को कम करने के लिए देख एक न्यूनतम गिरी छवि बनाने की कोशिश, निम्न करना चाहिए:

1) अपने स्रोत पेड़ में कॉपी वितरण कर्नेल config।यह या तो कमान नीचे दिए गए के साथ किया जा सकता है:

$zcat /proc/config.gz > .config 

या

$cp /boot/config-'uname -r' .config 

2) का प्रयोग करें localmodconfig लक्ष्य।

$make localmodconfig 

यह lsmod का उपयोग जो मॉड्यूल इस पल में लोड किए गए हैं खोजने के लिए होगा। फिर यह उन्हें सक्षम करने और दूसरों को अक्षम करने के लिए वितरण के .config के माध्यम से खोज करेगा।

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

कभी-कभी पेड़ मॉड्यूल से बाहर स्थानीयmodconfig विफल होने का कारण बन सकता है। यदि ऐसा है तो आप उस मुद्दे को दो तरीकों से काम कर सकते हैं:

ए) पेड़ मॉड्यूल से बाहर निकलें और make localmodconfig फिर से प्रयास करें। ख) सीधे पर्ल स्क्रिप्ट चलाएं:

$chmod +x script/kconfig/streamline_config.pl 
$perl script/kconfig/streamline_config.pl > .config 

3) स्थापित करें ccache [1]। यह नाटकीय रूप से आपके निर्माण समय में सुधार होगा। यह वस्तुओं को कैश करता है। तो यह बाद के निर्माण को कम करेगा।

यह संभव है कि वितरण की भंडार में सीसीएसी शामिल है ताकि आप इसे apt-get या yum के माध्यम से इंस्टॉल कर सकें। सेंटोस में यह ईपीईएल रेपो में उपलब्ध है। [2]

4) निर्माण काम के लिए संभव के रूप में के रूप में कई कोर दें

$make -j8 CC="ccache gcc" 

मेरे परिणाम हैं:

real 3m10.871s 
user 4m36.949s 
sys 1m52.656s 

[1] http://ccache.samba.org/ [2] http://fedoraproject.org/wiki/EPEL

+1

तुम सिर्फ मेरे। आपकी सलाह के साथ मैं एक साधारण एसईडी-स्क्रिप्ट के साथ सभी सक्रिय मॉड्यूल में संकलन के लिए स्विच कर सकता है (मेरे बच्चे मेरी टाइपिंग ☺ के साथ हस्तक्षेप के साथ) config के माध्यम से जा के घंटे बचा लिया। धन्यवाद! 'सीपी .config .config- वर्ष; localmodconfig बनाते हैं; मैं में $ (ग्रेप = मी .config | xargs) के लिए; एसईडी करना "s/$ i/$ ($ गूंज मैं | एसईडी एस/= एम/= y /) /" मैं .config- वर्ष, सीपी .config की उम्र में .config; –

+1

अच्छा पता करने के लिए done' कि यह आप में मदद की। – Aftnix

+0

'स्क्रिप्ट' नहीं 'script' में streamline_config.pl स्क्रिप्ट नहीं है? –

संबंधित मुद्दे