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

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

GKI मॉड्यूल

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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