लोडेबल कर्नेल मॉड्यूल: Difference between revisions

From Vigyanwiki
No edit summary
 
(15 intermediate revisions by 3 users not shown)
Line 1: Line 1:
{{Short description|Dynamically loadable module that extends a running operating system kernel}}
{{Short description|Dynamically loadable module that extends a running operating system kernel}}
[[ कम्प्यूटिंग ]] में, एक लोड करने योग्य कर्नेल मॉड्यूल (LKM) एक [[वस्तु फ़ाइल]] है जिसमें एक [[ऑपरेटिंग सिस्टम]] के चलने वाले [[कर्नेल (ऑपरेटिंग सिस्टम)]], या तथाकथित ''बेस कर्नेल'' के विस्तार के लिए कोड होता है। एलकेएम आमतौर पर नए [[कंप्यूटर हार्डवेयर]] ([[डिवाइस ड्राइवर]] के रूप में) और/या [[फाइल सिस्टम]] के लिए या [[सिस्टम कॉल]] जोड़ने के लिए समर्थन जोड़ने के लिए उपयोग किया जाता है। जब एलकेएम द्वारा प्रदान की जाने वाली कार्यक्षमता की आवश्यकता नहीं होती है, तो इसे [[ कंप्यूटर भंडारण ]] और अन्य संसाधनों को मुक्त करने के लिए अनलोड किया जा सकता है।
[[ कम्प्यूटिंग |कम्प्यूटिंग]] में संचयन करने योग्य कर्नेल मॉड्यूल (एलकेएम) एक [[वस्तु फ़ाइल|ऑब्जेक्ट फाइल]] है। जिसमें [[ऑपरेटिंग सिस्टम|ऑपरेटिंग]] सिस्टम के ऑपरेटिंग वाले [[कर्नेल (ऑपरेटिंग सिस्टम)]], अथवा तथाकथित ''मुख्य कर्नेल'' के विस्तार के लिए सांकेतिक अंक होता है। एलकेएम सामान्यतः नवीनतम [[कंप्यूटर हार्डवेयर]] ([[डिवाइस ड्राइवर|उपकरण संचालक]]) के रूप में अथवा [[फाइल सिस्टम|फाइल]] सिस्टम के लिए अथवा [[सिस्टम कॉल|सिस्टम आह्वान]] समावेशन के समर्थन समावेशन के लिए प्रयोग किया जाता है। जब एलकेएम के माध्यम से प्रदान की जाने वाली कार्यक्षमता की आवश्यकता नहीं होती है, तो इसे [[ कंप्यूटर भंडारण |कंप्यूटर मेमोरी]] और अन्य संसाधनों को मुक्त करने के लिए असंचयन किया जा सकता है।


