किस डिवाइस ड्राइवर को कर्नेल में बनाया गया है?


14

मैंने हाल ही में एक हार्डवेयर डिवाइस पर एम्बेडेड लाइनक्स की आपूर्ति करने वाले एक विक्रेता को स्थापित किया है। जब मैं lsmodडिवाइस कमांड लाइन पर चला तो प्रतिक्रिया खाली थी। मुझे विश्वास था कि इसका मतलब यह है कि डिवाइस पर चलने वाले हार्डवेयर के लिए ड्राइवरों को .ko फाइलों के बजाय कर्नेल में बनाया गया था। मेरा सवाल यह है: यह प्रक्रिया कैसे होती है?

लोकप्रिय हार्डवेयर के लिए समर्थन धीरे-धीरे बाद के संस्करणों में कर्नेल में एकीकृत किया जाता है। क्या .ko फाइल का उपयोग नए हार्डवेयर का उपयोग करने के लिए किया जाता है जिसमें रिलीज़ के समय कर्नेल एकीकृत ड्राइवर समर्थन नहीं होता है? मेरे सीमित ज्ञान में मुझे लगा कि सभी हार्डवेयर ड्राइवर .ko फ़ाइलों के रूप में थे लेकिन स्पष्ट रूप से यह गलत है।

मैं पूरी प्रक्रिया से थोड़ा भ्रमित हूं और स्पष्टीकरण के लिए आभारी रहूंगा क्योंकि मुझे लगता है कि मैं स्थिति को गलत तरीके से देख रहा हूं।


जवाबों:


10

कोर ड्राइवर जिन्हें कर्नेल के लोडिंग के लिए महत्वपूर्ण माना जाता है, वे आमतौर पर कर्नेल में निर्मित होते हैं, जबकि अन्य हार्डवेयर ड्राइवर आदि को मॉड्यूल या .ko फ़ाइलों के रूप में देखा जाता है।

.Ko मॉड्यूल आमतौर पर के तहत जमा हो जाती है /libअपने रूट विभाजन पर निर्देशिका। इनमें से किसी का उपयोग करने के लिए, कर्नेल को पहले अंतर्निहित स्टोरेज डिवाइस का पता लगाने और उस तक पहुंचने में सक्षम होना चाहिए और फिर उसके फाइल सिस्टम तक पहुंचना चाहिए। इसलिए यह मान लेना सुरक्षित है कि SATA / SCSI के बिना एक कर्नेल और ext2 / 3/4 समर्थन अंतर्निहित-यह वास्तव में बूट नहीं होगा)

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

यदि आप अपना कर्नेल बनाते हैं, तो आप ऐसा कर सकते हैं:

यहां छवि विवरण दर्ज करें

  • उपरोक्त स्क्रीनशॉट में, *एक अंतर्निहित ड्राइवर को Mइंगित करता है , जबकि एक मॉड्यूल को इंगित करता है।
  • लूपबैक डिवाइस का समर्थन, जो अक्सर एक सिस्टम को बूट करने के लिए आवश्यक होता है, डिफ़ॉल्ट रूप से अंतर्निहित होता है।
  • कम गति वाले USB ड्राइवर (USB 1.0) भी डिफ़ॉल्ट रूप से अंतर्निहित होते हैं जिससे आप USB स्टिक को बंद कर सकते हैं, लेकिन यहां मैंने इसे एक मॉड्यूल में बदल दिया है।

धन्यवाद जो बहुत मदद करता है। मुझे लगता है कि मुझे इस बात की बेहतर समझ होगी जब मैं अंततः अपने लिए स्क्रैच से एक कर्नेल का निर्माण करता हूं।
गणितज्ञ

3

कर्नेल को संकलित करते समय , आप कॉन्फ़िगर करते हैं कि कौन से घटक स्थापित हैं। इतना ही नहीं, लेकिन आप चुने जाते हैं कि क्या वे कर्नेल में निर्मित हैं या नहीं या यदि वे एक मॉड्यूल हैं

उदाहरण के लिए, कई लोग अपने बूट विभाजन पर ext2 फाइल सिस्टम का उपयोग करते हैं । इस वजह से, कर्नेल को बूट समय पर ext2 फाइल सिस्टम पढ़ने में सक्षम होना चाहिए। इसे पूरा करने के लिए, ext2 मॉड्यूल को कर्नेल में ही बनाया गया है।

अब, उपलब्ध मॉड्यूल की मात्रा की कल्पना करें। यह समझ में नहीं आता है कि उन सभी को आपके कर्नेल में बनाया गया है, क्या यह होगा? यही कारण है कि आप इन्हें अलग .ko मॉड्यूल के रूप में बना सकते हैं और इच्छाशक्ति पर लोड कर सकते हैं।


