लिनक्स / यूनिक्स कमांड: Insmod

लिनक्स / यूनिक्स कमांड insmod चल रहे कर्नेल में लोड करने योग्य मॉड्यूल स्थापित करता हैInsmod कर्नेल की निर्यातित प्रतीक तालिका से सभी प्रतीकों को हल करके एक मॉड्यूल को चल रहे कर्नेल में जोड़ने का प्रयास करता है।

यदि मॉड्यूल फ़ाइल नाम निर्देशिका या एक्सटेंशन के बिना दिया जाता है , तो insmod कुछ सामान्य डिफ़ॉल्ट निर्देशिकाओं में मॉड्यूल की खोज करेगा। पर्यावरण परिवर्तनीय MODPATH का उपयोग इस डिफ़ॉल्ट को ओवरराइड करने के लिए किया जा सकता है। यदि मॉड्यूल कॉन्फ़िगरेशन फ़ाइल जैसे /etc/modules.conf मौजूद है, तो यह मोडपाथ में परिभाषित पथ को ओवरराइड कर देगा

पर्यावरण परिवर्तक MODULECONF का उपयोग डिफ़ॉल्ट /etc/modules.conf (या /etc/conf.modules (बहिष्कृत) से भिन्न कॉन्फ़िगरेशन फ़ाइल का चयन करने के लिए भी किया जा सकता है। यह पर्यावरण चर उपरोक्त सभी परिभाषाओं को ओवरराइड करेगा।

जब पर्यावरण परिवर्तक UNAME_MACHINE सेट किया जाता है, तो मॉड्यूल्स मशीन फ़ील्ड के बजाय uname () syscall से इसके मान का उपयोग करेगा। यह मुख्य रूप से उपयोग होता है जब आप 32-बिट उपयोगकर्ता स्थान में 64-बिट मॉड्यूल संकलित कर रहे हैं या इसके विपरीत, मॉड्यूल के प्रकार पर UNAME_MACHINE सेट करें। वर्तमान मॉड्यूल मॉड्यूल के लिए पूर्ण क्रॉस बिल्ड मोड का समर्थन नहीं करते हैं, यह होस्ट आर्किटेक्चर के 32- और 64-बिट संस्करणों के बीच चयन करने के लिए सीमित है।

विकल्प

-e persist_name , --persist = persist_name

निर्दिष्ट करता है कि मॉड्यूल के लिए कोई निरंतर डेटा लोड पर पढ़ा जाता है और जब मॉड्यूल के इस तत्कालता को अनलोड किया जाता है तब लिखा जाता है। यदि मॉड्यूल का कोई लगातार डेटा नहीं है तो यह विकल्प चुपचाप अनदेखा किया जाता है। निरंतर डेटा केवल इन्समोड द्वारा पढ़ा जाता है यदि यह विकल्प मौजूद है, डिफ़ॉल्ट रूप से insmod लगातार डेटा संसाधित नहीं करता है।

एक शॉर्टेंड फॉर्म के रूप में , -e "" (एक खाली स्ट्रिंग) को मॉड्यूल.कॉफ़ में परिभाषित किए गए persistdir के मान के रूप में इन्फॉर्म द्वारा व्याख्या किया जाता है , इसके बाद मॉड्यूल खोज पथ से संबंधित मॉड्यूल के फ़ाइल नाम के बाद यह पाया जाता है, किसी भी से कम पिछला ".gz", ".o" या ".mod"। यदि modules.conf " persistdir = " निर्दिष्ट करता है (यानी persistdir एक खाली फ़ील्ड है) तो यह शॉर्टेंड फ़ॉर्म चुपचाप अनदेखा किया जाता है। ( Modules.conf देखें (5)।)

-एफ , - बल

मॉड्यूल को लोड करने का प्रयास करें भले ही चल रहे कर्नेल का संस्करण और कर्नेल का संस्करण जिसके लिए मॉड्यूल संकलित किया गया था, मेल नहीं खाता है। यह केवल कर्नेल संस्करण जांच को ओवरराइड करता है, इसका प्रतीक नाम चेक पर कोई प्रभाव नहीं पड़ता है। यदि मॉड्यूल में प्रतीक नाम कर्नेल से मेल नहीं खाते हैं तो मॉड्यूल को लोड करने के लिए इंसोड को मजबूर करने का कोई तरीका नहीं है।

-एच , --help

विकल्पों का सारांश प्रदर्शित करें और तुरंत बाहर निकलें।

-के , --autoclean

मॉड्यूल पर ऑटो-क्लीन ध्वज सेट करें। इस ध्वज का उपयोग कर्नेल (8) द्वारा उन मॉड्यूल को हटाने के लिए किया जाएगा जिनका उपयोग कुछ समय में नहीं किया गया है - आमतौर पर एक मिनट।

-एल , --lock

उसी मॉड्यूल के एक साथ लोड को रोकने के लिए झुंड (2) का प्रयोग करें।

-एम , - मैप

स्टडआउट पर एक लोड मैप आउटपुट, कर्नेल पैनिक की स्थिति में मॉड्यूल को डीबग करना आसान बनाता है।

-एन , - नोलोड

डमी रन, मॉड्यूल को कर्नेल में लोड करने के अलावा सबकुछ करें। अगर एएम या -ओ द्वारा अनुरोध किया जाता है, तो रन एक मानचित्र या ब्लॉब फ़ाइल का उत्पादन करेगा। चूंकि मॉड्यूल लोड नहीं होता है, इसलिए वास्तविक कर्नेल लोड पता अज्ञात है, इसलिए नक्शा और ब्लॉब फ़ाइल 0x12340000 के मनमाने ढंग से लोड पते पर आधारित होती है।

-o module_name , --name = module_name

स्रोत ऑब्जेक्ट फ़ाइल के मूल नाम से नाम प्राप्त करने के बजाय मॉड्यूल का स्पष्ट रूप से नाम दें।

-O blob_name , --blob = blob_name

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

-पी , --प्रोब

यह देखने के लिए मॉड्यूल की जांच करें कि इसे सफलतापूर्वक लोड किया जा सकता है या नहीं। इसमें मॉड्यूल पथ में ऑब्जेक्ट फ़ाइल को ढूंढना, संस्करण संख्याओं की जांच करना और प्रतीकों को हल करना शामिल है। यह स्थानान्तरण की जांच नहीं करता है और न ही यह नक्शा या ब्लॉब फ़ाइल उत्पन्न करता है।

-P उपसर्ग , --prefix = उपसर्ग

इस विकल्प का उपयोग एसएमपी या बिगमेम कर्नेल के लिए वर्जन मॉड्यूल के साथ किया जा सकता है, क्योंकि ऐसे मॉड्यूल में उनके प्रतीक नामों में अतिरिक्त उपसर्ग जोड़ा जाता है। यदि कर्नेल प्रतीक संस्करणों के साथ बनाया गया था तो insmod स्वचालित रूप से "get_module_symbol" या "inter_module_get" की परिभाषा से उपसर्ग निकाल देगा, जिसमें से एक मॉड्यूल का समर्थन करने वाले किसी भी कर्नेल में मौजूद होना चाहिए। यदि कर्नेल में कोई प्रतीक संस्करण नहीं है लेकिन मॉड्यूल प्रतीक संस्करणों के साथ बनाया गया था तो उपयोगकर्ता को -P की आपूर्ति करनी होगी।

-q , --quiet

किसी भी अनसुलझे प्रतीकों की एक सूची मुद्रित न करें। संस्करण विसंगति के बारे में शिकायत मत करो। समस्या केवल इन्समोड की निकास स्थिति में दिखाई देगी।

-आर , - जड़

कुछ उपयोगकर्ता गैर-रूट उपयोगकर्ता आईडी के तहत मॉड्यूल संकलित करते हैं और मॉड्यूल को रूट के रूप में स्थापित करते हैं। यह प्रक्रिया गैर-रूट उपयोगकर्ता आईडी के स्वामित्व वाले मॉड्यूल को छोड़ सकती है, भले ही मॉड्यूल निर्देशिका रूट के स्वामित्व में हो। यदि गैर-रूट उपयोगकर्ता आईडी से समझौता किया गया है, तो घुसपैठिया उस उपयोगकर्ता आईडी के स्वामित्व वाले मौजूदा मॉड्यूल को ओवरराइट कर सकता है और रूट एक्सपोज़र तक रूट एक्सपोजर के लिए इस एक्सपोजर का उपयोग कर सकता है।

डिफ़ॉल्ट रूप से, modutils रूट के स्वामित्व वाले मॉड्यूल का उपयोग करने के प्रयासों को अस्वीकार कर देगा। निर्दिष्ट करना -r चेक को टॉगल करेगा और रूट को स्वामित्व वाले मॉड्यूल लोड करने की अनुमति देगा। नोट: मॉड्यूल को कॉन्फ़िगर किए जाने पर रूट चेक के लिए डिफ़ॉल्ट मान बदला जा सकता है।

रूट जांच को अक्षम करने या कॉन्फ़िगरेशन समय पर "रूट रूट चेक" को डिफॉल्ट सेट करने के लिए -r का उपयोग एक प्रमुख सुरक्षा एक्सपोजर है और इसकी अनुशंसा नहीं की जाती है।

-एस , - syslog

टर्मिनल के बजाय syslog (3) के लिए आउटपुट सब कुछ।

-एस , - शब्दकोष

लोड किए गए मॉड्यूल को कोल्सिम्स डेटा रखने के लिए मजबूर करें, भले ही कर्नेल इसका समर्थन न करे। यह विकल्प छोटे सिस्टम के लिए है जहां कर्नेल को कॉलम डेटा के बिना लोड किया गया है लेकिन चयनित मॉड्यूल को डिबगिंग के लिए कॉलम के लिए आवश्यक है। यह विकल्प Red Hat Linux पर डिफ़ॉल्ट है।

-v , --verbose

Verbose हो।

-V , --वर्जन

Insmod के संस्करण प्रदर्शित करें।

-एक्स , - निर्यात ; -x , --noexport

क्रमशः सभी मॉड्यूल के बाहरी प्रतीकों को निर्यात और निर्यात न करें। प्रतीकों को निर्यात करने के लिए डिफ़ॉल्ट है। यह विकल्प केवल तभी प्रभावी होता है जब मॉड्यूल स्पष्ट रूप से अपनी नियंत्रित प्रतीक तालिका निर्यात नहीं करता है, और इस प्रकार इसे बहिष्कृत किया जाता है।

-Y , --ksymoops ; -y , --noksymoops

Ksymoops प्रतीकों को ksyms में जोड़ें और न करें। इस मॉड्यूल में ओप्स होने पर बेहतर डिबगिंग प्रदान करने के लिए इन प्रतीकों का उपयोग ksymoops द्वारा किया जाता है। डिफ़ॉल्ट रूप से परिभाषित करने के लिए ksymoops प्रतीकों के लिए है। यह विकल्प -X / -x विकल्पों से स्वतंत्र है।

ksymoops प्रतीक प्रति लोड मॉड्यूल लगभग 260 बाइट जोड़ते हैं। जब तक आप कर्नेल स्पेस पर वास्तव में कम नहीं होते हैं और अपने न्यूनतम आकार में ksyms को कम करने की कोशिश कर रहे हैं, तो डिफ़ॉल्ट लें और अधिक सटीक ओप्स डीबगिंग प्राप्त करें। लगातार मॉड्यूल डेटा को बचाने के लिए ksymoops प्रतीकों की आवश्यकता होती है।

-एन , - संख्यात्मक-केवल

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

मॉड्यूल पैरामीटर्स

कुछ मॉड्यूल अपने ऑपरेशन को अनुकूलित करने के लिए लोड-टाइम पैरामीटर स्वीकार करते हैं। ये पैरामीटर अक्सर I / O पोर्ट और आईआरक्यू संख्याएं होती हैं जो मशीन से मशीन में भिन्न होती हैं और हार्डवेयर से निर्धारित नहीं की जा सकती हैं।

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

पूर्णांक के मामले में, सभी मान दशमलव, ऑक्टल या हेक्साडेसिमल में ला सी: 17, 021 या 0x11 में हो सकते हैं। ऐरे तत्व अल्पविराम से अलग अनुक्रम निर्दिष्ट हैं। मूल्य को छोड़कर तत्वों को छोड़ दिया जा सकता है।

2.0 श्रृंखला मॉड्यूल में, मान जो किसी संख्या से शुरू नहीं होते हैं उन्हें स्ट्रिंग माना जाता है। 2.1 में शुरू होने से, पैरामीटर की प्रकार की जानकारी इंगित करती है कि मान को स्ट्रिंग के रूप में समझना है या नहीं। यदि मान डबल-कोट्स ( " ) से शुरू होता है, तो स्ट्रिंग को सी, एस्केप अनुक्रमों और सभी के रूप में व्याख्या किया जाता है। ध्यान दें कि शेल प्रॉम्प्ट से, उद्धरण स्वयं को खोल व्याख्या से संरक्षित करने की आवश्यकता हो सकती है।

जीपीएल लाइसेंस प्राप्त मॉड्यूल और प्रतीक

कर्नेल 2.4.10 से शुरू होने पर, मॉड्यूल में एक लाइसेंस स्ट्रिंग होनी चाहिए, जिसे MODULE_LICENSE () का उपयोग करके परिभाषित किया गया हो। कई तारों को जीपीएल संगत होने के रूप में पहचाना जाता है; किसी भी अन्य लाइसेंस स्ट्रिंग या कोई लाइसेंस नहीं है कि मॉड्यूल को मालिकाना माना जाता है।

यदि कर्नेल / proc / sys / kernel / tainted ध्वज का समर्थन करता है तो जीपीएल लाइसेंस के बिना मॉड्यूल लोड करते समय '1' के साथ धुंधला या ध्वजांकित ध्वज होगा। कर्नेल टैनटिंग का समर्थन करता है और एक मॉड्यूल लाइसेंस के बिना लोड किया जाता है तो एक चेतावनी जारी की जाती है। मॉड्यूल के लिए हमेशा एक चेतावनी जारी की जाती है जिसमें MODULE_LICENSE () है जो जीपीएल संगत नहीं है, यहां तक ​​कि पुराने कर्नेल पर भी जो टैनटिंग का समर्थन नहीं करते हैं। यह चेतावनी को कम करता है जब पुराने कर्नेल पर एक नया मॉड्यूल्स का उपयोग किया जाता है।

insmod -f (बल) मोड या tainting का समर्थन करने वाले कर्नेल पर '2' के साथ tainted ध्वज होगा। यह हमेशा एक चेतावनी जारी करता है।

कुछ कर्नेल डेवलपर्स को उनके कोड द्वारा निर्यात किए गए प्रतीकों की आवश्यकता होती है केवल जीपीएल संगत लाइसेंस के साथ मॉड्यूल द्वारा उपयोग किया जाना चाहिए। इन प्रतीकों को सामान्य EXPORT_SYMBOL के बजाय EXPORT_SYMBOL_GPL द्वारा निर्यात किया जाता है। कर्नेल द्वारा निर्यात किए गए जीपीएल-केवल प्रतीकों और अन्य मॉड्यूल द्वारा केवल जीपीएल-संगत लाइसेंस के साथ मॉड्यूल के लिए दृश्यमान होते हैं, ये प्रतीक ' GPLONLY_ ' के उपसर्ग के साथ / proc / ksyms में दिखाई देते हैं। इंस्मोड जीपीएल लाइसेंस प्राप्त मॉड्यूल लोड करते समय प्रतीकों पर GPLONLY_ उपसर्ग को अनदेखा करता है ताकि मॉड्यूल उपसर्ग के बिना सामान्य प्रतीक नाम को संदर्भित कर सके। जीपीएल केवल प्रतीकों को जीपीएल संगत लाइसेंस के बिना मॉड्यूल के लिए उपलब्ध नहीं कराया गया है, इसमें मॉड्यूल के साथ कोई लाइसेंस नहीं है।

Ksymoops सहायता

मॉड्यूल का उपयोग करते समय कर्नेल ओप्स के डिबगिंग में सहायता के लिए, कुछ प्रतीकों को ksyms में जोड़ने के लिए डिफ़ॉल्ट रूप से insmod , -Y विकल्प देखें। ये प्रतीकों __insmod_modulename_ से शुरू होते हैं । प्रतीकों को अद्वितीय बनाने के लिए मॉड्यूलनाम की आवश्यकता होती है। विभिन्न मॉड्यूल नामों के तहत एक ही वस्तु को एक से अधिक बार लोड करना कानूनी है। वर्तमान में, परिभाषित प्रतीक हैं:

__insmod_modulename_Oobjectfile_Mmtime_Vversion

ऑब्जेक्टफाइल फ़ाइल का नाम है जिसे ऑब्जेक्ट से लोड किया गया था। यह सुनिश्चित करता है कि ksymoops कोड को सही ऑब्जेक्ट से मेल कर सकता है। mtime हेक्स में उस फ़ाइल पर आखिरी संशोधित टाइमस्टैम्प है, यदि शून्य विफल हो तो शून्य। संस्करण कर्नेल संस्करण है जिसे मॉड्यूल के लिए संकलित किया गया था, -1 यदि कोई संस्करण उपलब्ध नहीं है। _O प्रतीक मॉड्यूल हेडर के समान प्रारंभ पता है।

__insmod_modulename_Ssectionname_Llength

यह प्रतीक चयनित ईएलएफ अनुभागों की शुरुआत में दिखाई देता है, वर्तमान में .text, .rodata, .data, .bss और .sbss। यह केवल तभी दिखाई देता है जब अनुभाग में शून्य-शून्य आकार हो। सेक्शननाम ईएलएफ सेक्शन का नाम है, लंबाई दशमलव में सेक्शन की लंबाई है। ये प्रतीकों ksymoops नक्शा पते को अनुभागों में मदद करते हैं जब कोई प्रतीक उपलब्ध नहीं होता है।

__insmod_modulename_Ppersistent_filename

केवल मॉड्यूल द्वारा बनाया गया है यदि मॉड्यूल में एक या अधिक पैरामीटर हैं जो निरंतर डेटा के रूप में चिह्नित हैं और लगातार डेटा को सहेजने के लिए फ़ाइल नाम (देखें - ऊपर, ऊपर) उपलब्ध है।

मॉड्यूल में कर्नेल ओप्स डीबगिंग के साथ दूसरी समस्या यह है कि ओओएस के बीच / proc / ksyms और / proc / modules की सामग्री बदल सकती है और जब आप लॉग फ़ाइल को संसाधित करते हैं। इस समस्या को दूर करने में मदद के लिए, यदि निर्देशिका / var / log / ksymoops मौजूद है तो insmod और rmmod स्वचालित रूप से / proc / ksyms और / proc / मॉड्यूल को / var / log / ksymoops को 'दिनांक +% Y% मीटर के उपसर्ग के साथ कॉपी करेगा % d% एच% एम% S`। सिस्टम प्रशासक ksymoops को बता सकता है जो ओप्स को डिबग करते समय उपयोग करने के लिए स्नैपशॉट फ़ाइलों को उपयोग करता है। इस स्वचालित प्रति को अक्षम करने के लिए कोई स्विच नहीं है। यदि आप यह नहीं करना चाहते हैं, तो / var / log / ksymoops न बनाएं। यदि वह निर्देशिका मौजूद है, तो इसे रूट के स्वामित्व में होना चाहिए और मोड 644 या 600 होना चाहिए और आपको हर दिन या इस स्क्रिप्ट को चलाना चाहिए। नीचे दी गई स्क्रिप्ट insmod_ksymoops_clean के रूप में स्थापित है।

जानने के लिए मूल जानकारी

नाम

insmod - लोड करने योग्य कर्नेल मॉड्यूल स्थापित करें

SYNOPSIS

insmod [-fhkLmnpqrsSvVxXyYN] [-e persist_name ] [-o module_name ] [-O blob_name ] [-P उपसर्ग ] मॉड्यूल [ प्रतीक = मान ...]