जीकेआई वर्शनिंग स्कीम

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

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

यहां दी गई टेबल में, इस पेज पर इस्तेमाल किए गए अहम शब्दों और देख सकते हैं.

नाम निशान उदाहरण ब्यौरा
कर्नेल रिलीज़ W.x.y-Zzz-क-सफ़िक्स 5.4.42-android12-0-foo जीकेआई रिलीज़ के लिए यूनीक आइडेंटिफ़ायर. यह मान है uname ने लौटाया.
KMI वर्शन CANNOT TRANSLATE 5.4-android12-0 यह GKI और के बीच कर्नेल मॉड्यूल इंटरफ़ेस (KMI) के बारे में बताता है डाइनैमिक रूप से लोड होने वाले कर्नेल मॉड्यूल (DLKM).
सब-लेवल y 42 इसमें कर्नेल रिलीज़ के रिलीज़ क्रम के बारे में बताया जाता है केएमआई वाला वर्शन इस्तेमाल कर रहे हैं.

यहां दी गई टेबल में, रेफ़रंस के तौर पर अन्य मिलते-जुलते शब्दों की सूची दी गई है.

नाम निशान उदाहरण ब्यौरा
डब्ल्यू॰एक्स॰वाई डब्ल्यू॰एक्स॰वाई 5.4.42

विवरण के लिए, Linux देखें कर्नेल मेकफ़ाइल ("KERNEL स्पैम" खोजें.

इस पूरे दस्तावेज़ में सीधे w.x.y का इस्तेमाल किया गया है. यह भी है इसे आम तौर पर तीन भागों वाला वर्शन नंबर कहा जाता है. इस्तेमाल किया गया शब्द में, VINTF, kernel वर्शन में, दूसरे शब्दों के साथ भ्रम की स्थिति पैदा कर सकता है, खास तौर पर w.

इस वैरिएबल को libkver में kernel_version_tuple के तौर पर बताया जाता है.

इस टपल को किसी भी अपडेट से कम नहीं किया जाना चाहिए. जैसे, ओटीए या मेनलाइन पर जाएं.

कर्नेल ब्रांच ज़ेडज़ेड-डब्ल्यू.एक्स Android12-5.4 इस शब्द का उपयोग में किया गया है कर्नेल के सामान्य ब्रांच टाइप.
वर्शन w 5 इस दस्तावेज़ में इस शब्द का इस्तेमाल नहीं किया गया है. इस वैरिएबल को यह कहा जाता है libkver में वर्शन है.
पैच लेवल x 4 इस दस्तावेज़ में इस शब्द का इस्तेमाल नहीं किया गया है. इस वैरिएबल को यह कहा जाता है libkver में patch_level जोड़ दें.
Android रिलीज़ ज़ेडज़ेड Android12

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

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

Android रिलीज़ नंबर को किसी भी अपडेट से कम नहीं करना चाहिए. इसमें ये अपडेट भी शामिल हैं ओटीए या मेनलाइन.

केएमआई जनरेशन k 0

यह एक अतिरिक्त नंबर है, जिसकी वजह से ऐसा हो सकता है इवेंट. अगर सुरक्षा से जुड़ी किसी गड़बड़ी को ठीक करने के लिए, केएमआई में बदलाव करना ज़रूरी हो Android रिलीज़ किया गया है. केएमआई की जेनरेशन बढ़ा दी गई है.

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

वर्शन डिज़ाइन

कर्नेल रिलीज़

परिभाषा

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

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

अधिक जानकारी के लिए, किसी डिवाइस पर टैप करें.

कर्नेल रिलीज़ का एक उदाहरण नीचे दिया गया है.

5.4.42-android12-0-00544-ged21d463f856

ब्यौरा

कर्नेल रिलीज़, GKI रिलीज़ का यूनीक आईडी होता है. अगर दो जीकेआई बाइनरी में हों एक ही कर्नेल रिलीज़ के लिए, वे बाइट-वाइज़ समान होने चाहिए.

कर्नेल रिलीज़ में KMI वर्शन, सबलेवल, और सफ़िक्स शामिल होते हैं. इसके लिए इस दस्तावेज़ के मकसद से, केएमआई जनरेट होने के बाद के सफ़िक्स को अनदेखा कर दिया जाता है.

KMI वर्शन

परिभाषा

केएमआई वर्शन की जानकारी यहां दी गई है:

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

ध्यान दें कि सबलेवल, y, केएमआई वर्शन का हिस्सा नहीं है. उदाहरण के लिए Kernel रिलीज़ में, केएमआई वर्शन है:

5.4-android12-0

ब्यौरा

केएमआई वर्शन में, जीकेआई और जीकेआई के बीच कर्नेल मॉड्यूल इंटरफ़ेस (केएमआई) बताया गया है डाइनैमिक रूप से लोड होने वाले कर्नेल मॉड्यूल (DLKM).

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

KMI वर्शन को किसी भी ओटीए अपडेट से कम नहीं करना चाहिए.

सब-लेवल

सबलेवल, y, केएमआई वाला वर्शन इस्तेमाल कर रहे हैं.

दो कर्नेल रिलीज़ के लिए जिनके KMI वर्शन एक जैसे हैं, लेकिन सब-लेवल Y1 और Y2 क्रम में:

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

इसका मतलब है कि अगर केएमआई वर्शन में बदलाव नहीं होता, तो सबलेवल को कम नहीं करना चाहिए ओटीए अपडेट के हिसाब से.

किसी डिवाइस से कर्नेल रिलीज़ का पता लगाना

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

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

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

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

Libkver

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

वीआईएनटीएफ़ की जांच

Android 11 या इससे पहले के वर्शन के लिए, केएमआई वर्शन का Android रिलीज़ वाला हिस्सा डिवाइस मैन्युफ़ैक्चरर की ओर से डिवाइस मेनिफ़ेस्ट में मैन्युअल तरीके से बताया गया है. जानकारी के लिए, VINTF कर्नेल के मिलान के नियम देखें.

Android S से, केएमआई वर्शन का Android रिलीज़ वाला हिस्सा एक्सट्रैक्ट किया जा सकता है कर्नेल से और बिल्ड के समय डिवाइस मेनिफ़ेस्ट में इंजेक्ट किया गया होता है.

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

  • साथ काम करने वाले मैट्रिक्स से जुड़ी ज़रूरी शर्त को हटा दिया गया है.
  • शर्तों के साथ नई शर्तों की जांच करने के लिए, अतिरिक्त वीटीएस टेस्ट जोड़े गए हैं पर काम कर रहा है.

ओटीए मेटाडेटा में इमेज का बूट वर्शन

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

किसी भी तरह की उलझन से बचने के लिए, ओटीए में बूट पार्टिशन के लिए version फ़ील्ड मेटाडेटा को boot image version कहा जाता है.

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

ओटीए अपडेट से पहले, ओटीए क्लाइंट बूट इमेज वर्शन की जांच करता है किसी अन्य विभाजन की तरह ही रख सकते हैं.