1
हाँ आपका अंतिम पैराग्राफ जो मेरे प्रश्न को ईमानदार होने के लिए प्रेरित करता है। उत्तर के लिए धन्यवाद
गणितज्ञ

1

ये इस बात पर निर्भर करता है कि आपने लिनक्स कर्नेल के अपने निर्माण को कैसे कॉन्फ़िगर किया है।

एक संकलन प्रक्रिया के भीतर आप आमतौर पर कर सकते हैं:

  • मॉड्यूल समर्थन के साथ या बिना कर्नेल संकलित करें (अक्सर यह मॉड्यूल समर्थन के साथ आता है)
  • मॉड्यूल के रूप में या कर्नेल में सॉफ्टवेयर के बिल्ट-इन टुकड़े के रूप में ड्राइवर संकलित करें

यह समझने के लिए कि एक .ko फ़ाइल /programming/10476990/difference-between-o-and-ko-file के लिए क्या है

आपके पास एक खाली आउटपुट होने lsmodका कारण यह है कि आपके पास एक अखंड कर्नेल है।

इस कमांड को चलाने से आपके सभी मॉड्यूल (यदि वे मौजूद हैं) को सूचीबद्ध करने का एक त्वरित तरीका है

find /lib/modules/*/ -type f -iname '*.ko' | less

के उपयोग पर ध्यान दें less, आप हर उस पेजर का उपयोग कर सकते हैं, जिसे आप चाहते हैं या जहां आप चाहते हैं आउटपुट को पुनर्निर्देशित करें।


तो मॉड्यूल समर्थन के बिना कॉन्फ़िगर किए गए कर्नेल पर (जैसा कि मेरा प्रतीत होता है) मैं अतिरिक्त हार्डवेयर का उपयोग करने के लिए .ko फ़ाइलों के रूप में किसी भी ड्राइवर को स्थापित करने में असमर्थ होगा?
गणितज्ञ

हां, मूल रूप से आपको इसे स्रोत से फिर से जोड़ना होगा, यदि आप ड्राइवरों को संपादित करना चाहते हैं और / या उन्हें जोड़ना चाहते हैं, तो शायद उसी .configफ़ाइल का उपयोग करें और इसे आवश्यकतानुसार संशोधित करें।
user827992

इसलिए ऐसा करने के लिए मुझे विक्रेता से कर्नेल स्रोत प्राप्त करने की आवश्यकता होगी, इसे .config फ़ाइल में सही संशोधनों के साथ स्वयं संकलित करें फिर मैं अन्य ड्राइवरों को स्थापित करना अच्छा होगा?
गणितज्ञ

निर्भर करता है, अगर उसने एक वेनिला कर्नेल (मूल स्रोत कोड से अधिक कुछ भी नहीं) का उपयोग किया है, तो आप सिर्फ .config के साथ ठीक हैं और आप अपने पीसी के साथ एक ही कर्नेल को पुन: उत्पन्न कर सकते हैं, हालांकि अगर उसने एक वेनिला कर्नेल + कुछ पैच या संशोधनों का उपयोग किया है; आपको इस अतिरिक्त जानकारी की आवश्यकता है, एक कस्टम मेकफाइल को मानक चरचा के लिए और मानक निर्माण प्रक्रिया में सामान्य रूप से किसी भी अन्य संशोधन के रूप में एक प्रासंगिक चर माना जा सकता है।
user827992

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

0

फ़ाइल / लीबी / मॉड्यूल / $ (uname -r) /modules.builtin की सामग्री देखें

एक विशिष्ट मॉड्यूल की खोज करना

grep <module> /lib/modules/$(uname -r)/modules.builtin

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

modules.builtin
--------------------------------------------------
This file lists all modules that are built into the kernel. This is used
by modprobe to not fail when trying to load something builtin.

??? ओपी क्या करने वाला है यह निश्चित नहीं है। क्या वह टर्मिनल में पहली लाइन चलाने वाला है? यह उत्तर हो सकता है, लेकिन क्या आप कृपया थोड़ा विस्तार करेंगे?
अनाम 2

0
ls /sys/module

लगता है कि सभी अंतर्निर्मित और बाहरी मॉड्यूल शामिल हैं।

लेकिन इसमें कुछ प्रविष्टियाँ शामिल हैं जो वास्तव में मॉड्यूल नहीं हैं: /unix/225706/are-modules-listed-under-sys-module-all-the-loads-modules

TODO: स्रोत को पढ़ें और अधिक सटीक रूप से समझें कि वहां क्या मिलता है।

इस पद्धति का लाभ यह है कि आप कर्नेल कॉन्फिगर को खोजने में सक्षम होने पर निर्भर नहीं होते हैं /bootया नहीं /proc/config.gz

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