اطلاعات نسخه در دارایی‌های AVB

برای پشتیبانی از KeyMint (قبلاً Keymaster) نسخه اتصال، انتظار می‌رود راه‌انداز سیستم دستگاه نسخه سیستم‌عامل (OS) و سطح وصله امنیتی را برای هر پارتیشن ارائه دهد. نسخه سیستم‌عامل و سطح وصله امنیتی دو جفت کلید-مقدار جداگانه در AVB properties هستند. برای مثال:

  • 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 را بااستفاده از avb_property_lookup() از تصویر vbmeta دریافت کند. چندین تصویر vbmeta را می‌توان با avb_slot_verify() بار کرد و در پارامتر برونداد AvbSlotVerifyData** out_data ذخیره کرد.

قالب پیش‌فرض اطلاعات نسخه

به‌طور پیش‌فرض، سیستم ساخت Android از قالب زیر برای نسخه سیستم‌عامل و وصله امنیتی استفاده می‌کند.

قالب com.android.build.${partition}.os_version به‌صورت A[.B.C] است، برای مثال، 12 یا 12.0.0:

  • الف: نسخه اصلی
  • ب: نسخه جزئی، درصورت عدم وجود، به‌طور پیش‌فرض روی صفر تنظیم می‌شود
  • C: نسخه فرعی، درصورت عدم وجود، به‌طور پیش‌فرض صفر درنظر گرفته می‌شود

قالب com.android.build.${partition}.security_patch به‌صورت YYYY-MM-DD است.

به‌طور پیش‌فرض، سیستم ساخت com.android.build.${partition}.security_patch را برای system،‏ system_ext، و product پارتیشن تولید می‌کند. انتظار می‌رود سازنده دستگاه وصله‌های 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 4 پیشنهاد می‌کند os_version را از سرصفحه boot.img بردارید.

برای مقایسه، کاربرد منسوخ‌شده دریافت اطلاعات نسخه از سرصفحه تصویر راه‌اندازی نیز در اینجا شرح داده شده است. توجه داشته باشید که فیلد os_version در سرصفحه راه‌اندازی، هم نسخه سیستم‌عامل و هم سطح وصله امنیتی را در یک عدد صحیح بدون علامت ۳۲ بیتی ترکیب می‌کند. این سازوکار فرض می‌کند که همه تصاویر با هم به‌روزرسانی می‌شوند، که پس‌از واحدبندی پارتیشن در 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;