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

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

GKI मॉड्यूल

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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