Skip to main content

लिनक्स / यूनिक्स कमांड के बारे में सब कुछ: Insmod

लिनक्स में lsmod, insmod, और rmmod आदेशों का उपयोग कैसे करें (जून 2026)

लिनक्स में lsmod, insmod, और rmmod आदेशों का उपयोग कैसे करें (जून 2026)
Anonim

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

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

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

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

विकल्प

-e persist_name , --persist= persist_name

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

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

-f, --force

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

-h, --मदद

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

-k, --स्वतः स्वच्छ

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

-एल, --lock

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

-m, --नक्शा

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

-n, --कोई भार नही

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

-ओ मोड्यूल का नाम , --name= मोड्यूल का नाम

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

-O blob_name , --blob= blob_name

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

-p, --जांच

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

-पी उपसर्ग , उपसर्ग= उपसर्ग

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

-q, --शांत

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

-r, --root

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

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

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

-s, --syslog

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

-S, --kallsyms

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

-v, --verbose

Verbose हो।

-वी, --version

का संस्करण प्रदर्शित करेंinsmod.

-एक्स, --export; -एक्स, --noexport

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

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

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

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

एन, --numeric-केवल

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

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

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

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

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

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

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

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

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

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

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

Ksymoops सहायता

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

__insmod_ मोड्यूल का नाम _ Oobjectfile _ Mmtime _ vVERSION

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

__insmod_ मोड्यूल का नाम _ Ssectionname _ Llength

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

__insmod_ मोड्यूल का नाम _Ppersistent_ फ़ाइल का नाम

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

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

#! / Bin / श # सहेजे गए ksyms और मॉड्यूल 2 दिनों में उपयोग नहीं हटाएं हटाएं अगर -d / var / log / ksymoops फिर सेट-ए # सुनिश्चित करें कि कम से कम एक संस्करण हमेशा होता है डी = `दिनांक +% वाई% एम% डी% एच% एम% एस` सीपी-ए / proc / ksyms /var/log/ksymoops/${d}.ksyms सीपी-ए / proc / मॉड्यूल /var/log/ksymoops/${d}.modules ढूंढें / var / log / ksymoops -type f -atime +2 -exec rm {} ; फाई

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

नाम

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

SYNOPSIS

insmod -fhkLmnpqrsSvVxXyYN -e persist_name -ओ मोड्यूल का नाम -ओ blob_name -पी उपसर्ग मॉड्यूल प्रतीक= मूल्य …