कर्नेल मॉड्यूल अवलोकन

दो प्रकार के कर्नेल मॉड्यूल हैं: हार्डवेयर अज्ञेय GKI मॉड्यूल और हार्डवेयर-विशिष्ट विक्रेता मॉड्यूल । यह पृष्ठ दोनों प्रकार के मॉड्यूल का अवलोकन प्रदान करता है।

जीकेआई मॉड्यूल

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

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

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

GKI मॉड्यूल के दो तार्किक प्रकार हैं: संरक्षित GKI मॉड्यूल और असुरक्षित GKI मॉड्यूल

संरक्षित जीकेआई मॉड्यूल

एक संरक्षित GKI मॉड्यूल Google द्वारा वितरित किया जाता है, यह किसी भी तरह से प्रतिबंधित नहीं है, और ऐसा व्यवहार करता है जैसे लोड होने के बाद इसे कर्नेल के साथ बनाया गया हो। इसके अतिरिक्त, संरक्षित जीकेआई मॉड्यूल में निम्नलिखित विशेषताएं हैं:

  • संरक्षित जीकेआई मॉड्यूल के पास गैर-केएमआई कर्नेल प्रतीकों तक पहुंच है जो विक्रेता मॉड्यूल या असुरक्षित जीकेआई मॉड्यूल के लिए उपलब्ध नहीं हैं।
  • संरक्षित जीकेआई मॉड्यूल उन प्रतीकों को निर्यात कर सकते हैं जो केएमआई सतह का हिस्सा बन जाते हैं, जब तक उन प्रतीकों को प्रतीक सूची में उद्धृत किया जाता है।
  • संरक्षित GKI मॉड्यूल को वेंडर मॉड्यूल द्वारा ओवरराइड नहीं किया जा सकता है।

एक संरक्षित GKI मॉड्यूल GKI मॉड्यूल का डिफ़ॉल्ट वर्ग है। KMI फ्रीज के समय सभी GKI मॉड्यूल को सुरक्षित माना जाता है।

असुरक्षित जीकेआई मॉड्यूल

एक असुरक्षित GKI मॉड्यूल को विक्रेता मॉड्यूल द्वारा ओवरराइड किया जा सकता है। KMI फ्रीज के बाद, एक संरक्षित GKI मॉड्यूल को असुरक्षित के रूप में पुनर्वर्गीकृत किया जा सकता है यदि GKI टीम तय करती है कि विक्रेताओं को डिफ़ॉल्ट कार्यान्वयन को एक ऐसे संस्करण के साथ ओवरराइड करने की आवश्यकता है जिसमें अपस्ट्रीम लिनक्स से नई सुविधाएँ शामिल हैं। अगली GKI रिलीज़ पर, असुरक्षित मॉड्यूल को Android कॉमन कर्नेल (ACK) में अपस्ट्रीम कोड लैंड करने के बाद संरक्षित के रूप में पुनर्वर्गीकृत किया जाता है। असुरक्षित जीकेआई मॉड्यूल में निम्नलिखित विशेषताएं हैं:

  • असुरक्षित जीकेआई मॉड्यूल के पास विक्रेता मॉड्यूल के रूप में निर्यात किए गए प्रतीकों तक समान पहुंच है।
  • असुरक्षित जीकेआई मॉड्यूल संरक्षित जीकेआई मॉड्यूल द्वारा निर्यात किए गए प्रतीकों को निर्यात नहीं कर सकते हैं।
  • असुरक्षित जीकेआई मॉड्यूल को किसी भी केएमआई इंटरफेस को कोर कर्नेल के हिस्से के रूप में संरक्षित करना चाहिए।
  • असुरक्षित GKI मॉड्यूल को वेंडर मॉड्यूल द्वारा ओवरराइड किया जा सकता है।

विक्रेता मॉड्यूल

एसओसी और डिवाइस-विशिष्ट कार्यक्षमता को लागू करने के लिए भागीदारों द्वारा एक विक्रेता मॉड्यूल दिया जाता है। कोई भी मौजूदा कर्नेल मॉड्यूल जो GKI कर्नेल के हिस्से के रूप में डिलीवर नहीं किया गया है, उसे वेंडर मॉड्यूल के रूप में डिलीवर किया जा सकता है।

चूंकि GKI प्रोजेक्ट का एक प्राथमिक लक्ष्य कोर कर्नेल में हार्डवेयर-विशिष्ट कोड को कम करना है, विक्रेता उम्मीद कर सकते हैं कि GKI कर्नेल में ऐसे मॉड्यूल शामिल नहीं होंगे जो स्पष्ट रूप से अपने स्वयं के हार्डवेयर का प्रबंधन कर रहे हैं। उदाहरण के लिए, विक्रेता ABC Inc, उम्मीद कर सकता है कि CONFIG_ABC_SOC_SUPPORT जैसे कॉन्फिग उनके समर्थन के बिना बिल्ट-इन या लोड करने योग्य GKI मॉड्यूल के रूप में सक्षम नहीं होंगे।

यदि ACK में एक कर्नेल ड्राइवर या ढांचा मौजूद है, लेकिन GKI कर्नेल के हिस्से के रूप में वितरित नहीं किया गया है, तो विक्रेता ड्राइवर को संशोधित कर सकते हैं और इसे विक्रेता मॉड्यूल के रूप में वितरित कर सकते हैं। गैर-विक्रेता-विशिष्ट मॉड्यूल के लिए इस तरह के संशोधनों को हतोत्साहित किया जाता है क्योंकि भविष्य में रिलीज़ में GKI कर्नेल के साथ समान कार्यक्षमता प्रदान की जा सकती है। जब GKI कर्नेल में वेंडर मॉड्यूल द्वारा प्रदान की गई कार्यक्षमता होती है, तो वेंडर मॉड्यूल लोड नहीं होगा। उदाहरण के लिए, Android 11 में GKI के लिए CONFIG_GREYBUS सेट नहीं है, इसलिए विक्रेता ग्रेबस विक्रेता मॉड्यूल वितरित कर सकते हैं। हालाँकि, CONFIG_GREYBUS को Android 12 में GKI बिल्ट-इन या मॉड्यूल के रूप में सक्षम किया जा सकता है, जिस स्थिति में ग्रेबस वेंडर मॉड्यूल लोड नहीं किए जाएंगे। एक सर्वोत्तम अभ्यास गैर-विक्रेता-विशिष्ट ड्राइवरों के अपस्ट्रीम संस्करण का उपयोग करना है यदि वे विक्रेता मॉड्यूल के रूप में वितरित किए जाते हैं।

आप वेंडर मॉड्यूल को vendor या vendor_boot इमेज में डिलीवर कर सकते हैं। बूट प्रक्रिया के आरंभ में आवश्यक मॉड्यूल vendor_boot में होने चाहिए। vendor_boot से मॉड्यूल लोड करने से जुड़ी एक बूट-टाइम लागत है।