AVB প্রপার্টিতে ভার্সন সংক্রান্ত তথ্য

KeyMint (আগে Keymaster) ভার্সন বাইন্ডিং-কে সাপোর্ট করতে, ডিভাইস বুটলোডারকে প্রতিটি পার্টিশনের জন্য অপারেটিং সিস্টেম (OS) ভার্সন ও নিরাপত্তা প্যাচ লেভেল প্রদান করতে হবে। OS ভার্সন ও নিরাপত্তা প্যাচ লেভেল হল 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 প্রপার্টি পেতে পারে। একাধিক vbmeta ছবি avb_slot_verify() দ্বারা লোড করা যেতে পারে এবং AvbSlotVerifyData** out_data আউটপুট প্যারামিটারে স্টোর করা হয়।

ভার্সন সংক্রান্ত তথ্যের ডিফল্ট ফর্ম্যাট

ডিফল্ট হিসেবে, Android বিল্ড সিস্টেম OS ভার্সন ও নিরাপত্তা প্যাচের জন্য যথাক্রমে নিম্নলিখিত ফর্ম্যাট ব্যবহার করে।

com.android.build.${partition}.os_version-এর ফর্ম্যাট হল A[.B.C], যেমন, 12 বা 12.0.0:

  • উত্তর: মেজর ভার্সন
  • B: মাইনর ভার্সন, এটি না থাকলে ডিফল্ট হিসেবে শূন্য ধরা হয়
  • গ: সাব-মাইনর ভার্সন, এটি না থাকলে ডিফল্ট হিসেবে শূন্য ধরা হয়

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 থেকে শুরু করে, প্রতিটি ডিভাইস বিল্ডে OS ভার্সনের জন্য একটি কাস্টম ভ্যালু থাকতে পারে যা ডিভাইস বুটলোডার শনাক্ত করতে পারে। যেমন:

  • 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 ফিল্ডটি OS ভার্সন এবং সিকিউরিটি প্যাচ লেভেল, দুটিকেই একটি ৩২-বিট আনসাইনড ইন্টিজারে একত্রিত করে। এই মেকানিজম ধরে নেয় যে সব ছবি একসাথে আপডেট করা হবে, যা 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;