यह पृष्ठ जेनेरिक कर्नेल इमेज (जीकेआई) के लिए संस्करण योजना का वर्णन करता है। जेनेरिक कर्नेल इमेज (जीकेआई) में एक विशिष्ट पहचानकर्ता होता है जिसे कर्नेल रिलीज़ कहा जाता है। कर्नेल रिलीज़ में कर्नेल मॉड्यूल इंटरफ़ेस (KMI) संस्करण और उप-स्तर शामिल हैं। कर्नेल रिलीज़ रिलीज़ की जा रही छवि के लिए विशिष्ट है, जबकि KMI संस्करण उस इंटरफ़ेस का प्रतिनिधित्व करता है जिससे रिलीज़ बनाया गया है। एक KMI संस्करण एकाधिक कर्नेल रिलीज़ का समर्थन कर सकता है। एक कर्नेल रिलीज़ केवल एक KMI संस्करण से जुड़ा होता है। अप्रत्याशित घटना में जहां कर्नेल मॉड्यूल इंटरफ़ेस को बदलना पड़ता है, KMI संस्करण में परिवर्तन को प्रतिबिंबित करने के लिए KMI पीढ़ी को पुनरावृत्त किया जाता है।
शर्तों का सारांश
निम्नलिखित तालिका इस पृष्ठ पर और जीकेआई अपडेट के लिए उपयोग किए गए महत्वपूर्ण शब्दों का सारांश प्रस्तुत करती है।
नाम | प्रतीक | उदाहरण | विवरण |
---|---|---|---|
कर्नेल रिलीज | wxy-zzz-k-प्रत्यय | 5.4.42-android12-0-foo | GKI रिलीज़ के लिए विशिष्ट पहचानकर्ता। यह uname द्वारा लौटाया गया मान है। |
केएमआई संस्करण | wx-zzz-k | 5.4-एंड्रॉइड12-0 | GKI और गतिशील रूप से लोड करने योग्य कर्नेल मॉड्यूल (DLKM) के बीच कर्नेल मॉड्यूल इंटरफ़ेस (KMI) का वर्णन करता है। |
उप-स्तरीय | य | 42 | समान KMI संस्करण के अंतर्गत कर्नेल रिलीज़ के रिलीज़ क्रम का वर्णन करता है। |
निम्न तालिका संदर्भ के रूप में अन्य संबंधित शब्दों को सूचीबद्ध करती है।
नाम | प्रतीक | उदाहरण | विवरण |
---|---|---|---|
wxy | wxy | 5.4.42 | विवरण के लिए, Linux Kernel Makefiles देखें ("KERNELRELEASE" खोजें)। इस पूरे दस्तावेज़ में सीधे wxy का उपयोग किया गया है। इसे आमतौर पर तीन-भाग संस्करण संख्या के रूप में भी जाना जाता है। VINTF, कर्नेल संस्करण में प्रयुक्त शब्द, अन्य शब्दों, विशेषकर w के साथ भ्रम पैदा कर सकता है। इस वेरिएबल को libkver में kernel_version_tuple कहा जाता है। इस टपल को ओटीए या मेनलाइन सहित किसी भी अपडेट से कम नहीं किया जाना चाहिए। |
कर्नेल शाखा | zzz-wx | android12-5.4 | इस शब्द का उपयोग सामान्य कर्नेल शाखा प्रकारों में किया जाता है। |
संस्करण | डब्ल्यू | 5 | इस दस्तावेज़ में इस शब्द का उपयोग नहीं किया गया है. इस वेरिएबल को libkver में संस्करण के रूप में जाना जाता है। |
पैच स्तर | एक्स | 4 | इस दस्तावेज़ में इस शब्द का उपयोग नहीं किया गया है. इस वेरिएबल को libkver में patch_level कहा जाता है। |
एंड्रॉइड रिलीज | zzz | android12 | यह एंड्रॉइड (मिठाई) रिलीज़ नंबर है जिसके साथ कर्नेल संबद्ध है। एंड्रॉइड रिलीज़ संख्या ओटीए या मेनलाइन सहित किसी भी अपडेट से कम नहीं होनी चाहिए। |
केएमआई पीढ़ी | क | 0 | यह असंभावित घटनाओं से निपटने के लिए जोड़ा गया एक अतिरिक्त नंबर है। यदि सुरक्षा बग फिक्स के लिए उसी एंड्रॉइड रिलीज़ के भीतर 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 रिलीज़ की अद्वितीय आईडी है। यदि दो 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 संस्करण है, तो वे समान कर्नेल मॉड्यूल इंटरफ़ेस लागू करते हैं। जो डीएलकेएम एक के साथ संगत हैं वे दूसरे के साथ भी संगत हैं।
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 बिल्ड नंबर, बेसलाइन कर्नेल के शीर्ष पर पैच की संख्या और गिट कमिट के SHA हैश जैसी जानकारी शामिल हो सकती है।
libkver
लाइब्रेरी, libkver, कर्नेल रिलीज़ या KMI संस्करण स्ट्रिंग को पार्स करने के लिए C++ इंटरफ़ेस प्रदान करती है। libkver द्वारा प्रदर्शित एपीआई की सूची के लिए, packages/modules/Gki/libkver/include/kver
देखें।
VINTF जाँच करता है
एंड्रॉइड 11 या उससे पहले के संस्करण के लिए, KMI संस्करण का एंड्रॉइड रिलीज़ भाग डिवाइस निर्माताओं द्वारा डिवाइस मेनिफ़ेस्ट में मैन्युअल रूप से निर्दिष्ट किया जाता है। विवरण के लिए, VINTF कर्नेल मिलान नियम देखें।
Android S से, KMI संस्करण का Android रिलीज़ भाग कर्नेल से निकाला जा सकता है और बिल्ड समय पर डिवाइस मेनिफेस्ट में इंजेक्ट किया जा सकता है।
चूँकि कर्नेल कॉन्फ़िगरेशन आवश्यकताएँ आम तौर पर नहीं बदलती हैं, संगतता मैट्रिक्स के भीतर k
एन्कोड करने की कोई आवश्यकता नहीं है। हालाँकि, अप्रत्याशित स्थिति में जहां कर्नेल कॉन्फ़िगरेशन आवश्यकता को बदलने की आवश्यकता है, निम्नलिखित सुनिश्चित करें:
- संगतता मैट्रिक्स से संबंधित आवश्यकता हटा दी गई है।
- KMI पीढ़ी पर सशर्त नई आवश्यकताओं की जाँच के लिए अतिरिक्त VTS परीक्षण जोड़े गए हैं।
ओटीए मेटाडेटा में बूट छवि संस्करण
भले ही बूट छवि को ओटीए अपडेट के माध्यम से अपडेट किया गया हो, इसे ओटीए पेलोड प्रारूप, payload.bin
में लपेटा जाना चाहिए। ओटीए पेलोड प्रत्येक विभाजन के लिए एक version
फ़ील्ड को एन्कोड करता है। जब update_engine
एक OTA पेलोड को संभालता है, तो यह यह सुनिश्चित करने के लिए इस फ़ील्ड की तुलना करता है कि विभाजन डाउनग्रेड नहीं हुआ है।
भ्रम से बचने के लिए, ओटीए मेटाडेटा में बूट विभाजन के लिए version
फ़ील्ड को boot image version
कहा जाता है।
क्योंकि रैमडिस्क हमेशा स्क्रैच से बनाया जाता है, रैमडिस्क टाइमस्टैम्प का उपयोग संपूर्ण बूट छवि का वर्णन करने के लिए पर्याप्त है। बूट छवि संस्करण में कर्नेल रिलीज़ को एन्कोड करने की कोई आवश्यकता नहीं है, जब तक कि आप भविष्य में पुरानी बूट छवि को नई कर्नेल बाइनरी में सिलाई नहीं कर रहे हों।
ओटीए अपडेट से पहले, ओटीए क्लाइंट किसी अन्य पार्टीशन की तरह ही बूट छवि संस्करण की जांच करता है।