आमतौर पर कर्नेल स्रोत /usr/src/linux-2.6.x/
में संग्रहीत किया जाता है। यदि मैं मॉड्यूल के स्रोत को संशोधित करता हूं तो पूरे कर्नेल को पुन: संकलित करने से बचने के लिए, मैं केवल उस मॉड्यूल को कैसे पुन: संकलित कर सकता हूं?केवल एक कर्नेल मॉड्यूल को पुन: संकलित करने के लिए कैसे?
उत्तर
स्विच अपने स्रोत पेड़ की जड़ निर्देशिका के लिए और निम्नलिखित कमांड चलाएँ:
$ make modules SUBDIRS=drivers/the_module_directory
और संकलित मॉड्यूल स्थापित करने के लिए:
$ make modules_install SUBDIRS=drivers/the_module_directory
नोट: lunakid उल्लेख के रूप में, बाद के आदेश पहले मॉड्यूल का निर्माण कर सकता है, इसलिए सावधान रहें।
आप पैरामीटर के रूप में मॉड्यूल नाम या मॉड्यूल निर्देशिका के पथ को पारित कर सकते हैं।
make path/to/the/module/itself.ko
make path/to/the/module/directory/
मेकअप पथ///मॉड्यूल के लिए/itself.ko बहुत अधिक समय मेकअप मॉड्यूल subdirs = निर्देशिका/पथ की तुलना में (3 minuts बनाम 5 सेकंड) लेता है। दरअसल, केवल पथ/से/निर्देशिका बनाने के लिए काम नहीं लगता है, यह हमेशा "कुछ भी करने के लिए नहीं" कहता है, लेकिन मैंने कोड को संशोधित किया –
कर्नेल संस्करणों 3.xx और 4.xx प्रक्रिया को और अधिक जटिल हो जाता है (लेकिन एक उम्मीद नहीं है, इसलिए रखने के पढ़ने) के बाद से:
make distclean
यदि आपके पास नहीं है बस एक नया स्रोत क्लोन किया गया लेकिन- मॉड्यूल स्रोत के लिए कहीं नया फ़ोल्डर बनाएं (उदाहरण: अतिरिक्त) और केवल स्रोत कॉपी करें इस नए फ़ोल्डर में बनाने के लिए आवश्यक मॉड्यूल से संबंधित फ़ाइलों (कर्नेल स्रोत या कहीं और से)
- प्रतिलिपि
/boot/config-``uname -r
फ़ाइल (उदाहरण: /boot/config-4.8.0-46-generic) कर्नेल स्रोत फ़ोल्डर में फ़ाइल .config औरmake oldconfig
चलाएं। मॉड्यूल कर्नेल स्रोत के अंतर्गत आता है, तो सत्यापित करें अगर यहmake menuconfig
फोन करके सक्षम किया गया है, मॉड्यूल के लिए खोज और पत्र 'एम' को लागू करने के यदि आवश्यक हो तो द्वारा - गिरी स्रोत जड़ Makefile सही संस्करण घटकों मिलान के साथ बदल दिया है वर्तमान में चल रहे एक (अगर यह सटीक मेल खाता है आप
make kernelversion
साथ सत्यापित कर सकते हैंuname -r
एक) - वहाँ
make scripts
make prepare
औरmake modules_prepare
साथ भी पहले स्क्रिप्ट का निर्माण करने के लिए एक मजबूत सुझाव दिया गया वास्तविक मॉड्यूल से पहले निष्पादित किया जाना है बनाएं में: (
/usr/src/linux-headers-3.13.0-117-generic/Module.symvers उदाहरण)
- Module.symvers कर्नेल संस्करण
/usr/src/linux-headers-``uname -r``/Module.symvers
चल वाली संबंधित फ़ोल्डर लक्ष्य प्रणाली हेडर से नकल किया जाना है मॉड्यूल संकलन के लिए तैयार किए गए नए बनाए गए मॉड्यूल स्रोत फाइल फ़ोल्डर (उदाहरण में अतिरिक्त)। - निम्न पंक्ति मॉड्यूल स्रोत संकलन फ़ोल्डर होने के अंदर नए Makefile बनाएँ:
obj-y += <module_source_file_name>.o
या यदि स्रोत कोड जटिल है, here - से मार्गदर्शन का उपयोग उसके बाद ही यह सही समय
make -C <kernel source path> M=the_module_directory
साथ मॉड्यूल का निर्माण करने की है (उदाहरण:make -C . M=extra/
) - उपयोग आदेश
modprobe --dump-modversion <module_name>.ko
Module.symvers में मॉड्यूल एपीआई और संबंधित मानों निर्यात के बीच सीआरसी मैच सत्यापित करने के लिए - सत्यापित करें कि kernel.release फ़ाइल सामग्री वर्तमान चल रहे संस्करण के शीर्षकों से बिल्कुल मेल खाता है। यदि आप अंत में + खोज लेंगे, तो इसका मतलब है कि आप गिट क्लोन किए गए स्रोत को संकलित कर रहे हैं और आपके प्रयोगात्मक संशोधनों ने अंत में + जोड़कर स्थानीय सिस्टम स्ट्रिंग को समझौता करने के लिए सिस्टम बनाया है।
- अगर केवल +kernel.release संग्रहीत मूल्य की पूंछ में पाया गया है और यह लक्ष्य चल रहा कर्नेल का सही नाम के साथ एक बेमेल है,
समाधान निम्नलिखित किया जाएगा:
अपने सभी परिवर्तन बल रिलीज टैग git tag -a <tag version> -f
कमांड के साथ अपने संशोधनों को ऊपर शिफ्ट करने के लिए प्रतिबद्ध हैं। फिर चरण 8
- 1. कर्नेल मॉड्यूल को संकलित करना
- 2. एकाधिक .c फ़ाइलों के साथ कर्नेल मॉड्यूल को संकलित करने के लिए मेकफ़ाइल को व्यवस्थित करने के लिए कैसे करें?
- 3. गैर कर्नेल हेडर समेत लिनक्स कर्नेल (2.6) मॉड्यूल संकलित करें
- 4. कैसे एक असफल कर्नेल मॉड्यूल
- 5. एक कर्नेल मॉड्यूल
- 6. लिनक्स कर्नेल अपग्रेड के बाद मुझे vmware कर्नेल मॉड्यूल को फिर से संकलित करने की आवश्यकता क्यों है?
- 7. जीडब्ल्यूटी मॉड्यूल को पुन: संकलित किया जाना चाहिए (पुनः) REDUX
- 8. कर्नेल मॉड्यूल
- 9. लिनक्स कर्नेल मॉड्यूल को कैसे कोड करें?
- 10. कर्नेल मॉड्यूल syscalls की निगरानी करने के लिए?
- 11. लोड करने योग्य कर्नेल मॉड्यूल के लिए डीबग-जानकारी
- 12. कर्नेल मॉड्यूल
- 13. एक कर्नेल के हिस्से के रूप में एक ड्राइवर को संकलित करना, मॉड्यूल के रूप में नहीं
- 14. एक जावा फ़ाइल को संकलित करने के लिए कैसे करें
- 15. केवल आवश्यक मॉड्यूल को बढ़ावा देने के लिए कैसे?
- 16. MySQL: कैसे "को पुन: व्यवस्थित करने के लिए" एक मेज
- 17. जेएक्सबी - पुन: उपयोग के लिए मॉड्यूल बनाना
- 18. लिनक्स कर्नेल मॉड्यूल
- 19. लिनक्स कर्नेल - मॉड्यूल
- 20. संशोधित कर्नेल मॉड्यूल को फिर से लोड करने के लिए कैसे करें
- 21. कर्नेल 32.dll और user32.dll पर केवल निर्भरता के साथ एक सी ++ प्रोग्राम संकलित करें?
- 22. क्या मैं एक मॉड्यूल के साथ एक लिनक्स कर्नेल फ़ंक्शन को प्रतिस्थापित कर सकता हूं?
- 23. एक लिनक्स कर्नेल मॉड्यूल में फ़ंक्शन को परिभाषित करने और इसे किसी अन्य में उपयोग करने के लिए कैसे करें?
- 24. संकलन त्रुटि: कर्नेल मॉड्यूल
- 25. मैं आरवीएम के साथ रूबी को कैसे पुन: संकलित करूं?
- 26. क्या एक सामान्य .js फ़ाइल में CommonJS मॉड्यूल को संकलित करने के लिए उपकरण हैं?
- 27. यह निर्धारित करने के लिए कि क्या एक विशिष्ट मॉड्यूल लिनक्स कर्नेल
- 28. पुन: प्रयोज्य मॉड्यूल बनाने
- 29. कैश किए गए कर्नेल को पुन: संकलित करने के लिए मैं ऐप्पल के ओपनसीएल कंपाइलर को कैसे मजबूर कर सकता हूं?
- 30. कैसे एक कर्नेल मॉड्यूल में शारीरिक और तार्किक कोर संख्या को खोजने के लिए?
से बस अपने मॉड्यूल का पुनर्निर्माण करें (बस सुनिश्चित करें कि आप इसे मेरे विपरीत पेड़ की जड़ में चलाते हैं।)) –
@ लुनकीड अच्छा बिंदु;) हालांकि यह स्पष्ट होना चाहिए कि 'सब्बिर्स' सीडब्ल्यूडी के सापेक्ष है : पी –
यह निश्चित रूप से स्पष्ट है, लेकिन फिर भी मुझे अंत में वाकॉम ड्राइवर डीआईआर में बैठे पाया। :) बस मेरे कदम नहीं देखा। साथ ही, क्या आप कृपया अपने उत्तर में जोड़ सकते हैं कि यह ** स्थापित ** भी हो सकता है, वैसे ही, 'modules_install SUBDIRS = ...' डाल दें। यह लगभग निश्चित रूप से अगला कदम है, और यह तुरंत तुच्छ नहीं हो सकता है (भले ही ऐसा लगता है, उदाहरण के बाद मैंने इसे व्यर्थ में कुछ मिनट बिताए ... :))। Thx, चीयर्स! –