कर्नेल मॉड्यूल दो तरह के होते हैं: हार्डवेयर के हिसाब से काम करने वाले GKI मॉड्यूल और हार्डवेयर के हिसाब से काम करने वाले वेंडर मॉड्यूल. इस पेज पर, दोनों तरह के मॉड्यूल के बारे में खास जानकारी दी गई है.
GKI मॉड्यूल
जेनरिक कर्नेल इमेज (जीकेआई) मॉड्यूल का इस्तेमाल, जेनरिक कोर कर्नेल से अलग, बूट के लिए ज़रूरी नहीं कर्नेल की सुविधाएं देने के लिए किया जाता है. GKI मॉड्यूल की मदद से, इस्तेमाल करने के लिए खास कर्नेल की सुविधाएं चुनी जा सकती हैं. इससे, कर्नेल इमेज का साइज़ और रनटाइम मेमोरी की खपत कम हो जाती है. साइज़ में कमी आने की वजह से, GKI, Android Go डिवाइसों और सीमित रिसॉर्स वाले अन्य फ़ॉर्म फ़ैक्टर के लिए बेहतर है.
GKI मॉड्यूल, वेंडर को एक ऐसा तरीका भी उपलब्ध कराते हैं जिससे वे KMI फ़्रीज़ माइलस्टोन के बाद, अपस्ट्रीम की नई सुविधाओं को शामिल कर सकें. किसी दूसरी इमेज को बनाए बिना, पहले से मौजूद कोड को बदला नहीं जा सकता. वहीं, मॉड्यूल के तौर पर डिलीवर किए गए कोड को किसी दूसरे मॉड्यूल से बदला जा सकता है.
GKI मॉड्यूल, रन टाइम पर GKI और अन्य मॉड्यूल के बीच अंतर करने के लिए, कर्नेल के बिल्ड टाइम साइनिंग इन्फ़्रास्ट्रक्चर का इस्तेमाल करते हैं. बिना हस्ताक्षर वाले मॉड्यूल तब तक लोड किए जा सकते हैं, जब तक वे सिर्फ़ अनुमति वाली सूची में मौजूद या बिना हस्ताक्षर वाले दूसरे मॉड्यूल से मिले सिंबल का इस्तेमाल करते हैं.
GKI मॉड्यूल दो तरह के होते हैं: सुरक्षित GKI मॉड्यूल और सुरक्षित नहीं किया गया GKI मॉड्यूल.
सुरक्षित GKI मॉड्यूल
सुरक्षित GKI मॉड्यूल, Google डिलीवर करता है. इस पर किसी तरह की पाबंदी नहीं होती. साथ ही, लोड होने के बाद यह ऐसा काम करता है जैसे इसे कर्नेल के साथ बनाया गया हो. इसके अलावा, सुरक्षित GKI मॉड्यूल में ये सुविधाएं होती हैं:
- सुरक्षित GKI मॉड्यूल के पास ऐसे नॉन-केएमआई कर्नेल सिंबल का ऐक्सेस होता है जो वेंडर मॉड्यूल या असुरक्षित GKI मॉड्यूल के लिए उपलब्ध नहीं होते.
- सुरक्षित GKI मॉड्यूल, ऐसे सिंबल एक्सपोर्ट कर सकते हैं जो KMI प्लैटफ़ॉर्म का हिस्सा बन जाते हैं. हालांकि, ऐसा तब ही होता है, जब उन सिंबल को सिंबल की सूची में शामिल किया गया हो.
- सुरक्षित GKI मॉड्यूल को वेंडर मॉड्यूल से बदला नहीं जा सकता.
सुरक्षित GKI मॉड्यूल, GKI मॉड्यूल की डिफ़ॉल्ट क्लास है. KMI फ़्रीज़ होने के समय, सभी GKI मॉड्यूल को सुरक्षित माना जाता है.
असुरक्षित GKI मॉड्यूल
बिना सुरक्षा वाले GKI मॉड्यूल को वेंडर मॉड्यूल से बदला जा सकता है. केएमआई फ़्रीज़ होने के बाद, अगर GKI टीम यह तय करती है कि वेंडर को डिफ़ॉल्ट तौर पर लागू किए गए वर्शन को बदलकर, अपस्ट्रीम Linux की नई सुविधाओं वाले वर्शन का इस्तेमाल करना होगा, तो हो सकता है कि सुरक्षित GKI मॉड्यूल को असुरक्षित के तौर पर फिर से कैटगरी में रखा जाए. GKI की अगली रिलीज़ में, Android Common Kernel (ACK) में अपस्ट्रीम कोड के आने के बाद, बिना सुरक्षा वाले मॉड्यूल को सुरक्षित के तौर पर फिर से बांटा जाता है. बिना सुरक्षा वाले GKI मॉड्यूल में ये सुविधाएं होती हैं:
- बिना सुरक्षा वाले GKI मॉड्यूल के पास, एक्सपोर्ट किए गए सिंबल का वही ऐक्सेस होता है जो वेंडर के मॉड्यूल के पास होता है.
- बिना सुरक्षा वाले GKI मॉड्यूल, सुरक्षित GKI मॉड्यूल से एक्सपोर्ट किए गए सिंबल एक्सपोर्ट नहीं कर सकते.
- बिना सुरक्षा वाले GKI मॉड्यूल को, किसी भी KMI इंटरफ़ेस को कोर कर्नेल का हिस्सा मानकर उसे सुरक्षित रखना चाहिए.
- बिना सुरक्षा वाले GKI मॉड्यूल, वेंडर मॉड्यूल से बदले जा सकते हैं.
वेंडर मॉड्यूल
पार्टनर, SoC और डिवाइस के हिसाब से सुविधाओं को लागू करने के लिए, वेंडर मॉड्यूल डिलीवर करते हैं. GKI कर्नेल के हिस्से के तौर पर डिलीवर नहीं किया गया कोई भी मौजूदा कर्नेल मॉड्यूल, वेंडर मॉड्यूल के तौर पर डिलीवर किया जा सकता है.
GKI प्रोजेक्ट का एक मुख्य लक्ष्य, कोर कर्नेल में हार्डवेयर के हिसाब से कोड को कम करना है. इसलिए, वेंडर यह उम्मीद कर सकते हैं कि GKI कर्नेल में ऐसे मॉड्यूल शामिल नहीं होंगे जो साफ़ तौर पर अपने हार्डवेयर को मैनेज कर रहे हैं. उदाहरण के लिए, वेंडर ABC Inc. को उम्मीद हो सकती है कि CONFIG_ABC_SOC_SUPPORT
जैसे कॉन्फ़िगरेशन, उनके बिना, GKI के बिल्ट-इन या लोड किए जा सकने वाले मॉड्यूल के तौर पर चालू नहीं होंगे.
अगर ACK में कोई कर्नेल ड्राइवर या फ़्रेमवर्क मौजूद है, लेकिन उसे GKI कर्नेल के हिस्से के तौर पर डिलीवर नहीं किया जाता है, तो वेंडर उस ड्राइवर में बदलाव कर सकते हैं और उसे वेंडर मॉड्यूल के तौर पर डिलीवर कर सकते हैं. ऐसे बदलाव, वेंडर के हिसाब से नहीं बनाए जाने चाहिए, क्योंकि आने वाले समय में GKI कर्नेल के साथ ये सुविधाएं उपलब्ध कराई जा सकती हैं. जब GKI कर्नेल में वेंडर मॉड्यूल की सुविधाएं मौजूद होती हैं, तो वेंडर मॉड्यूल लोड नहीं होगा. उदाहरण के लिए,
CONFIG_GREYBUS
को Android 11 में GKI के लिए सेट नहीं किया गया है, इसलिए
वेंडर, greybus वेंडर मॉड्यूल डिलीवर कर सकते हैं. हालांकि, Android 12 में CONFIG_GREYBUS
को GKI के बिल्ट-इन या मॉड्यूल के तौर पर चालू किया जा सकता है. ऐसे में, greybus वेंडर मॉड्यूल लोड नहीं होंगे. अगर वेंडर मॉड्यूल के तौर पर डिलीवर किए गए ड्राइवर, वेंडर के हिसाब से नहीं हैं, तो सबसे सही तरीका यह है कि उनके अपस्ट्रीम वर्शन का इस्तेमाल किया जाए.
वेंडर मॉड्यूल को vendor
या
vendor_boot
इमेज में डिलीवर किया जा सकता है. बूट प्रोसेस के शुरुआती दौर में ज़रूरी मॉड्यूल, vendor_boot
में होने चाहिए.
vendor_boot
से मॉड्यूल लोड करने पर, बूट-टाइम की लागत आती है.