Keymaster वर्शन के साथ काम करने के लिए, डिवाइस के बूटलोडर में ऑपरेटिंग सिस्टम (ओएस) का वर्शन और हर पार्टीशन के लिए सुरक्षा पैच का लेवल होना चाहिए. AVB प्रॉपर्टी में, ओएस वर्शन और सिक्योरिटी पैच लेवल, दो अलग-अलग की-वैल्यू पेयर हैं. उदाहरण के लिए:
com.android.build.system.os_version -> '12'
com.android.build.system.security_patch -> '2022-02-05'
com.android.build.vendor.os_version -> '12'
com.android.build.vendor.security_patch -> '2022-02-05'
com.android.build.boot.os_version -> '12'
com.android.build.boot.security_patch -> '2022-02-05'
डिवाइस बूटलोडर, avb_property_lookup()
का इस्तेमाल करके, vbmeta इमेज से उन AVB प्रॉपर्टी को ऐक्सेस कर सकता है.
avb_slot_verify()
का इस्तेमाल करके, एक से ज़्यादा vbmeta इमेज लोड की जा सकती हैं. साथ ही, इन्हें AvbSlotVerifyData**
out_data
आउटपुट पैरामीटर में सेव किया जाता है.
वर्शन की जानकारी का डिफ़ॉल्ट फ़ॉर्मैट
डिफ़ॉल्ट रूप से, Android बिल्ड सिस्टम, ओएस वर्शन और सिक्योरिटी पैच के लिए, नीचे दिए गए फ़ॉर्मैट का इस्तेमाल करता है.
com.android.build.${partition}.os_version
का फ़ॉर्मैट A[.B.C] है, उदाहरण के लिए, 12
या 12.0.0
:
- A: मेजर वर्शन
- B: माइनर वर्शन, मौजूद न होने पर डिफ़ॉल्ट रूप से शून्य पर सेट होता है
- C: सब-माइनर वर्शन, अगर यह मौजूद नहीं है, तो डिफ़ॉल्ट रूप से शून्य पर सेट होता है
com.android.build.${partition}.security_patch
का फ़ॉर्मैट YYYY-MM-DD है.
डिफ़ॉल्ट रूप से, बिल्ड सिस्टम system
,
system_ext
, और product
पार्टिशन के लिए com.android.build.${partition}.security_patch
जनरेट करता है. डिवाइस मैन्युफ़ैक्चरर को, नॉन-सिस्टम पार्टिशन के लिए BOOT_SECURITY_PATCH
, VENDOR_SECURITY_PATCH
, और अन्य पैच सेट करने चाहिए. उदाहरण के लिए:
BOOT_SECURITY_PATCH := 2022-01-05
जनरेट करता हैcom.android.build.boot.security_patch -> '2022-01-05'
VENDOR_SECURITY_PATCH := 2022-02-05
जनरेट करता हैcom.android.build.vendor.security_patch -> '2022-02-05'
डिवाइस बनाने वाली कंपनी, *_SECURITY_PATCH
को $(PLATFORM_SECURITY_PATCH)
पर सेट कर सकती है. ऐसा तब किया जा सकता है, जब वह सभी पार्टीशन को हमेशा एक ही सुरक्षा पैच लेवल वाले वर्शन पर अपडेट करती हो.
BOOT_SECURITY_PATCH := $(PLATFORM_SECURITY_PATCH)
VENDOR_SECURITY_PATCH := $(PLATFORM_SECURITY_PATCH)
वर्शन की कस्टम जानकारी देना
Android 13 से, हर डिवाइस के बिल्ड में ओएस वर्शन के लिए कस्टम वैल्यू हो सकती है. डिवाइस के बूटलोडर से इसकी पहचान की जा सकती है. उदाहरण के लिए:
SYSTEM_OS_VERSION := 12.0.0
जनरेट करता हैcom.android.build.system.os_version -> '12.0.0'
BOOT_OS_VERSION := a.b.c
जनरेट करता हैcom.android.build.boot.os_version -> 'a.b.c'
VENDOR_OS_VERSION := 12.0.1
जनरेट करता हैcom.android.build.vendor.os_version -> '12.0.1'
बूट इमेज हेडर में पुराने वर्शन की जानकारी
Android 9 से, Keymaster के वर्शन बाइंडिंग की सुविधा, boot.img
हेडर से os_version
को हटाने का सुझाव देती है.
तुलना करने के लिए, बूट इमेज हेडर से वर्शन की जानकारी पाने के पुराने तरीके के बारे में भी यहां बताया गया है. ध्यान दें कि बूट हेडर में मौजूद os_version
फ़ील्ड, ओएस वर्शन और सिक्योरिटी पैच लेवल, दोनों को 32-बिट के बिना साइन वाले पूर्णांक में जोड़ता है. साथ ही, इस प्रोसेस में यह माना जाता है कि सभी इमेज एक साथ अपडेट होंगी. हालांकि, Project Treble में, पार्टिशन को मॉड्यूलर बनाने के बाद यह प्रोसेस काम नहीं करती.
// Operating system version and security patch level.
// For version "A.B.C" and patch level "Y-M-D":
// (7 bits for each of A, B, C; 7 bits for (Y-2000), 4 bits for M)
// A = os_version[31:25]
// B = os_version[24:18]
// C = os_version[17:11]
// Y = 2000 + os_version[10:4]
// M = os-version[3:0]
uint32_t os_version;