जीकेआई संस्करण

यह पृष्ठ जेनेरिक कर्नेल छवियाँ (GKI) के लिए संस्करण योजना का वर्णन करता है। जेनेरिक कर्नेल इमेज (GKI) में एक विशिष्ट पहचानकर्ता होता है जिसे कर्नेल रिलीज़ कहा जाता है। कर्नेल रिलीज़ में कर्नेल मॉड्यूल इंटरफ़ेस (KMI) संस्करण और उप-स्तर शामिल हैं। कर्नेल रिलीज़ रिलीज़ की जा रही छवि के लिए विशिष्ट है, जबकि KMI संस्करण उस इंटरफ़ेस का प्रतिनिधित्व करता है जिससे रिलीज़ बनाया गया है। KMI संस्करण कई कर्नेल रिलीज़ का समर्थन कर सकता है। कर्नेल रिलीज़ केवल एक KMI संस्करण से जुड़ा होता है। अप्रत्याशित घटना में जहां कर्नेल मॉड्यूल इंटरफ़ेस को बदलना पड़ता है, KMI पीढ़ी को KMI संस्करण में परिवर्तन को प्रतिबिंबित करने के लिए पुनरावृत्त किया जाता है।

शर्तों का सारांश

निम्न तालिका इस पृष्ठ पर और GKI अद्यतनों के लिए उपयोग किए जाने वाले महत्वपूर्ण शब्दों का सारांश प्रस्तुत करती है।

नाम प्रतीक उदाहरण विवरण
कर्नेल रिलीज wxy-zzz-k-प्रत्यय 5.4.42-एंड्रॉइड12-0-फू GKI रिलीज़ के लिए विशिष्ट पहचानकर्ता। यह uname द्वारा लौटाया गया मान है।
केएमआई संस्करण wx-zzz-k 5.4-एंड्रॉयड12-0 GKI और गतिशील रूप से लोड करने योग्य कर्नेल मॉड्यूल (DLKM) के बीच कर्नेल मॉड्यूल इंटरफ़ेस (KMI) का वर्णन करता है।
उप-स्तरीय आप 42 उसी KMI संस्करण में कर्नेल रिलीज़ के रिलीज़ क्रम का वर्णन करता है।

निम्न तालिका संदर्भ के रूप में अन्य संबंधित शब्दों को सूचीबद्ध करती है।

नाम प्रतीक उदाहरण विवरण
डब्ल्यूएक्सवाई डब्ल्यूएक्सवाई 5.4.42

विवरण के लिए, Linux Kernel Makefiles ("KERNELRELEASE" के लिए खोजें) देखें।

इस पूरे दस्तावेज़ में सीधे wxy का उपयोग किया जाता है। इसे आमतौर पर तीन-भाग संस्करण संख्या के रूप में भी जाना जाता है। VINTF, कर्नेल संस्करण में प्रयुक्त शब्द, अन्य शब्दों के साथ भ्रम पैदा कर सकता है, विशेष रूप से w

इस चर को libkver में kernel_version_tuple के रूप में संदर्भित किया जाता है।

इस टपल को ओटीए या मेनलाइन सहित किसी भी अपडेट से कम नहीं किया जाना चाहिए।

कर्नेल शाखा zzz-wx एंड्रॉइड12-5.4 यह शब्द सामान्य कर्नेल शाखा प्रकारों में प्रयोग किया जाता है।
संस्करण वू 5 इस दस्तावेज़ में इस शब्द का प्रयोग नहीं किया गया है। इस चर को libkver में संस्करण के रूप में संदर्भित किया जाता है।
पैच स्तर एक्स 4 इस दस्तावेज़ में इस शब्द का प्रयोग नहीं किया गया है। इस चर को libkver में पैच_लेवल के रूप में संदर्भित किया जाता है।
एंड्रॉइड रिलीज ज़ज़्ज़ android12

यह Android (मिठाई) रिलीज़ नंबर है जिससे कर्नेल जुड़ा हुआ है।

