एवीबी प्रॉपर्टी में वर्शन की जानकारी

KeyMint (पहले इसे 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 को *_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 4 का वर्शन बाइंडिंग, 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;