कर्नेल मॉड्यूल की खास जानकारी

कर्नेल मॉड्यूल दो तरह के होते हैं: हार्डवेयर ऐग्नोस्टिक GKI मॉड्यूल और हार्डवेयर के हिसाब से तय किए गए वेंडर मॉड्यूल. इस पेज पर, दोनों तरह के मॉड्यूल के बारे में खास जानकारी दी गई है.

GKI मॉड्यूल

जेनेरिक कर्नल इमेज (जीकेआई) मॉड्यूल का इस्तेमाल, बूट करने के लिए ज़रूरी नहीं है. ये मॉड्यूल, जेनेरिक कोर कर्नल से अलग कर्नल की सुविधाएं डिलीवर करते हैं. GKI मॉड्यूल की मदद से, इस्तेमाल करने के लिए कर्नेल की खास सुविधाएं चुनी जा सकती हैं. इससे कर्नेल इमेज का साइज़ और रनटाइम मेमोरी की खपत कम हो जाती है. साइज़ कम होने की वजह से, GKI, Android Go डिवाइसों और अन्य डिवाइसों के लिए बेहतर है.

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

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

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

सुरक्षित GKI मॉड्यूल

सुरक्षित GKI मॉड्यूल को Google डिलीवर करता है. इस पर किसी तरह का प्रतिबंध नहीं होता. साथ ही, यह इस तरह काम करता है जैसे इसे कर्नल के साथ बनाया गया हो. इसके अलावा, सुरक्षित GKI मॉड्यूल में ये विशेषताएं होती हैं:

  • सुरक्षित GKI मॉड्यूल के पास, ऐसे नॉन-केएमआई कर्नेल सिंबल का ऐक्सेस होता है जो वेंडर मॉड्यूल या असुरक्षित GKI मॉड्यूल के लिए उपलब्ध नहीं होते.
  • सुरक्षित किए गए जीकेआई मॉड्यूल, ऐसे सिंबल एक्सपोर्ट कर सकते हैं जो केएमआई सर्फ़ेस का हिस्सा बन जाते हैं. हालांकि, ऐसा तब तक किया जा सकता है, जब तक उन सिंबल को सिंबल की सूची में शामिल किया गया हो.
  • वेंडर मॉड्यूल, सुरक्षित किए गए GKI मॉड्यूल को नहीं बदल सकते.

सुरक्षित GKI मॉड्यूल, GKI मॉड्यूल की डिफ़ॉल्ट क्लास होती है. केएमआई फ़्रीज़ होने के समय, सभी जीकेआई मॉड्यूल को सुरक्षित माना जाता है.

सुरक्षा से जुड़ी जानकारी के बिना GKI मॉड्यूल

सुरक्षा से जुड़े अपडेट के बिना GKI मॉड्यूल को वेंडर मॉड्यूल से बदला जा सकता है. केएमआई फ़्रीज़ होने के बाद, सुरक्षित जीकेआई मॉड्यूल को असुरक्षित के तौर पर फिर से क्लासिफ़ाई किया जा सकता है. ऐसा तब होता है, जब जीकेआई टीम यह तय करती है कि वेंडर को डिफ़ॉल्ट तौर पर लागू किए गए वर्शन को ऐसे वर्शन से बदलना होगा जिसमें अपस्ट्रीम Linux की नई सुविधाएं शामिल हों. अगली GKI रिलीज़ में, बिना सुरक्षा वाले मॉड्यूल को फिर से सुरक्षित के तौर पर क्लासिफ़ाई किया जाता है. ऐसा तब होता है, जब अपस्ट्रीम कोड, Android Common Kernel (ACK) में शामिल हो जाता है. बिना सुरक्षा वाले GKI मॉड्यूल में ये विशेषताएं होती हैं:

  • सुरक्षा से जुड़े अपडेट न पाने वाले GKI मॉड्यूल को, एक्सपोर्ट किए गए सिंबल का वही ऐक्सेस मिलता है जो वेंडर मॉड्यूल को मिलता है.
  • बिना सुरक्षा वाले GKI मॉड्यूल, सुरक्षित GKI मॉड्यूल से एक्सपोर्ट किए गए सिंबल एक्सपोर्ट नहीं कर सकते.
  • बिना सुरक्षा वाले जीकेआई मॉड्यूल को, केएमआई इंटरफ़ेस को इस तरह से सुरक्षित रखना होगा जैसे वे कोर कर्नल का हिस्सा हों.
  • सुरक्षा से जुड़े अपडेट के बिना GKI मॉड्यूल को वेंडर मॉड्यूल से बदला जा सकता है.

वेंडर मॉड्यूल

वेंडर मॉड्यूल, पार्टनर डिलीवर करते हैं. इससे SoC और डिवाइस के हिसाब से सुविधाएं लागू की जाती हैं. मौजूदा कर्नेल मॉड्यूल, जीकेआई कर्नेल के हिस्से के तौर पर डिलीवर नहीं किया जाता है. इसे वेंडर मॉड्यूल के तौर पर डिलीवर किया जा सकता है.

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

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

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