जेनेरिक कर्नेल इमेज (GKI) प्रोजेक्ट

एंड्रॉइड कॉमन कर्नेल (एसीके) सभी एंड्रॉइड उत्पाद कर्नेल के लिए आधार हैं। विक्रेता और डिवाइस कर्नेल एसीके के डाउनस्ट्रीम हैं। विक्रेता कर्नेल स्रोत कोड को संशोधित करके और डिवाइस ड्राइवर जोड़कर एसओसी और परिधीय उपकरणों के लिए समर्थन जोड़ते हैं। ये संशोधन इस बिंदु तक व्यापक हो सकते हैं कि किसी डिवाइस पर चल रहे कोड का 50% आउट-ऑफ-ट्री कोड है और अपस्ट्रीम लिनक्स या AOSP सामान्य कर्नेल से नहीं है।

इस प्रकार, एक डिवाइस कर्नेल में निम्न शामिल हैं:

  • अपस्ट्रीम: कर्नेल.org से लिनक्स कर्नेल
  • एओएसपी: एओएसपी सामान्य कर्नेल से अतिरिक्त एंड्रॉइड-विशिष्ट पैच
  • विक्रेता: एसओसी और विक्रेताओं से परिधीय सक्षमता और अनुकूलन पैच
  • OEM/डिवाइस: अतिरिक्त डिवाइस ड्राइवर और अनुकूलन

लगभग हर डिवाइस में एक कस्टम कर्नेल होता है। यह कर्नेल विखंडन है।

Android कर्नेल पदानुक्रम विखंडन की ओर ले जाता है

चित्र 1. Android कर्नेल पदानुक्रम विखंडन की ओर ले जाता है

विखंडन की लागत

कर्नेल विखंडन का Android समुदाय पर कई नकारात्मक प्रभाव पड़ता है।

सुरक्षा अद्यतन श्रम गहन हैं

Android सुरक्षा बुलेटिन (ASB) में उद्धृत सुरक्षा पैच को प्रत्येक डिवाइस कर्नेल में बैकपोर्ट किया जाना चाहिए। हालांकि, कर्नेल विखंडन के कारण, क्षेत्र में Android उपकरणों के लिए सुरक्षा सुधारों का प्रचार करना बेहद महंगा है।

लंबे समय तक समर्थित अपडेट को मर्ज करना मुश्किल

लॉन्ग-टर्म सपोर्टेड (LTS) रिलीज़ में सुरक्षा सुधार और अन्य महत्वपूर्ण बग फिक्स शामिल हैं। एलटीएस रिलीज के साथ अद्यतित रहना सुरक्षा सुधार प्रदान करने का सबसे प्रभावी तरीका साबित हुआ है। पिक्सेल उपकरणों पर, यह पता चला कि ASB में रिपोर्ट की गई कर्नेल सुरक्षा समस्याओं में से 90% उन उपकरणों के लिए पहले से ही ठीक कर दी गई थी जो अद्यतित रहते हैं।

हालांकि, डिवाइस कर्नेल में सभी कस्टम संशोधनों के साथ, एलटीएस फ़िक्सेस को डिवाइस कर्नेल में मर्ज करना मुश्किल है।

Android प्लेटफ़ॉर्म रिलीज़ अपग्रेड को रोकता है

फ़्रेग्मेंटेशन नई Android सुविधाओं के लिए कठिन बना देता है जिसके लिए फ़ील्ड में उपकरणों में कर्नेल परिवर्तन जोड़ने की आवश्यकता होती है। एंड्रॉइड फ्रेमवर्क कोड को यह मान लेना चाहिए कि पांच कर्नेल संस्करण समर्थित हैं और नए प्लेटफॉर्म रिलीज के लिए कोई कर्नेल परिवर्तन नहीं किया गया था (एंड्रॉइड 10 3.18, 4.4, 4.9, 4.14 और 4.19 कर्नेल का समर्थन करता है, जो कुछ मामलों में नहीं किया गया है 2017 में एंड्रॉइड 8 के बाद से नई सुविधाओं के साथ बढ़ाया गया)।

अपस्ट्रीम लिनक्स में कर्नेल परिवर्तनों को वापस योगदान देना मुश्किल है

कर्नेल में किए जा रहे सभी परिवर्तनों के साथ, अधिकांश फ्लैगशिप डिवाइस कर्नेल संस्करण के साथ शिप करते हैं जो पहले से ही कम से कम 18 महीने पुराना है। उदाहरण के लिए, 4.14 कर्नेल को कर्नेल. kernel.org द्वारा 2017 के नवंबर में जारी किया गया था और 2019 के वसंत में भेजे गए 4.14 कर्नेल का उपयोग करने वाला पहला एंड्रॉइड फोन।

अपस्ट्रीम कर्नेल रिलीज़ और उत्पादों के बीच यह लंबा विलंब Android समुदाय के लिए आवश्यक सुविधाओं और ड्राइवरों को अपस्ट्रीम कर्नेल में फीड करना मुश्किल बना देता है।

विखंडन को ठीक करना: सामान्य कर्नेल छवि

