क्या पूरे लिनक्स कर्नेल के बजाय एक चालक को अकेले संकलित किया जा सकता है?


0

मैंने अपने लिनक्स मशीन पर धारावाहिक ड्राइवर में कुछ बदलाव किए। मैं मॉड्यूल संकलित करने और इसे फिर से लोड करने की कोशिश कर रहा हूं, लेकिन यह कुछ त्रुटियों को फेंकता है। इसके बजाय, अगर मैं पूरे कर्नेल को फिर से जोड़ देता हूं तो यह ठीक काम करता है।

क्या धारावाहिक चालक में मेरे परिवर्तन करना संभव है, और केवल उस मॉड्यूल को संकलित करना और उसमें लोड करना है?

धन्यवाद


कौन सी त्रुटियां फेंकती हैं? क्या यह काम करता है यदि आप कर्नेल को संकलित करते हैं, तो ड्राइवर को एक तुच्छ परिवर्तन करें और फिर उसकी निर्देशिका में सीडी और संकलन करें? (कर्नेल वाइड किए बिना पहले साफ करें!)
Hennes

मैंने /drivers/usb/serial/usb_wwan.c में कुछ बदलाव किए हैं - मैं इस मॉड्यूल को कैसे पुन: व्यवस्थित कर सकता हूं?
user791953

कर्नेल 1.3 युग में वापस (जब 2.0 कर्नेल अभी नए थे और मैं लिनक्स के लिए एक फायरवायर ड्राइवर लिख रहा था (नहीं, जारी नहीं किया गया, केवल फिलिप्स नेटलाब)) यह सिर्फ एक cd /usr/src/linux/drivers था ।../ कुछ / और ए make firewire.c (जाहिर है कि आपका नाम अलग होगा, लेकिन ls आपका मित्र है)
Hennes

आप इसे recompile नहीं किया था?
user791953

मैंने संपादित फ़ाइल शीर्ष में आवश्यक ड्राइवरों (उनमें से 3 परतें & lt; स्ट्राइक & gt; बेशर्म & lt; / स्ट्राइक & gt; एससीएसआई सबसिस्टम के काम करने के तरीके के आधार पर शामिल हैं। IEEE1394 नेट, 1394 आधार, 1394 AIC5800 ड्राइवर) शामिल हैं।
Hennes

जवाबों:


0

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

अब आपको क्या करने की आवश्यकता है:

sudo make prepare 

जारी करने के बाद

sudo make config 

या

sudo make oldconfig

मुझे आप चरण दर चरण चरण दें (गंदे तरीके से FYI करें :)

>cd /usr/src/linux-source-X.XX.X

>sudo cp /usr/src/linux-headers-`uname -r`/Module.symvers .
>sudo cp /boot/config-X.xx.x-xx-YYYY .config

ऊपर दिए गए चरण पूर्ण कर्नेल या मॉड्यूल केवल mak को संकलित करने के लिए समान हैं। अब यदि आपको केवल मॉड्यूल बनाने की आवश्यकता है तो अपने बनाना आदेश 'तैयार' आवश्यक परिवर्तन के साथ खुद को बनाने के लिए लक्ष्य पर मॉड्यूल के लिए लिब / कॉन्फ़िगर फ़ाइलों को स्वचालित रूप से इंटरलिंक किया गया। दो कमांड बलो आज़माएँ:

>sudo make -C  /usr/src/linux-headers-`uname -r`/ prepare
>sudo make -C /usr/src/linux-headers-`uname -r`/ M=/usr/src/linux-source-X.xx.X/drivers/directory/of/modules/you/compiling/only prepare modules

जहां तक ​​मुझे जोड़कर याद है 'एम' स्विच बताएं कि आवश्यक आवश्यक / हेडर फ़ाइलों के साथ 'तैयारी' करने से पहले स्रोत की निर्देशिका के लिए मॉड्यूल संकलित करें।

इस बिंदु पर आशा है कि अगर सब कुछ ठीक से किया और बिना किसी त्रुटि के बाहर निकलें। अब आपके पास पहले से ही अपने सिस्टम के मॉड्यूल पथ पर स्थापित करने के लिए तैयार your_module.ko है।

प्रयत्न:

>sudo make -C /usr/src/linux-headers-`uname -r`/ M=/usr/src/linux-source-X.xx.X/drivers/directory/of/modules/you/compiling/only modules_install 

या

sudo make -C / usr / src / linux-headers- uname -r / M = / usr / src / linux-source-X.xx.X / ड्राइवर / निर्देशिका / / मॉड्यूल / आप / संकलन / केवल स्थापित करें

>depmod -a

उम्मीद है कि आपका मॉड्यूल अब इसके लिए तैयार है

>modeprob your_mod 

आदेश

यदि आप ध्यान से मॉड्यूल बनाते समय कमांड द्वारा बनाए गए अपने एरर मैसेज को देखते हैं, तो आपको स्रोत सिंटैक्स / मिशन लीब फाइल पर ईथर की त्रुटि की जानकारी मिलेगी या यह अन्य निर्भरता जैसे कि लापता निर्भरता मॉड्यूल / स्रोत को विफल कर रहा है।

मुबारक संकलन :)

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