AndroidRelease फ़ील्ड की तुलना करते समय, संख्यात्मक भाग को तुलना के लिए स्ट्रिंग से निकाला जाता है।

Android रिलीज़ संख्या को OTA या मेनलाइन सहित किसी भी अपडेट से कम नहीं किया जाना चाहिए।

केएमआई पीढ़ी 0

यह असंभावित घटनाओं से निपटने के लिए जोड़ा गया एक अतिरिक्त नंबर है। यदि सुरक्षा बग फिक्स के लिए उसी Android रिलीज़ के भीतर KMI में परिवर्तन की आवश्यकता होती है, तो KMI पीढ़ी बढ़ जाती है।

KMI जनरेशन नंबर 0 से शुरू होता है।

संस्करण डिजाइन

कर्नेल रिलीज

परिभाषा

GKI के साथ शिप करने वाले डिवाइस के लिए, कर्नेल रिलीज़ को निम्नानुसार परिभाषित किया गया है:

KernelRelease :=
Version.PatchLevel.SubLevel-AndroidRelease-KmiGeneration-suffix
w      .x         .y       -zzz           -k            -something

अधिक जानकारी के लिए, डिवाइस से कर्नेल रिलीज़ का निर्धारण करना देखें।

निम्नलिखित कर्नेल रिलीज़ का एक उदाहरण है।

5.4.42-android12-0-00544-ged21d463f856

विवरण

कर्नेल रिलीज़ GKI रिलीज़ की विशिष्ट ID है। यदि दो GKI बायनेरिज़ में समान कर्नेल रिलीज़ है, तो उन्हें बाइट-वार समान होना चाहिए।

कर्नेल रिलीज़ में KMI संस्करण, एक उप-स्तर और एक प्रत्यय होता है। इस दस्तावेज़ के प्रयोजनों के लिए, KMI पीढ़ी के बाद प्रत्यय को अनदेखा किया जाता है।

केएमआई संस्करण

परिभाषा

KMI संस्करण को निम्नानुसार परिभाषित किया गया है:

KmiVersion :=
Version.PatchLevel-AndroidRelease-KmiGeneration
w      .x         -zzz           -k

ध्यान दें कि उप-स्तर, y KMI संस्करण का हिस्सा नहीं है। कर्नेल रिलीज़ में उदाहरण के लिए, KMI संस्करण है:

5.4-android12-0

विवरण

KMI संस्करण GKI और गतिशील रूप से लोड करने योग्य कर्नेल मॉड्यूल (DLKM) के बीच कर्नेल मॉड्यूल इंटरफ़ेस (KMI) का वर्णन करता है।

यदि दो कर्नेल रिलीज़ में समान KMI संस्करण है, तो वे समान कर्नेल मॉड्यूल इंटरफ़ेस लागू करते हैं। एक के साथ संगत DLKM दूसरे के साथ भी संगत हैं।

KMI संस्करण को किसी भी OTA अपडेट से कम नहीं किया जाना चाहिए।

उप-स्तरीय

उप-स्तर, y , उसी KMI संस्करण में कर्नेल रिलीज़ के रिलीज़ क्रम का वर्णन करता है।

दो कर्नेल रिलीज़ के लिए जिनका KMI संस्करण समान है लेकिन उप-स्तर Y1 और Y2 क्रमशः हैं:

  • अगर Y1 Y2 से कम या उसके बराबर है, तो Y1 चलाने वाला डिवाइस Y2 का अपडेट प्राप्त कर सकता है।
  • अगर Y1 Y2 से बड़ा है, तो Y1 चलाने वाले डिवाइस को Y2 में अपडेट नहीं किया जा सकता है।

अर्थात्, यदि KMI संस्करण नहीं बदलता है, तो उप-स्तर को किसी भी OTA अद्यतन से कम नहीं किया जाना चाहिए।