जेनेरिक कर्नेल इमेज (जीकेआई) प्रोजेक्ट कोर कर्नेल को एकीकृत करके कर्नेल विखंडन को संबोधित करता है और एसओसी और बोर्ड समर्थन को कोर कर्नेल से लोड करने योग्य विक्रेता मॉड्यूल में ले जाता है। GKI विक्रेता मॉड्यूल के लिए एक स्थिर कर्नेल मॉड्यूल इंटरफ़ेस (KMI) भी प्रस्तुत करता है, इसलिए मॉड्यूल और कर्नेल को स्वतंत्र रूप से अपडेट किया जा सकता है। GKI कर्नेल की कुछ विशेषताएं हैं:

  • GKI कर्नेल ACK स्रोतों से बनाया गया है।
  • GKI कर्नेल एक सिंगल-कर्नेल बाइनरी प्लस संबद्ध लोड करने योग्य मॉड्यूल प्रति आर्किटेक्चर, प्रति LTS रिलीज़ (वर्तमान में android11-5.4 और android12-5.4 के लिए केवल arm64) है।
  • GKI कर्नेल का परीक्षण सभी Android प्लेटफ़ॉर्म रिलीज़ के साथ किया जाता है जो संबद्ध ACK के लिए समर्थित हैं। GKI कर्नेल संस्करण के जीवनकाल के लिए कोई सुविधा बहिष्करण नहीं है।
  • GKI कर्नेल किसी दिए गए LTS के भीतर ड्राइवरों के लिए एक स्थिर KMI को उजागर करता है।
  • GKI कर्नेल में SoC- विशिष्ट या बोर्ड-विशिष्ट कोड नहीं होता है।

GKI आर्किटेक्चर की छवि के लिए, कर्नेल ओवरव्यू देखें।

GKI एक जटिल परिवर्तन है जिसे Android 11 प्लेटफ़ॉर्म रिलीज़ में v5.4 कर्नेल के साथ शुरू करके कई चरणों में रोल आउट किया गया है।

वर्तमान में दो GKI चरण हैं:

  • GKI 1.0 को Android 11 में 5.4 कर्नेल वाले उपकरणों के लिए पेश किया गया था। GKI 1.0 5.4 कर्नेल के साथ भेजे गए सभी उपकरणों पर लागू होता है, यहां तक ​​कि Android 12 या Android T (AOSP प्रयोगात्मक) के साथ लॉन्च किए गए उपकरणों पर भी।
  • जीकेआई 2.0 को एंड्रॉइड 12 में 5.10 कर्नेल वाले उपकरणों के लिए पेश किया गया था और यह उन सभी उपकरणों के लिए नया मानक है जो 5.10 या बाद के कर्नेल के साथ शिप करते हैं।

जीकेआई 1.0

GKI 1.0 में, कर्नेल संस्करण 5.4 के साथ लॉन्च होने वाले उपकरणों को GKI परीक्षण (Android 11 और बाद के प्लेटफ़ॉर्म रिलीज़) पास करना होगा। GKI 1.0 लक्ष्यों में निम्नलिखित शामिल हैं:

  • उत्पाद कर्नेल को GKI कर्नेल से बदलते समय विक्रेता परीक्षण सूट (VTS) या संगतता परीक्षण सूट (CTS) में प्रतिगमन से बचें।
  • एओएसपी सामान्य कर्नेल के साथ अपने कर्नेल को अद्यतित रखने के भागीदार बोझ को कम करें।
  • नए Android रिलीज़ के साथ अपग्रेड करने और लॉन्च करने वाले उपकरणों के लिए कर्नेल में मुख्य Android परिवर्तन शामिल करें।
  • Android उपयोगकर्ता स्थान को मत तोड़ो।
  • लोड करने योग्य मॉड्यूल के रूप में कोर कर्नेल से हार्डवेयर-विशिष्ट घटकों को अलग करें।

GKI 1.0 दस्तावेज़ीकरण के लिए, GKI 1.0 अनुभाग देखें।

जीकेआई 2.0

GKI 2.0 में, कर्नेल संस्करण 5.10 या उच्चतर के साथ लॉन्च होने वाले उपकरणों को GKI कर्नेल (Android 12 के साथ शुरुआत) के साथ शिप करना चाहिए। हस्ताक्षरित बूट छवियां उपलब्ध हैं और एलटीएस और महत्वपूर्ण बग फिक्स के साथ नियमित रूप से अपडेट की जाती हैं। क्योंकि KMI के लिए बाइनरी स्थिरता बनाए रखी जाती है, आप विक्रेता छवियों में परिवर्तन किए बिना इन बूट छवियों को स्थापित कर सकते हैं। GKI 2.0 लक्ष्यों में निम्नलिखित शामिल हैं:

  • उत्पाद कर्नेल को GKI कर्नेल से बदलते समय महत्वपूर्ण प्रदर्शन या शक्ति प्रतिगमन का परिचय न दें।
  • विक्रेता की भागीदारी के बिना कर्नेल सुरक्षा सुधार और बग समाधान देने के लिए भागीदारों को सक्षम करें।
  • उपकरणों के लिए प्रमुख कर्नेल संस्करण को अद्यतन करने की लागत कम करें (उदाहरण के लिए, v5.10 से 2021 LTS कर्नेल तक)।
  • उन्नयन के लिए एक स्पष्ट प्रक्रिया के साथ कर्नेल संस्करणों को अद्यतन करके प्रति आर्किटेक्चर एकल GKI कर्नेल बाइनरी बनाए रखें।

GKI 2.0 Android कर्नेल की सबसे वर्तमान स्थिति का प्रतिनिधित्व करता है। GKI 1.0 और पिछले कर्नेल (<=4.19) उपखंडों के बाहर कर्नेल दस्तावेज़ीकरण GKI 2.0 आर्किटेक्चर को दर्शाता है।