अधिकांश वर्तमान यूनिक्स जैसी प्रणालियाँ और [[Microsoft Windows]] विभिन्न नामों के तहत लोड करने योग्य कर्नेल मॉड्यूल का समर्थन करते हैं, जैसे कि [[FreeBSD]] में कर्नेल लोड करने योग्य मॉड्यूल (kld), [[macOS]] में कर्नेल एक्सटेंशन (kext) (हालाँकि तृतीय-पक्ष मॉड्यूल के लिए समर्थन छोड़ा जा रहा है)<ref>{{cite web |title=बहिष्कृत कर्नेल एक्सटेंशन और सिस्टम एक्सटेंशन विकल्प|url=https://developer.apple.com/support/kernel-extensions/ |publisher=Apple Inc. |access-date=13 March 2021}}</ref>),<ref>{{cite web|url=https://developer.apple.com/library/mac/#documentation/Darwin/Conceptual/KEXTConcept/KEXTConceptIntro/introduction.html|title=Kernel Extension Programming Topics: Introduction|publisher=[[Apple Inc.]]|date=September 1, 2010|access-date=May 5, 2013|url-status=live|archive-url=https://web.archive.org/web/20130504142911/http://developer.apple.com/library/mac/#documentation/Darwin/Conceptual/KEXTConcept/KEXTConceptIntro/introduction.html|archive-date=May 4, 2013}}</ref> [[AIX]] में कर्नेल एक्सटेंशन मॉड्यूल, [[HP-UX]] में गतिशील रूप से लोड करने योग्य कर्नेल मॉड्यूल,<ref>{{cite web|url=https://support.hpe.com/hpesc/public/docDisplay?docId=emr_na-c01943990|title=गतिशील रूप से लोड करने योग्य कर्नेल मॉड्यूल का प्रबंधन और विकास करना|publisher=[[Hewlett-Packard]]|date=June 7, 2001}}</ref> [[Windows NT]] में कर्नेल-मोड ड्राइवर<ref>{{cite web|url=http://msdn.microsoft.com/en-us/library/windows/hardware/ff557272(v=vs.85).aspx|title=ड्राइवर लोड होने पर क्या निर्धारित करता है|work=[[Microsoft Developer Network]]|publisher=[[Microsoft]]|date=November 21, 2012|access-date=May 5, 2013|url-status=live|archive-url=https://web.archive.org/web/20130306121408/http://msdn.microsoft.com/en-us/library/windows/hardware/ff557272%28v%3Dvs.85%29.aspx|archive-date=March 6, 2013}}</ref> और [[VxWorks]] में डाउनलोड करने योग्य कर्नेल मॉड्यूल (DKM)। उन्हें कर्नेल लोड करने योग्य मॉड्यूल (या केएलएम) के रूप में भी जाना जाता है, और केवल कर्नेल मॉड्यूल (केएमओडी) के रूप में जाना जाता है।
अधिकांश वर्तमान यूनिक्स प्रतिरूप प्रणालियाँ और [[Microsoft Windows|माइक्रोसॉफ्ट विंडोज़]] विभिन्न नामों के अनुसार संचयन करने योग्य कर्नेल मॉड्यूल का समर्थन करते हैं, जैसे कि [[FreeBSD|फ्री बीडीएस]] में कर्नेल संचयन करने योग्य मॉड्यूल (केएलडी), [[macOS|मैकोज़]] में कर्नेल विस्तारण (केईएक्सटी) (चूंकि तृतीय-पक्ष मॉड्यूल के लिए समर्थन छोड़ा जा रहा है)<ref>{{cite web |title=बहिष्कृत कर्नेल एक्सटेंशन और सिस्टम एक्सटेंशन विकल्प|url=https://developer.apple.com/support/kernel-extensions/ |publisher=Apple Inc. |access-date=13 March 2021}}</ref> है।<ref>{{cite web|url=https://developer.apple.com/library/mac/#documentation/Darwin/Conceptual/KEXTConcept/KEXTConceptIntro/introduction.html|title=Kernel Extension Programming Topics: Introduction|publisher=[[Apple Inc.]]|date=September 1, 2010|access-date=May 5, 2013|url-status=live|archive-url=https://web.archive.org/web/20130504142911/http://developer.apple.com/library/mac/#documentation/Darwin/Conceptual/KEXTConcept/KEXTConceptIntro/introduction.html|archive-date=May 4, 2013}}</ref> [[AIX|ऐक्स]] में कर्नेल विस्तारण मॉड्यूल, [[HP-UX|एचपी-यूएक्स]] में गतिशील रूप से संचयन करने योग्य कर्नेल मॉड्यूल,<ref>{{cite web|url=https://support.hpe.com/hpesc/public/docDisplay?docId=emr_na-c01943990|title=गतिशील रूप से लोड करने योग्य कर्नेल मॉड्यूल का प्रबंधन और विकास करना|publisher=[[Hewlett-Packard]]|date=June 7, 2001}}</ref> [[Windows NT|विंडोज़ एनटी]] में कर्नेल- सिस्टम संचालक<ref>{{cite web|url=http://msdn.microsoft.com/en-us/library/windows/hardware/ff557272(v=vs.85).aspx|title=ड्राइवर लोड होने पर क्या निर्धारित करता है|work=[[Microsoft Developer Network]]|publisher=[[Microsoft]]|date=November 21, 2012|access-date=May 5, 2013|url-status=live|archive-url=https://web.archive.org/web/20130306121408/http://msdn.microsoft.com/en-us/library/windows/hardware/ff557272%28v%3Dvs.85%29.aspx|archive-date=March 6, 2013}}</ref> और [[VxWorks|वीएक्स कार्य]] में डाटा प्राप्त करने योग्य कर्नेल मॉड्यूल ( डीकेएम) को कर्नेल संचयन करने योग्य मॉड्यूल ( अथवा केएलएम) के रूप में भी समझा जाता है, और मात्र कर्नेल मॉड्यूल (केएमओडी) के रूप में समझा जाता है।


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


== नुकसान ==
== हानि ==
एक स्थिर कर्नेल पर एक मॉड्यूलर कर्नेल को प्राथमिकता देने की एक छोटी सी आलोचना तथाकथित [[विखंडन (कंप्यूटिंग)]] पेनल्टी है। बेस कर्नेल हमेशा अपने सेटअप रूटीन द्वारा वास्तविक सन्निहित [[ रैंडम एक्सेस मेमोरी ]] में अनपैक किया जाता है; इस प्रकार, बेस कर्नेल कोड कभी खंडित नहीं होता है। एक बार जब सिस्टम उस स्थिति में होता है जिसमें मॉड्यूल डाले जा सकते हैं, उदाहरण के लिए एक बार फ़ाइल सिस्टम को [[माउंट (कंप्यूटिंग)]] कर दिया जाता है जिसमें मॉड्यूल होते हैं, यह संभावना है कि कोई भी नया कर्नेल कोड सम्मिलन कर्नेल को खंडित कर देगा, जिससे परिचय अधिक [[अनुवाद लुकसाइड बफर]] प्रविष्टियों का उपयोग करके एक मामूली प्रदर्शन जुर्माना, जिससे अधिक टीएलबी छूट जाती है।{{citation needed|date=September 2007}}
एक स्थिर कर्नेल पर एक वैकल्पिक् कर्नेल को प्राथमिकता देने की एक छोटी सी आलोचना तथाकथित [[विखंडन (कंप्यूटिंग)|विखंडन (कम्प्यूटिंग)]] जुर्माना है। मुख्य कर्नेल सदैव अपने स्थापित नियमित के माध्यम से वास्तविक सन्निहित [[ रैंडम एक्सेस मेमोरी |रैंडम एक्सेस मेमोरी]] में अवेष्ठित किया जाता है। इस प्रकार मुख्य कर्नेल सांकेतिक अंक कभी खंडित नहीं होता है। एक बार जब सिस्टम उस स्थिति में होती है, जिसमें मॉड्यूल व्यक्त जा सकते हैं। उदाहरण के रूप मे एक बार फाइल सिस्टम को [[माउंट (कंप्यूटिंग)|माँउटेड (कम्प्यूटिंग)]] कर दिया जाता है, जिसमें मॉड्यूल होते हैं। यह संभावना है कि कोई भी नवीनतम कर्नेल सांकेतिक अंक के उपयोग से कर्नेल को खंडित कर देगा, जिससे अधिक [[अनुवाद लुकसाइड बफर|ट्रांसलेशन लुकसाइड बफर]] प्रविष्टियों का प्रयोग करके एक सामान्य प्रदर्शन जुर्माना लगाया जा सकता है, जिससे अधिक टीएलबी असफल हो जाती है।      


== विभिन्न ऑपरेटिंग सिस्टम में कार्यान्वयन ==
== विभिन्न ऑपरेटिंग सिस्टम में कार्यान्वयन ==


=== लिनक्स ===
=== लिनक्स ===
लिनक्स में लोड करने योग्य कर्नेल मॉड्यूल किसके द्वारा लोड (और अनलोड) किए जाते हैं <code>[[modprobe]]</code> आज्ञा। वे में स्थित हैं <code>/lib/modules</code> या <code>/usr/lib/modules</code> और उनका विस्तार हो गया है <code>.ko</code> (कर्नेल ऑब्जेक्ट) संस्करण 2.6 के बाद से (पिछले संस्करणों ने <code>.o</code> विस्तार)।<ref>{{cite web|title=The Linux Kernel Module Programming Guide, section 2.2 "Compiling Kernel Modules"|url=https://tldp.org/LDP/lkmpg/2.6/html/x181.html|access-date=2020-10-05}}</ref> <code>[[lsmod]]</code> e> कमांड लोड किए गए कर्नेल मॉड्यूल को सूचीबद्ध करता है। आपातकालीन मामलों में, जब सिस्टम बूट करने में विफल रहता है उदा। टूटे हुए मॉड्यूल, विशिष्ट मॉड्यूल को कर्नेल बूट पैरामीटर सूची को संशोधित करके सक्षम या अक्षम किया जा सकता है (उदाहरण के लिए, यदि [[GNU GRUB]] का उपयोग करके, GRUB प्रारंभ मेनू में 'e' दबाकर, फिर कर्नेल पैरामीटर लाइन को संपादित करके)।
लिनक्स में संचयन करने योग्य कर्नेल मॉड्यूल <code>[[modprobe]]</code> आदेश माध्यम से संचयन (और असंचयन ) किये जाते हैं। वह <code>/lib/modules</code> अथवा <code>/usr/lib/modules</code> में स्थित हैं और संस्करण 2.6 के पश्चात् से <code>.ko</code> (कर्नेल उद्देश्य ) मे उनका विस्तार हो गया है। विगत संस्करणों में .o वृद्धि का उपयोग किया गया था।<ref>{{cite web|title=The Linux Kernel Module Programming Guide, section 2.2 "Compiling Kernel Modules"|url=https://tldp.org/LDP/lkmpg/2.6/html/x181.html|access-date=2020-10-05}}</ref> <code>[[lsmod]]</code> अधिकार संचयन कर्नेल मॉड्यूल को सूचीबद्ध करता है। आपातकालीन स्थितियों में जब सिस्टम बूट करने में विफल रहता है। उदाहरण के रूप मे टूटे हुए मॉड्यूल है। विशिष्ट मॉड्यूल को कर्नेल बूट पैरामीटर सूची को संशोधित करके सक्षम अथवा अक्षम किया जा सकता है (उदाहरण के रूप मे कि [[GNU GRUB|ज़ीएनयू ज़ीआरयूबी]] का प्रयोग करके, ज़ीआरयूबी प्रारंभ मेनू में '' दबाकर तत्पश्चात् कर्नेल पैरामीटर रेखा को संपादित करके)।


==== लाइसेंस मुद्दे ====
==== लाइसेंस उद्देश्य ====
लिनक्स अनुरक्षकों की राय में, LKM कर्नेल का [[व्युत्पन्न कार्य]] है{{citation needed|date=September 2015}}. लिनक्स अनुरक्षक [[मालिकाना सॉफ्टवेयर]] मॉड्यूल के वितरण को सहन करते हैं,{{Citation needed|date=April 2012}} लेकिन प्रतीकों को केवल [[जीएनयू जनरल पब्लिक लाइसेंस]] (GPL) मॉड्यूल के लिए उपलब्ध के रूप में चिह्नित करने की अनुमति दें।
लिनक्स अनुरक्षकों के अनुमान में एलकेएम कर्नेल का [[व्युत्पन्न कार्य|ड्राइव कार्य]] है। लिनक्स अनुरक्षक [[मालिकाना सॉफ्टवेयर|स्वत्वाधिकारी सॉफ्टवेयर]] मॉड्यूल के वितरण को सहन करते हैं, किन्तु प्रतीकों को मात्र [[जीएनयू जनरल पब्लिक लाइसेंस]] (ज़ीपीएल) मॉड्यूल के लिए उपलब्ध के रूप में चिह्नित करने की अनुमति देते है।


मालिकाना या गैर-जीपीएल-संगत मॉड्यूल लोड करने से 'कलंक' ध्वज सेट हो जाएगा<ref>{{cite web |date=2011-06-21 |author=Linus Torvalds |title=Documentation/oops-tracing.txt |publisher=kernel.org |url=http://repo.or.cz/w/linux-2.6.git/blob/HEAD:/Documentation/oops-tracing.txt#l222 |access-date=2011-10-03 |display-authors=etal |url-status=live |archive-url=https://web.archive.org/web/20111002110747/http://repo.or.cz/w/linux-2.6.git/blob/HEAD%3A/Documentation/oops-tracing.txt#l222 |archive-date=2011-10-02 }}</ref><ref>{{cite web|url=https://www.kernel.org/doc/html/latest/admin-guide/tainted-kernels.html|title=दागी हुई गुठली|work=The Linux kernel user’s and administrator’s guide}}</ref> चल रहे कर्नेल में - जिसका अर्थ है कि अनुभव की गई किसी भी समस्या या बग की अनुरक्षकों द्वारा जांच किए जाने की संभावना कम होगी।<ref>{{cite web |date=2006-03-24 |author=Jonathan Corbet |title=यूजर स्पेस से टैनिंग|publisher=[[LWN.net]] |url=https://lwn.net/Articles/184879/ |access-date=2011-10-03 |url-status=live |archive-url=https://web.archive.org/web/20111116215244/http://lwn.net/Articles/184879/ |archive-date=2011-11-16 }}</ref><ref>{{cite web |date=2007-07-26 |title=Novell support documentation: Tainted kernel |url=http://www.novell.com/support/viewContent.do?externalId=3582750&sliceId=1 |access-date=2011-10-03 }}</ref> LKM प्रभावी रूप से चल रहे कर्नेल का हिस्सा बन जाते हैं, इसलिए कर्नेल डेटा संरचनाओं को दूषित कर सकते हैं और ऐसे बग उत्पन्न कर सकते हैं जिनकी जांच नहीं की जा सकती है यदि मॉड्यूल वास्तव में मालिकाना है।
स्वत्वाधिकारी अथवा अ-जीपीएल-संगत मॉड्यूल संचयन करने से ऑपरेटिंग कर्नेल में ' टेंट ' फ्लैग स्थापित हो जाएगा।<ref>{{cite web |date=2011-06-21 |author=Linus Torvalds |title=Documentation/oops-tracing.txt |publisher=kernel.org |url=http://repo.or.cz/w/linux-2.6.git/blob/HEAD:/Documentation/oops-tracing.txt#l222 |access-date=2011-10-03 |display-authors=etal |url-status=live |archive-url=https://web.archive.org/web/20111002110747/http://repo.or.cz/w/linux-2.6.git/blob/HEAD%3A/Documentation/oops-tracing.txt#l222 |archive-date=2011-10-02 }}</ref><ref>{{cite web|url=https://www.kernel.org/doc/html/latest/admin-guide/tainted-kernels.html|title=दागी हुई गुठली|work=The Linux kernel user’s and administrator’s guide}}</ref> जिसका अर्थ है कि अनुभव की गई किसी भी समस्या, दोष अथवा त्रुटि की अनुरक्षकों के माध्यम से परीक्षण किये जाने की संभावना कम होगी।<ref>{{cite web |date=2006-03-24 |author=Jonathan Corbet |title=यूजर स्पेस से टैनिंग|publisher=[[LWN.net]] |url=https://lwn.net/Articles/184879/ |access-date=2011-10-03 |url-status=live |archive-url=https://web.archive.org/web/20111116215244/http://lwn.net/Articles/184879/ |archive-date=2011-11-16 }}</ref><ref>{{cite web |date=2007-07-26 |title=Novell support documentation: Tainted kernel |url=http://www.novell.com/support/viewContent.do?externalId=3582750&sliceId=1 |access-date=2011-10-03 }}</ref> एलकेएम प्रभावी रूप से ऑपरेटिंग कर्नेल का खंड बन जाते हैं, इसलिए कर्नेल डाटा संरचनाओं को दूषित कर सकते हैं और ऐसे दोष अथवा त्रुटि उत्पन्न कर सकते हैं। यदि मॉड्यूल वास्तव में स्वत्वाधिकारी है तो इनका परीक्षण नहीं की जा सकता है


==== Linuxant विवाद ====
==== लिनक्सेंट विवाद ====
2004 में, Linuxant, एक परामर्श कंपनी जो लोड करने योग्य कर्नेल मॉड्यूल के रूप में मालिकाना डिवाइस ड्राइवर जारी करती है, ने अपने में एक [[शून्य वर्ण]] का दुरुपयोग करने का प्रयास किया। <code>MODULE_LICENSE</code>, जैसा कि निम्नलिखित कोड अंश में दिखाई देता है:
2004 में लिनक्सेंट एक परामर्श संगठन जो संचयन करने योग्य कर्नेल मॉड्यूल के रूप में स्वत्वाधिकारी उपकरण संचालक अवमुक्त करती है ने अपने <code>मॉड्यूल लाइसेंस</code> में एक [[शून्य वर्ण|नल टर्मिनेटर]] का दुरुपयोग करने का प्रयास किया। जैसा कि निम्नलिखित सांकेतिक अंक में दिखाई देता है-


<syntaxhighlight lang="c">
<syntaxhighlight lang="c">
MODULE_LICENSE("GPL\0for files in the \"GPL\" directory; for others, only LICENSE file applies");
MODULE_LICENSE("GPL\0for files in the \"GPL\" directory; for others, only LICENSE file applies");
</syntaxhighlight>
</syntaxhighlight>
कर्नेल द्वारा उपयोग किए गए स्ट्रिंग तुलना कोड ने उस समय यह निर्धारित करने का प्रयास किया कि क्या मॉड्यूल GPLed बंद हो गया था जब यह एक शून्य वर्ण तक पहुंच गया था (<code>\0</code>), इसलिए यह सोचकर बेवकूफ बनाया गया कि मॉड्यूल अपने लाइसेंस को सिर्फ GPL घोषित कर रहा है।<ref>{{cite web|author=Jonathan Corbet|title=Being honest with MODULE_LICENSE|url=https://lwn.net/Articles/82305/|publisher=LWN.net|date=April 27, 2004|access-date=October 30, 2012|url-status=live|archive-url=https://web.archive.org/web/20121102095811/http://lwn.net/Articles/82305/|archive-date=November 2, 2012}}</ref>
कर्नेल के माध्यम से प्रयोग किये गए श्रृंखला समानता सांकेतिक अंक ने उस समय यह निर्धारित करने का प्रयास किया कि क्या मॉड्यूल ज़ीपीएल संंवृत हो गया था। जब यह एक नल टर्मिनेटर (<code>\0</code>) तक पहुंच गया था। इसलिए यह सोचकर मूर्ख बनाया गया कि मॉड्यूल अपने लाइसेंस को मात्र ज़ीपीएल घोषित कर रहा है।<ref>{{cite web|author=Jonathan Corbet|title=Being honest with MODULE_LICENSE|url=https://lwn.net/Articles/82305/|publisher=LWN.net|date=April 27, 2004|access-date=October 30, 2012|url-status=live|archive-url=https://web.archive.org/web/20121102095811/http://lwn.net/Articles/82305/|archive-date=November 2, 2012}}</ref>  
 
=== फ्री बीएसडी ===
 
फ्री बीडीएस के लिए कर्नेल मॉड्यूल <code>/boot/kernel/</code> के साथ वितरित मॉड्यूल के लिए, ऑपरेटिंग सिस्टम अथवा सामान्यतः <code>/boot/modules/</code> फ्री बीडीएस पत्तन अथवा फ्री बीडीएस संवेष्टन से स्थापित मॉड्यूल के लिए, अथवा स्वत्वाधिकारी अथवा अन्यथा द्विचर -एकमात्र मॉड्यूल के लिए अंतर्गत संग्रहीत हैं। फ्री बीडीएस कर्नेल मॉड्यूल में सामान्यतः विस्तारण <code>.ko</code> होता है। एक बार यंत्र बूट हो जाने के पश्चात्, उन्हें <code>kldload</code> के साथ संचयन किया जा सकता है, और <code>kldunload</code> आदेश के साथ अभारित और <code>kldstat</code> के साथ सूचीबद्ध किया जा सकता है। कर्नेल प्रारंभ होने से पूर्व मॉड्यूल को संचयक से स्वचालित रूप से (<code>/boot/loader.conf</code> के माध्यम से) अथवा हाथ से संचयन किया जा सकता है।
=== फ्रीबीएसडी ===
FreeBSD के लिए कर्नेल मॉड्यूल भीतर संग्रहीत हैं <code>/boot/kernel/</code> ऑपरेटिंग सिस्टम के साथ वितरित मॉड्यूल के लिए, या आमतौर पर <code>/boot/modules/</code> FreeBSD पोर्ट या FreeBSD पोर्ट#पैकेज से स्थापित मॉड्यूल के लिए, या मालिकाना या अन्यथा बाइनरी-ओनली मॉड्यूल के लिए। FreeBSD कर्नेल मॉड्यूल में आमतौर पर एक्सटेंशन होता है <code>.ko</code>. एक बार मशीन बूट हो जाने के बाद, उन्हें इसके साथ लोड किया जा सकता है <code>kldload</code> कमांड, अनलोडेड <code>kldunload</code>, और के साथ सूचीबद्ध है <code>kldstat</code>. कर्नेल शुरू होने से पहले मॉड्यूल को लोडर से भी लोड किया जा सकता है, या तो स्वचालित रूप से (के माध्यम से <code>/boot/loader.conf</code>) या हाथ से।


=== मैकोज़ ===
=== मैकोज़ ===
macOS में कुछ लोड करने योग्य कर्नेल मॉड्यूल स्वचालित रूप से लोड किए जा सकते हैं। लोड करने योग्य कर्नेल मॉड्यूल को इसके द्वारा भी लोड किया जा सकता है <code>kextload</code> आज्ञा। द्वारा सूचीबद्ध किया जा सकता है <code>kextstat</code> आज्ञा। लोड करने योग्य कर्नेल मॉड्यूल एक्सटेंशन के साथ [[बंडल (macOS)]] में स्थित हैं <code>.kext</code>. ऑपरेटिंग सिस्टम के साथ दिए गए मॉड्यूल्स को स्टोर किया जाता है <code>/System/Library/Extensions</code> निर्देशिका; तीसरे पक्ष द्वारा आपूर्ति किए गए मॉड्यूल विभिन्न अन्य निर्देशिकाओं में हैं।
मैकोज़ में कुछ संचयन करने योग्य कर्नेल मॉड्यूल स्वचालित रूप से संचयन किये जा सकते हैं। संचयन करने योग्य कर्नेल मॉड्यूल को <code>kextload</code> के माध्यम से भी संचयन किया जा सकता है। उन्हें <code>kextstat</code> आदेश के माध्यम से सूचीबद्ध किया जा सकता है। संचयन करने योग्य कर्नेल मॉड्यूल विस्तारण <code>.kext</code>. विस्तारण के साथ [[बंडल (macOS)|बंडल (मैकोज़)]] में स्थित हैं। ऑपरेटिंग सिस्टम के साथ आपूर्ति दिए गए मॉड्यूल <code>/System/Library/Extensions</code> निर्देशिका मे संग्रहित किए जाते है। तीसरे पक्ष के माध्यम से आपूर्ति किये गए मॉड्यूल विभिन्न अन्य निर्देशिकाओं में हैं।


=== नेटवेयर ===
=== नेटवेयर ===
नेटवेयर कर्नेल मॉड्यूल को [[ नेटवेयर लोड करने योग्य मॉड्यूल ]] (एनएलएम) कहा जाता है। एनएलएम को लोड कमांड के माध्यम से नेटवेयर कर्नेल में डाला जाता है, और अनलोड कमांड के माध्यम से हटाया जाता है; <code>modules</code> कमांड वर्तमान में लोड किए गए कर्नेल मॉड्यूल को सूचीबद्ध करता है। एनएलएम नेटवेयर सर्वर पर निर्दिष्ट किसी भी वैध खोज पथ में रह सकते हैं, और उनके पास है <code>.NLM</code> फ़ाइल नाम एक्सटेंशन के रूप में।
नेटवेयर कर्नेल मॉड्यूल को [[ नेटवेयर लोड करने योग्य मॉड्यूल |नेटवेयर संचयन करने योग्य मॉड्यूल]] (एनएलएम) कहा जाता है। एनएलएम को संचयन अधिकार के माध्यम से नेटवेयर कर्नेल में संचयन किया जाता है और असंचयन अधिकार के माध्यम से हटाया जाता है। <code>modules</code> अधिकार वर्तमान में संचयन किये गए कर्नेल मॉड्यूल को सूचीबद्ध करता है। एनएलएम नेटवेयर परिसेवक पर निर्दिष्ट किसी भी वैध अन्वेषक मार्ग में रह सकते हैं, और उनके पास फाइल नाम विस्तारण के रूप में <code>.NLM</code> है।


=== वीएक्सवर्क्स ===
=== वीएक्स कार्य ===
एक डाउनलोड करने योग्य कर्नेल मॉड्यूल (DKM) प्रकार की परियोजना एक .out फ़ाइल उत्पन्न करने के लिए बनाई जा सकती है जिसे बाद में ld कमांड का उपयोग करके कर्नेल स्थान पर लोड किया जा सकता है। यह डाउनलोड करने योग्य कर्नेल मॉड्यूल unld कमांड का उपयोग करके अनलोड किया जा सकता है।
एक डाटा प्राप्त करने योग्य कर्नेल मॉड्यूल ( डीकेएम) प्रकार की परियोजना एक निषिद्ध फाइल उत्पन्न करने के लिए बनाई जा सकती है जिसे पश्चात् में एलडी अधिकार का प्रयोग करके कर्नेल स्थान पर संचयन किया जा सकता है। डाटा प्राप्त करने योग्य कर्नेल मॉड्यूल एनएलडी अधिकार का प्रयोग करके असंचयन किया जा सकता है।


=== सोलारिस ===
=== सोलारिस ===
सोलारिस के पास एक विन्यास योग्य कर्नेल मॉड्यूल लोड पथ है, जो इसके लिए तयशुदा है <code>/platform/platform-name/kernel /kernel /usr/kernel</code>. अधिकांश कर्नेल मॉड्यूल उपनिर्देशिकाओं के अंतर्गत रहते हैं <code>/kernel</code>; जिन्हें सिस्टम को उस बिंदु तक बूट करने के लिए आवश्यक नहीं माना जाता है जो init प्रारंभ कर सकते हैं अक्सर (लेकिन हमेशा नहीं) में पाए जाते हैं <code>/usr/kernel</code>. DEBUG कर्नेल बिल्ड करते समय सिस्टम सक्रिय रूप से मॉड्यूल को अनलोड करने का प्रयास करता है।
सोलारिस मे एक विन्यास योग्य कर्नेल मॉड्यूल संचयन मार्ग है, जो <code>/platform/platform-name/kernel /kernel /usr/kernel</code> लिए अभाव है। अधिकांश कर्नेल मॉड्यूल <code>/kernel</code> उपनिर्देशिकाओं के अंतर्गत रहते हैं। जिन्हें सिस्टम को उस बिंदु तक बूट करने के लिए आवश्यक नहीं माना जाता है जो इसमे इनइट प्रारंभ कर सकते हैं। प्रायः (किन्तु सदैव नहीं) <code>/usr/kernel</code> में पाया जाता हैं। डिबग कर्नेल निर्माण करते समय सिस्टम सक्रिय रूप से मॉड्यूल को असंचयन करने का प्रयास करता है।


== बाइनरी संगतता ==
== द्विचर संगतता ==
लिनक्स कर्नेल मॉड्यूल के लिए एक स्थिर [[एपीआई]] या [[अनुप्रयोग बाइनरी इंटरफ़ेस]] प्रदान नहीं करता है। इसका अर्थ है कि विभिन्न कर्नेल संस्करणों के बीच आंतरिक संरचना और कार्य में अंतर हैं, जो संगतता समस्याओं का कारण बन सकता है। उन समस्याओं का मुकाबला करने के प्रयास में, प्रतीक संस्करण डेटा को <code>.modinfo</code> लोड करने योग्य [[निष्पादन योग्य और लिंक करने योग्य प्रारूप]] मॉड्यूल का खंड। मॉड्यूल लोड करने से पहले इस वर्जनिंग जानकारी की तुलना चल रहे कर्नेल से की जा सकती है; यदि संस्करण असंगत हैं, तो मॉड्यूल लोड नहीं होगा।
लिनक्स कर्नेल मॉड्यूल के लिए एक स्थिर [[एपीआई]] अथवा [[अनुप्रयोग बाइनरी इंटरफ़ेस|एबीआई]] प्रदान नहीं करता है। इसका अर्थ है कि विभिन्न कर्नेल संस्करणों के बीच आंतरिक संरचना और कार्य में अंतर हैं, जो संगतता समस्याओं का कारण बन सकता है। उन समस्याओं का सामना करने के प्रयास में संचयन करने योग्य [[निष्पादन योग्य और लिंक करने योग्य प्रारूप]] मॉड्यूल के <code>.modinfo</code> प्रतीक संस्करण डाटा को रखा गया है। मॉड्यूल संचयन करने से पूर्व इस संस्करण जानकारी की समानता ऑपरेटिंग कर्नेल से की जा सकती है। यदि संस्करण असंगत हैं तो मॉड्यूल संचयन नहीं होगा।  


अन्य ऑपरेटिंग सिस्टम, जैसे Solaris (ऑपरेटिंग सिस्टम), FreeBSD, macOS, और Microsoft Windows कर्नेल API और एप्लिकेशन बाइनरी इंटरफ़ेस को अपेक्षाकृत स्थिर रखते हैं, इस प्रकार इस समस्या से बचते हैं। उदाहरण के लिए, कर्नेल संस्करण 6.0 के विरुद्ध संकलित FreeBSD कर्नेल मॉड्यूल किसी अन्य FreeBSD 6.x संस्करण पर पुनर्संकलन के बिना काम करेगा, उदा। 6.4। हालांकि, वे अन्य प्रमुख संस्करणों के साथ संगत नहीं हैं और उन्हें FreeBSD 7.x के साथ उपयोग करने के लिए पुनः संकलित किया जाना चाहिए, क्योंकि API और ABI संगतता केवल एक शाखा के भीतर ही बनाए रखी जाती है।
अन्य ऑपरेटिंग सिस्टम जैसे सोलारिस (ऑपरेटिंग सिस्टम), फ्री बीडीएस, मैकोज़, और माइक्रोसॉफ्ट विंडोज़ कर्नेल एपीआई और एबीआई को अपेक्षाकृत स्थिर रखते हैं, और इस प्रकार इस समस्या से बचते हैं। उदाहरण के लिए, कर्नेल संस्करण 6.0 के विरुद्ध संकलित फ्री बीडीएस कर्नेल मॉड्यूल किसी अन्य फ्री बीडीएस 6.एक्स संस्करण पर पुनर्संकलन के रहित काम करेगा। उदाहरण के रूप मे 6.4 है। चूंकि वह अन्य प्रमुख संस्करणों के साथ संगत नहीं हैं और उन्हें फ्री बीडीएस 7.एक्स के साथ प्रयोग करने के लिए पुनः संकलित किया जाना चाहिए, क्योंकि एपीआई और एबीआई संगतता मात्र एक उपखंड के अंतर्गत ही बनाए रखी जाती है।


== सुरक्षा ==
== सुरक्षा ==
जबकि लोड करने योग्य कर्नेल मॉड्यूल चालू कर्नेल को संशोधित करने का एक सुविधाजनक तरीका है, हमलावरों द्वारा उनकी [[प्रक्रिया (कंप्यूटिंग)]] या [[कम्प्यूटर फाइल]] का पता लगाने से रोकने के लिए एक समझौता प्रणाली पर इसका दुरुपयोग किया जा सकता है, जिससे उन्हें सिस्टम पर नियंत्रण बनाए रखने की अनुमति मिलती है। कई [[ rootkit ]] एलकेएम का इस तरह से उपयोग करते हैं। ध्यान दें कि, अधिकांश ऑपरेटिंग सिस्टम पर, मॉड्यूल किसी भी तरह से [[विशेषाधिकार उन्नयन]] में मदद नहीं करते हैं, क्योंकि एलकेएम को लोड करने के लिए उन्नत विशेषाधिकार की आवश्यकता होती है; वे केवल हमलावर के लिए सेंधमारी को छुपाना आसान बनाते हैं।<ref>[http://www.ouah.org/reiterlkm.htm Exploiting Loadable Kernel Modules ] {{webarchive|url=https://web.archive.org/web/20120204165532/http://www.ouah.org/reiterlkm.htm |date=2012-02-04 }}</ref>
जब संचयन करने योग्य कर्नेल मॉड्यूल संचालित कर्नेल को संशोधित करने का एक सुविधाजनक सिस्टम है। आक्षेपक के माध्यम से उनकी [[प्रक्रिया (कंप्यूटिंग)|प्रक्रिया ( कम्प्यूटिंग)]] अथवा [[कम्प्यूटर फाइल]] का पता लगाने से रोकने के लिए एक अनुबंध सिस्टम पर इसका दुरुपयोग किया जा सकता है। जिससे उन्हें सिस्टम पर नियंत्रण बनाए रखने की अनुमति मिलती है। अनेक [[ rootkit |रूटकिट]] एलकेएम का इस तरह से प्रयोग करते हैं। ध्यान दें कि, अधिकांश ऑपरेटिंग सिस्टम पर मॉड्यूल किसी भी तरह से [[विशेषाधिकार उन्नयन]] में सहायता नहीं करते हैं क्योंकि एलकेएम को संचयन करने के लिए उन्नत विशेषाधिकार की आवश्यकता होती है। वह मात्र आक्षेपक के लिए गुप्त रूप से प्रवेश को छुपाना आसान बनाते हैं।<ref>[http://www.ouah.org/reiterlkm.htm Exploiting Loadable Kernel Modules ] {{webarchive|url=https://web.archive.org/web/20120204165532/http://www.ouah.org/reiterlkm.htm |date=2012-02-04 }}</ref>
 
 
=== लिनक्स ===
=== लिनक्स ===
लिनक्स [[sysctl]] विकल्प के माध्यम से मॉड्यूल लोडिंग को अक्षम करने की अनुमति देता है <code>/proc/sys/kernel/modules_disabled</code>.<ref>{{cite web|title=Sysctl/kernel.txt|url=https://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=blob;f=Documentation/sysctl/kernel.txt;hb=HEAD|archive-url=https://archive.today/20130415070311/http://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=blob;f=Documentation/sysctl/kernel.txt;hb=HEAD|url-status=dead|archive-date=April 15, 2013|access-date=January 4, 2013}}</ref><ref>{{cite web
लिनक्स [[sysctl|सिससेटल]] विकल्प <code>/proc/sys/kernel/modules_disabled</code> के माध्यम से मॉड्यूल संचय को अक्षम करने की अनुमति देता है।<ref>{{cite web|title=Sysctl/kernel.txt|url=https://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=blob;f=Documentation/sysctl/kernel.txt;hb=HEAD|archive-url=https://archive.today/20130415070311/http://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=blob;f=Documentation/sysctl/kernel.txt;hb=HEAD|url-status=dead|archive-date=April 15, 2013|access-date=January 4, 2013}}</ref><ref>{{cite web
  | url = https://outflux.net/blog/archives/2012/11/28/clean-module-disabling/
  | url = https://outflux.net/blog/archives/2012/11/28/clean-module-disabling/
  | title = Clean module disabling
  | title = Clean module disabling
Line 61: Line 57:
  | author = Kees Cook
  | author = Kees Cook
  | publisher = outflux.net
  | publisher = outflux.net
  }}</ref> एक [[प्रारंभिक रैमडिस्क]] सिस्टम बूट पर मशीन के लिए आवश्यक विशिष्ट मॉड्यूल को लोड कर सकता है और फिर मॉड्यूल लोडिंग को अक्षम कर सकता है। यह सुरक्षा को एक अखंड कर्नेल के समान बनाता है। यदि कोई हमलावर initramfs को बदल सकता है, तो वे कर्नेल बाइनरी को बदल सकते हैं।
  }}</ref> एक [[प्रारंभिक रैमडिस्क|प्रारंभिक रैम]] सिस्टम बूट पर यंत्र के लिए आवश्यक विशिष्ट मॉड्यूल को संचयन कर सकता है, और तत्पश्चात् मॉड्यूल संचय को अक्षम कर सकता है। यह सुरक्षा को एक अखंड कर्नेल के समान बनाता है। यदि कोई आक्षेपक इनिटरैमफस को बदल सकता है, तो वह कर्नेल द्विचर को बदल सकते हैं।  


=== मैकोज़ ===
=== मैकोज़ ===
[[OS X Yosemite]] और बाद के रिलीज में, एक कर्नेल एक्सटेंशन को [[ कोड हस्ताक्षर ]] | कोड-हस्ताक्षरित [[एप्पल डेवलपर]] प्रमाणपत्र के साथ होना चाहिए जो इसके लिए एक विशेष पात्रता रखता है। ऐसा डेवलपर प्रमाणपत्र केवल अनुरोध पर Apple द्वारा प्रदान किया जाता है और स्वचालित रूप से Apple डेवलपर सदस्यों को नहीं दिया जाता है। यह सुविधा, जिसे kextsigning कहा जाता है, डिफ़ॉल्ट रूप से सक्षम है और यह कर्नेल को बूटिंग रोकने का निर्देश देती है यदि अहस्ताक्षरित कर्नेल एक्सटेंशन मौजूद हैं।<ref>{{Cite web|url=https://developer.apple.com/library/content/documentation/Security/Conceptual/System_Integrity_Protection_Guide/KernelExtensions/KernelExtensions.html|title=कर्नेल एक्सटेंशन|date=September 16, 2015|website=Mac Developer Library|publisher=Apple|archive-url=https://web.archive.org/web/20160817085001/https://developer.apple.com/library/mac/documentation/Security/Conceptual/System_Integrity_Protection_Guide/KernelExtensions/KernelExtensions.html|archive-date=August 17, 2016|url-status=live|access-date=September 29, 2016}}</ref> OS X El Capitan|{{Nowrap|OS X}} El Capitan और बाद में रिलीज, यह [[सिस्टम इंटीग्रिटी प्रोटेक्शन]] का हिस्सा है।
[[OS X Yosemite|ओएस एक्स योसेमाइट]] और पश्चात् के प्रकाशन में एक कर्नेल विस्तारण को [[ कोड हस्ताक्षर |सांकेतिक अंक चिह्नक]] के साथ हस्ताक्षरित करना पड़ता है, जो इसके लिए एक विशेष "पात्रता" रखता है। ऐसा विकासक प्रमाणपत्र मात्र अनुरोध पर [[एप्पल डेवलपर|एप्पल विकासक]] के माध्यम प्रदान किया जाता है, और स्वचालित रूप से एप्पल के सदस्यों को नहीं दिया जाता है। यह सुविधा जिसे केक्स्त चिह्नक कहा जाता है, अभाव रूप से सक्षम है। यह कर्नेल को बूटिंग रोकने का निर्देश देती है, यदि अहस्ताक्षरित कर्नेल विस्तारण उपस्थित हैं।<ref>{{Cite web|url=https://developer.apple.com/library/content/documentation/Security/Conceptual/System_Integrity_Protection_Guide/KernelExtensions/KernelExtensions.html|title=कर्नेल एक्सटेंशन|date=September 16, 2015|website=Mac Developer Library|publisher=Apple|archive-url=https://web.archive.org/web/20160817085001/https://developer.apple.com/library/mac/documentation/Security/Conceptual/System_Integrity_Protection_Guide/KernelExtensions/KernelExtensions.html|archive-date=August 17, 2016|url-status=live|access-date=September 29, 2016}}</ref> {{Nowrap|ओएस एक्स}} एल कैप्टन और पश्चात् में प्रकाशन यह [[सिस्टम इंटीग्रिटी प्रोटेक्शन|सिस्टम अखंडता संरक्षण]] का खंड है।
 
MacOS के पुराने संस्करणों में, या यदि kext हस्ताक्षर अक्षम है, कर्नेल एक्सटेंशन बंडल में लोड करने योग्य कर्नेल मॉड्यूल को गैर-रूट उपयोगकर्ताओं द्वारा लोड किया जा सकता है यदि OSBundleAllowUserLoad गुण बंडल की संपत्ति सूची में True पर सेट है।<ref>{{cite web|title=कर्नेल एक्सटेंशन के लिए Info.plist गुण|url=https://developer.apple.com/library/mac/#documentation/Darwin/Conceptual/KEXTConcept/Articles/infoplist_keys.html|publisher=[[Apple Inc.]]|access-date=September 27, 2012|url-status=live|archive-url=https://web.archive.org/web/20120926232217/http://developer.apple.com/library/mac/#documentation/Darwin/Conceptual/KEXTConcept/Articles/infoplist_keys.html|archive-date=September 26, 2012}}</ref> हालाँकि, यदि निष्पादन योग्य कोड फ़ाइल सहित बंडल की कोई भी फ़ाइल रूट और ग्रुप व्हील के स्वामित्व में नहीं है, या समूह या अन्य द्वारा लिखने योग्य है, तो कर्नेल लोड करने योग्य मॉड्यूल को लोड करने का प्रयास विफल हो जाएगा।<ref>{{man|8|kextload|Darwin}}</ref>
 


मैकोज़ के पूर्वकालीन संस्करणों में यदि केईएक्सटी चिह्नक अक्षम है तो, कर्नेल विस्तारण बंडल में संचयन करने योग्य कर्नेल मॉड्यूल को निराधार उपयोगकर्ताओं के माध्यम से संचयन किया जा सकता है। यदि बंडल की संपत्ति सूची मे ओएस बंडल उपयोगकर्ता भार गुण वास्तविक पर सेट है।<ref>{{cite web|title=कर्नेल एक्सटेंशन के लिए Info.plist गुण|url=https://developer.apple.com/library/mac/#documentation/Darwin/Conceptual/KEXTConcept/Articles/infoplist_keys.html|publisher=[[Apple Inc.]]|access-date=September 27, 2012|url-status=live|archive-url=https://web.archive.org/web/20120926232217/http://developer.apple.com/library/mac/#documentation/Darwin/Conceptual/KEXTConcept/Articles/infoplist_keys.html|archive-date=September 26, 2012}}</ref> चूंकि यदि निष्पादन योग्य सांकेतिक अंक फाइल सहित बंडल की कोई भी फाइल, मार्ग और समूह चक्र के स्वामित्व में नहीं है, अथवा समूह अन्य के माध्यम से लिखने योग्य है, तो कर्नेल संचयन करने योग्य मॉड्यूल को संचयन करने का प्रयास विफल हो जाएगा।<ref>{{man|8|kextload|Darwin}}</ref>
=== सोलारिस ===
=== सोलारिस ===
कर्नेल मॉड्यूल में वैकल्पिक रूप से एक क्रिप्टोग्राफ़िक हस्ताक्षर ELF अनुभाग हो सकता है जो सत्यापित बूट नीति सेटिंग्स के आधार पर लोड पर सत्यापित होता है। कर्नेल यह लागू कर सकता है कि मॉड्यूल क्रिप्टोग्राफ़िक रूप से विश्वसनीय प्रमाणपत्रों के एक सेट द्वारा हस्ताक्षरित हैं; कुछ SPARC आधारित प्लेटफॉर्म पर ILOM में OS के बाहर विश्वसनीय प्रमाणपत्रों की सूची रखी जाती है। उपयोक्तास्थान द्वारा शुरू किया गया कर्नेल मॉड्यूल लोडिंग विश्वसनीय पथ से तभी संभव है जब सिस्टम सक्षम अपरिवर्तनीय वैश्विक क्षेत्र सुविधा के साथ चल रहा हो।
कर्नेल मॉड्यूल में वैकल्पिक रूप से एक गुप्‍तलेखीय चिह्नक ईएलएफ अनुभाग हो सकता है, जो सत्यापित बूट नीति समायोजन के आधार पर संचयन पर सत्यापित होता है। कर्नेल यह प्रयुक्त कर सकता है कि मॉड्यूल गुप्‍तलेखीय रूप से विश्वसनीय प्रमाणपत्रों के एक सेट के माध्यम से सांकेतिक हैं। कुछ तत्परता आधारित पटल पर आईएलओएम में ओएस के बाह्य विश्वसनीय प्रमाणपत्रों की सूची रखी जाती है। उपयोक्ता स्थान के माध्यम से प्रारंभ किया गया कर्नेल मॉड्यूल संचय विश्वसनीय मार्ग से तभी संभव है, जब सिस्टम सक्षम अपरिवर्तनीय वैश्विक क्षेत्र सुविधा के साथ ऑपरेटिंग कर रहा हो।


== यह भी देखें ==
== यह भी देखें ==
* नेटवेयर लोड करने योग्य मॉड्यूल
* नेटवेयर संचयन करने योग्य मॉड्यूल


== संदर्भ ==
== संदर्भ ==
Line 83: Line 77:
{{Linux kernel}}
{{Linux kernel}}
{{FreeBSD}}
{{FreeBSD}}
[[Category: FreeBSD]] [[Category: लिनक्स कर्नेल]] [[Category: ऑपरेटिंग सिस्टम कर्नेल]]


[[Category: Machine Translated Page]]
[[Category:Collapse templates]]
[[Category:Created On 15/05/2023]]
[[Category:Created On 15/05/2023]]
[[Category:FreeBSD]]
[[Category:Lua-based templates]]
[[Category:Machine Translated Page]]
[[Category:Navigational boxes| ]]
[[Category:Navigational boxes without horizontal lists]]
[[Category:Pages with empty portal template]]
[[Category:Pages with script errors]]
[[Category:Portal-inline template with redlinked portals]]
[[Category:Sidebars with styles needing conversion]]
[[Category:Template documentation pages|Documentation/doc]]
[[Category:Templates Vigyan Ready]]
[[Category:Templates generating microformats]]
[[Category:Templates that add a tracking category]]
[[Category:Templates that are not mobile friendly]]
[[Category:Templates that generate short descriptions]]
[[Category:Templates using TemplateData]]
[[Category:Webarchive template wayback links]]
[[Category:Wikipedia metatemplates]]
[[Category:ऑपरेटिंग सिस्टम कर्नेल]]
[[Category:लिनक्स कर्नेल]]

Latest revision as of 14:08, 15 June 2023

कम्प्यूटिंग में संचयन करने योग्य कर्नेल मॉड्यूल (एलकेएम) एक ऑब्जेक्ट फाइल है। जिसमें ऑपरेटिंग सिस्टम के ऑपरेटिंग वाले कर्नेल (ऑपरेटिंग सिस्टम), अथवा तथाकथित मुख्य कर्नेल के विस्तार के लिए सांकेतिक अंक होता है। एलकेएम सामान्यतः नवीनतम कंप्यूटर हार्डवेयर (उपकरण संचालक) के रूप में अथवा फाइल सिस्टम के लिए अथवा सिस्टम आह्वान समावेशन के समर्थन समावेशन के लिए प्रयोग किया जाता है। जब एलकेएम के माध्यम से प्रदान की जाने वाली कार्यक्षमता की आवश्यकता नहीं होती है, तो इसे कंप्यूटर मेमोरी और अन्य संसाधनों को मुक्त करने के लिए असंचयन किया जा सकता है।

अधिकांश वर्तमान यूनिक्स प्रतिरूप प्रणालियाँ और माइक्रोसॉफ्ट विंडोज़ विभिन्न नामों के अनुसार संचयन करने योग्य कर्नेल मॉड्यूल का समर्थन करते हैं, जैसे कि फ्री बीडीएस में कर्नेल संचयन करने योग्य मॉड्यूल (केएलडी), मैकोज़ में कर्नेल विस्तारण (केईएक्सटी) (चूंकि तृतीय-पक्ष मॉड्यूल के लिए समर्थन छोड़ा जा रहा है)[1] है।[2] ऐक्स में कर्नेल विस्तारण मॉड्यूल, एचपी-यूएक्स में गतिशील रूप से संचयन करने योग्य कर्नेल मॉड्यूल,[3] विंडोज़ एनटी में कर्नेल- सिस्टम संचालक[4] और वीएक्स कार्य में डाटा प्राप्त करने योग्य कर्नेल मॉड्यूल ( डीकेएम) को कर्नेल संचयन करने योग्य मॉड्यूल ( अथवा केएलएम) के रूप में भी समझा जाता है, और मात्र कर्नेल मॉड्यूल (केएमओडी) के रूप में समझा जाता है।

लाभ

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

हानि

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

विभिन्न ऑपरेटिंग सिस्टम में कार्यान्वयन

लिनक्स

लिनक्स में संचयन करने योग्य कर्नेल मॉड्यूल modprobe आदेश माध्यम से संचयन (और असंचयन ) किये जाते हैं। वह /lib/modules अथवा /usr/lib/modules में स्थित हैं और संस्करण 2.6 के पश्चात् से .ko (कर्नेल उद्देश्य ) मे उनका विस्तार हो गया है। विगत संस्करणों में .o वृद्धि का उपयोग किया गया था।[5] lsmod अधिकार संचयन कर्नेल मॉड्यूल को सूचीबद्ध करता है। आपातकालीन स्थितियों में जब सिस्टम बूट करने में विफल रहता है। उदाहरण के रूप मे टूटे हुए मॉड्यूल है। विशिष्ट मॉड्यूल को कर्नेल बूट पैरामीटर सूची को संशोधित करके सक्षम अथवा अक्षम किया जा सकता है (उदाहरण के रूप मे कि ज़ीएनयू ज़ीआरयूबी का प्रयोग करके, ज़ीआरयूबी प्रारंभ मेनू में 'ई' दबाकर तत्पश्चात् कर्नेल पैरामीटर रेखा को संपादित करके)।

लाइसेंस उद्देश्य

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

स्वत्वाधिकारी अथवा अ-जीपीएल-संगत मॉड्यूल संचयन करने से ऑपरेटिंग कर्नेल में ' टेंट ' फ्लैग स्थापित हो जाएगा।[6][7] जिसका अर्थ है कि अनुभव की गई किसी भी समस्या, दोष अथवा त्रुटि की अनुरक्षकों के माध्यम से परीक्षण किये जाने की संभावना कम होगी।[8][9] एलकेएम प्रभावी रूप से ऑपरेटिंग कर्नेल का खंड बन जाते हैं, इसलिए कर्नेल डाटा संरचनाओं को दूषित कर सकते हैं और ऐसे दोष अथवा त्रुटि उत्पन्न कर सकते हैं। यदि मॉड्यूल वास्तव में स्वत्वाधिकारी है तो इनका परीक्षण नहीं की जा सकता है ।

लिनक्सेंट विवाद

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

MODULE_LICENSE("GPL\0for files in the \"GPL\" directory; for others, only LICENSE file applies");

कर्नेल के माध्यम से प्रयोग किये गए श्रृंखला समानता सांकेतिक अंक ने उस समय यह निर्धारित करने का प्रयास किया कि क्या मॉड्यूल ज़ीपीएल संंवृत हो गया था। जब यह एक नल टर्मिनेटर (\0) तक पहुंच गया था। इसलिए यह सोचकर मूर्ख बनाया गया कि मॉड्यूल अपने लाइसेंस को मात्र ज़ीपीएल घोषित कर रहा है।[10]

फ्री बीएसडी

फ्री बीडीएस के लिए कर्नेल मॉड्यूल /boot/kernel/ के साथ वितरित मॉड्यूल के लिए, ऑपरेटिंग सिस्टम अथवा सामान्यतः /boot/modules/ फ्री बीडीएस पत्तन अथवा फ्री बीडीएस संवेष्टन से स्थापित मॉड्यूल के लिए, अथवा स्वत्वाधिकारी अथवा अन्यथा द्विचर -एकमात्र मॉड्यूल के लिए अंतर्गत संग्रहीत हैं। फ्री बीडीएस कर्नेल मॉड्यूल में सामान्यतः विस्तारण .ko होता है। एक बार यंत्र बूट हो जाने के पश्चात्, उन्हें kldload के साथ संचयन किया जा सकता है, और kldunload आदेश के साथ अभारित और kldstat के साथ सूचीबद्ध किया जा सकता है। कर्नेल प्रारंभ होने से पूर्व मॉड्यूल को संचयक से स्वचालित रूप से (/boot/loader.conf के माध्यम से) अथवा हाथ से संचयन किया जा सकता है।

मैकोज़

मैकोज़ में कुछ संचयन करने योग्य कर्नेल मॉड्यूल स्वचालित रूप से संचयन किये जा सकते हैं। संचयन करने योग्य कर्नेल मॉड्यूल को kextload के माध्यम से भी संचयन किया जा सकता है। उन्हें kextstat आदेश के माध्यम से सूचीबद्ध किया जा सकता है। संचयन करने योग्य कर्नेल मॉड्यूल विस्तारण .kext. विस्तारण के साथ बंडल (मैकोज़) में स्थित हैं। ऑपरेटिंग सिस्टम के साथ आपूर्ति दिए गए मॉड्यूल /System/Library/Extensions निर्देशिका मे संग्रहित किए जाते है। तीसरे पक्ष के माध्यम से आपूर्ति किये गए मॉड्यूल विभिन्न अन्य निर्देशिकाओं में हैं।

नेटवेयर

नेटवेयर कर्नेल मॉड्यूल को नेटवेयर संचयन करने योग्य मॉड्यूल (एनएलएम) कहा जाता है। एनएलएम को संचयन अधिकार के माध्यम से नेटवेयर कर्नेल में संचयन किया जाता है और असंचयन अधिकार के माध्यम से हटाया जाता है। modules अधिकार वर्तमान में संचयन किये गए कर्नेल मॉड्यूल को सूचीबद्ध करता है। एनएलएम नेटवेयर परिसेवक पर निर्दिष्ट किसी भी वैध अन्वेषक मार्ग में रह सकते हैं, और उनके पास फाइल नाम विस्तारण के रूप में .NLM है।

वीएक्स कार्य

एक डाटा प्राप्त करने योग्य कर्नेल मॉड्यूल ( डीकेएम) प्रकार की परियोजना एक निषिद्ध फाइल उत्पन्न करने के लिए बनाई जा सकती है जिसे पश्चात् में एलडी अधिकार का प्रयोग करके कर्नेल स्थान पर संचयन किया जा सकता है। डाटा प्राप्त करने योग्य कर्नेल मॉड्यूल एनएलडी अधिकार का प्रयोग करके असंचयन किया जा सकता है।

सोलारिस

सोलारिस मे एक विन्यास योग्य कर्नेल मॉड्यूल संचयन मार्ग है, जो /platform/platform-name/kernel /kernel /usr/kernel लिए अभाव है। अधिकांश कर्नेल मॉड्यूल /kernel उपनिर्देशिकाओं के अंतर्गत रहते हैं। जिन्हें सिस्टम को उस बिंदु तक बूट करने के लिए आवश्यक नहीं माना जाता है जो इसमे इनइट प्रारंभ कर सकते हैं। प्रायः (किन्तु सदैव नहीं) /usr/kernel में पाया जाता हैं। डिबग कर्नेल निर्माण करते समय सिस्टम सक्रिय रूप से मॉड्यूल को असंचयन करने का प्रयास करता है।

द्विचर संगतता

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

अन्य ऑपरेटिंग सिस्टम जैसे सोलारिस (ऑपरेटिंग सिस्टम), फ्री बीडीएस, मैकोज़, और माइक्रोसॉफ्ट विंडोज़ कर्नेल एपीआई और एबीआई को अपेक्षाकृत स्थिर रखते हैं, और इस प्रकार इस समस्या से बचते हैं। उदाहरण के लिए, कर्नेल संस्करण 6.0 के विरुद्ध संकलित फ्री बीडीएस कर्नेल मॉड्यूल किसी अन्य फ्री बीडीएस 6.एक्स संस्करण पर पुनर्संकलन के रहित काम करेगा। उदाहरण के रूप मे 6.4 है। चूंकि वह अन्य प्रमुख संस्करणों के साथ संगत नहीं हैं और उन्हें फ्री बीडीएस 7.एक्स के साथ प्रयोग करने के लिए पुनः संकलित किया जाना चाहिए, क्योंकि एपीआई और एबीआई संगतता मात्र एक उपखंड के अंतर्गत ही बनाए रखी जाती है।

सुरक्षा

जब संचयन करने योग्य कर्नेल मॉड्यूल संचालित कर्नेल को संशोधित करने का एक सुविधाजनक सिस्टम है। आक्षेपक के माध्यम से उनकी प्रक्रिया ( कम्प्यूटिंग) अथवा कम्प्यूटर फाइल का पता लगाने से रोकने के लिए एक अनुबंध सिस्टम पर इसका दुरुपयोग किया जा सकता है। जिससे उन्हें सिस्टम पर नियंत्रण बनाए रखने की अनुमति मिलती है। अनेक रूटकिट एलकेएम का इस तरह से प्रयोग करते हैं। ध्यान दें कि, अधिकांश ऑपरेटिंग सिस्टम पर मॉड्यूल किसी भी तरह से विशेषाधिकार उन्नयन में सहायता नहीं करते हैं क्योंकि एलकेएम को संचयन करने के लिए उन्नत विशेषाधिकार की आवश्यकता होती है। वह मात्र आक्षेपक के लिए गुप्त रूप से प्रवेश को छुपाना आसान बनाते हैं।[11]

लिनक्स

लिनक्स सिससेटल विकल्प /proc/sys/kernel/modules_disabled के माध्यम से मॉड्यूल संचय को अक्षम करने की अनुमति देता है।[12][13] एक प्रारंभिक रैम सिस्टम बूट पर यंत्र के लिए आवश्यक विशिष्ट मॉड्यूल को संचयन कर सकता है, और तत्पश्चात् मॉड्यूल संचय को अक्षम कर सकता है। यह सुरक्षा को एक अखंड कर्नेल के समान बनाता है। यदि कोई आक्षेपक इनिटरैमफस को बदल सकता है, तो वह कर्नेल द्विचर को बदल सकते हैं।

मैकोज़

ओएस एक्स योसेमाइट और पश्चात् के प्रकाशन में एक कर्नेल विस्तारण को सांकेतिक अंक चिह्नक के साथ हस्ताक्षरित करना पड़ता है, जो इसके लिए एक विशेष "पात्रता" रखता है। ऐसा विकासक प्रमाणपत्र मात्र अनुरोध पर एप्पल विकासक के माध्यम प्रदान किया जाता है, और स्वचालित रूप से एप्पल के सदस्यों को नहीं दिया जाता है। यह सुविधा जिसे केक्स्त चिह्नक कहा जाता है, अभाव रूप से सक्षम है। यह कर्नेल को बूटिंग रोकने का निर्देश देती है, यदि अहस्ताक्षरित कर्नेल विस्तारण उपस्थित हैं।[14] ओएस एक्स एल कैप्टन और पश्चात् में प्रकाशन यह सिस्टम अखंडता संरक्षण का खंड है।

मैकोज़ के पूर्वकालीन संस्करणों में यदि केईएक्सटी चिह्नक अक्षम है तो, कर्नेल विस्तारण बंडल में संचयन करने योग्य कर्नेल मॉड्यूल को निराधार उपयोगकर्ताओं के माध्यम से संचयन किया जा सकता है। यदि बंडल की संपत्ति सूची मे ओएस बंडल उपयोगकर्ता भार गुण वास्तविक पर सेट है।[15] चूंकि यदि निष्पादन योग्य सांकेतिक अंक फाइल सहित बंडल की कोई भी फाइल, मार्ग और समूह चक्र के स्वामित्व में नहीं है, अथवा समूह अन्य के माध्यम से लिखने योग्य है, तो कर्नेल संचयन करने योग्य मॉड्यूल को संचयन करने का प्रयास विफल हो जाएगा।[16]

सोलारिस

कर्नेल मॉड्यूल में वैकल्पिक रूप से एक गुप्‍तलेखीय चिह्नक ईएलएफ अनुभाग हो सकता है, जो सत्यापित बूट नीति समायोजन के आधार पर संचयन पर सत्यापित होता है। कर्नेल यह प्रयुक्त कर सकता है कि मॉड्यूल गुप्‍तलेखीय रूप से विश्वसनीय प्रमाणपत्रों के एक सेट के माध्यम से सांकेतिक हैं। कुछ तत्परता आधारित पटल पर आईएलओएम में ओएस के बाह्य विश्वसनीय प्रमाणपत्रों की सूची रखी जाती है। उपयोक्ता स्थान के माध्यम से प्रारंभ किया गया कर्नेल मॉड्यूल संचय विश्वसनीय मार्ग से तभी संभव है, जब सिस्टम सक्षम अपरिवर्तनीय वैश्विक क्षेत्र सुविधा के साथ ऑपरेटिंग कर रहा हो।

यह भी देखें

  • नेटवेयर संचयन करने योग्य मॉड्यूल

संदर्भ

  1. "बहिष्कृत कर्नेल एक्सटेंशन और सिस्टम एक्सटेंशन विकल्प". Apple Inc. Retrieved 13 March 2021.
  2. "Kernel Extension Programming Topics: Introduction". Apple Inc. September 1, 2010. Archived from the original on May 4, 2013. Retrieved May 5, 2013.
  3. "गतिशील रूप से लोड करने योग्य कर्नेल मॉड्यूल का प्रबंधन और विकास करना". Hewlett-Packard. June 7, 2001.
  4. "ड्राइवर लोड होने पर क्या निर्धारित करता है". Microsoft Developer Network. Microsoft. November 21, 2012. Archived from the original on March 6, 2013. Retrieved May 5, 2013.
  5. "The Linux Kernel Module Programming Guide, section 2.2 "Compiling Kernel Modules"". Retrieved 2020-10-05.
  6. Linus Torvalds; et al. (2011-06-21). "Documentation/oops-tracing.txt". kernel.org. Archived from the original on 2011-10-02. Retrieved 2011-10-03.
  7. "दागी हुई गुठली". The Linux kernel user’s and administrator’s guide.
  8. Jonathan Corbet (2006-03-24). "यूजर स्पेस से टैनिंग". LWN.net. Archived from the original on 2011-11-16. Retrieved 2011-10-03.
  9. "Novell support documentation: Tainted kernel". 2007-07-26. Retrieved 2011-10-03.
  10. Jonathan Corbet (April 27, 2004). "Being honest with MODULE_LICENSE". LWN.net. Archived from the original on November 2, 2012. Retrieved October 30, 2012.
  11. Exploiting Loadable Kernel Modules Archived 2012-02-04 at the Wayback Machine
  12. "Sysctl/kernel.txt". Archived from the original on April 15, 2013. Retrieved January 4, 2013.
  13. Kees Cook (2012-11-28). "Clean module disabling". outflux.net. Retrieved 2020-10-05.
  14. "कर्नेल एक्सटेंशन". Mac Developer Library. Apple. September 16, 2015. Archived from the original on August 17, 2016. Retrieved September 29, 2016.
  15. "कर्नेल एक्सटेंशन के लिए Info.plist गुण". Apple Inc. Archived from the original on September 26, 2012. Retrieved September 27, 2012.
  16. kextload(8) – Darwin and macOS System Manager's Manual