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

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

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 में GKI के लिए CONFIG_GREYBUS सेट नहीं है. इसलिए, वेंडर greybus वेंडर मॉड्यूल डिलीवर कर सकते हैं. हालांकि, Android 12 में CONFIG_GREYBUS को GKI में पहले से मौजूद या मॉड्यूल के तौर पर चालू किया जा सकता है. ऐसे में, Greybus वेंडर मॉड्यूल लोड नहीं होंगे. सबसे सही तरीका यह है कि वेंडर के हिसाब से तय नहीं किए गए ड्राइवर के अपस्ट्रीम वर्शन का इस्तेमाल किया जाए. ऐसा तब करें, जब उन्हें वेंडर मॉड्यूल के तौर पर डिलीवर किया गया हो.

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