डिवाइस से कर्नेल रिलीज़ का निर्धारण

निम्नलिखित कोड स्निपेट के साथ uname -r , या uname(2) निष्पादित करके पूर्ण कर्नेल रिलीज़ पाया जा सकता है:

std::string get_kernel_release() {
  struct utsname buf;
  return uname(&buf) == 0 ? buf.release : "";
}

एक उदाहरण आउटपुट है:

5.4.42-android12-0-00544-ged21d463f856

इस दस्तावेज़ के प्रयोजन के लिए, KMI पीढ़ी के बाद की किसी भी चीज़ को कर्नेल जानकारी निकालते समय अनदेखा कर दिया जाता है। अधिक औपचारिक रूप से, uname -r के आउटपुट को निम्नलिखित रेगेक्स के साथ पार्स किया जाता है (यह मानते हुए कि zzz हमेशा "एंड्रॉइड" से शुरू होता है):

^(?P<w>\d+)[.](?P<x>\d+)[.](?P<y>\d+)-(?P<z>android\d+)-(?P<k>\d+).*$

अनदेखी की गई जानकारी में ci.android.com बिल्ड नंबर, बेसलाइन कर्नेल के शीर्ष पर पैच की संख्या और git कमिट के SHA हैश जैसी जानकारी शामिल हो सकती है।

libkver

पुस्तकालय, libkver, कर्नेल रिलीज़ या KMI संस्करण स्ट्रिंग को पार्स करने के लिए C++ इंटरफ़ेस प्रदान करता है। एपीआई की सूची के लिए जो libkver उजागर करता है, packages/modules/Gki/libkver/include/kver

VINTF चेक

Android 11 या उसके बाद के संस्करण के लिए, KMI संस्करण का Android रिलीज़ भाग डिवाइस निर्माताओं द्वारा डिवाइस मैनिफ़ेस्ट में मैन्युअल रूप से निर्दिष्ट किया गया है। विवरण के लिए, VINTF कर्नेल मिलान नियम देखें।

Android S से, KMI संस्करण के Android रिलीज़ भाग को कर्नेल से निकाला जा सकता है और बिल्ड समय पर डिवाइस मेनिफेस्ट में इंजेक्ट किया जा सकता है।

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

  • संगतता मैट्रिक्स से संबंधित आवश्यकता को हटा दिया जाता है।
  • KMI पीढ़ी पर सशर्त नई आवश्यकताओं की जाँच के लिए अतिरिक्त VTS परीक्षण जोड़े जाते हैं।

ओटीए मेटाडेटा में बूट छवि संस्करण

भले ही बूट छवि को ओटीए अपडेट के माध्यम से अपडेट किया जाता है, इसे ओटीए पेलोड प्रारूप, payload.bin में लपेटा जाना चाहिए। OTA पेलोड प्रत्येक विभाजन के लिए एक version फ़ील्ड को एन्कोड करता है। जब update_engine एक OTA पेलोड को संभालता है, तो यह इस क्षेत्र की तुलना यह सुनिश्चित करने के लिए करता है कि विभाजन डाउनग्रेड नहीं हुआ है।

भ्रम से बचने के लिए, OTA मेटाडेटा में बूट विभाजन के लिए version फ़ील्ड को boot image version कहा जाता है।

क्योंकि रैमडिस्क हमेशा खरोंच से बनाया जाता है, रैमडिस्क टाइमस्टैम्प का उपयोग करना पूरी बूट छवि का वर्णन करने के लिए पर्याप्त है। बूट छवि संस्करण में कर्नेल रिलीज को एन्कोड करने की कोई आवश्यकता नहीं है, जब तक कि आप भविष्य में एक पुराने बूट छवि को नए कर्नेल बाइनरी में सिलाई नहीं कर रहे हैं।

OTA अद्यतन से पहले, OTA क्लाइंट बूट छवि संस्करण की उसी तरह जाँच करता है जैसे कोई अन्य पार्टीशन करता है।