Thông tin phiên bản trong thuộc tính AVB

Để hỗ trợ liên kết phiên bản KeyMint (trước đây là Keymaster), trình tải khởi động của thiết bị dự kiến sẽ cung cấp phiên bản hệ điều hành và cấp bản vá bảo mật cho từng phân vùng. Phiên bản hệ điều hành và cấp bản vá bảo mật là hai cặp khoá-giá trị riêng biệt trong các thuộc tính AVB. Ví dụ:

  • 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'

Trình tải khởi động của thiết bị có thể lấy các thuộc tính AVB đó từ một hình ảnh vbmeta bằng cách sử dụng avb_property_lookup(). Bạn có thể tải nhiều hình ảnh vbmeta bằng avb_slot_verify() và được lưu trữ trong tham số đầu ra AvbSlotVerifyData** out_data.

Định dạng mặc định của thông tin phiên bản

Theo mặc định, hệ thống tạo Android sử dụng định dạng sau cho phiên bản hệ điều hành và bản vá bảo mật, theo thứ tự.

Định dạng của com.android.build.${partition}.os_version là A[.B.C], ví dụ: 12 hoặc 12.0.0:

  • A: phiên bản chính
  • B: phiên bản phụ, mặc định là 0 khi không có
  • C: phiên bản phụ, mặc định là 0 khi không có

Định dạng của com.android.build.${partition}.security_patch là YYYY-MM-DD.

Theo mặc định, hệ thống xây dựng sẽ tạo com.android.build.${partition}.security_patch cho các phân vùng system, system_extproduct. Nhà sản xuất thiết bị dự kiến sẽ đặt BOOT_SECURITY_PATCH, VENDOR_SECURITY_PATCH và các bản vá khác cho các phân vùng không phải là phân vùng hệ thống. Ví dụ:

  • BOOT_SECURITY_PATCH := 2022-01-05 tạo ra
    • com.android.build.boot.security_patch -> '2022-01-05'
  • VENDOR_SECURITY_PATCH := 2022-02-05 tạo ra
    • com.android.build.vendor.security_patch -> '2022-02-05'

Nhà sản xuất thiết bị có thể đặt *_SECURITY_PATCH thành $(PLATFORM_SECURITY_PATCH) nếu thiết bị luôn cập nhật tất cả các phân vùng lên phiên bản có cùng cấp độ bản vá bảo mật.

  • BOOT_SECURITY_PATCH := $(PLATFORM_SECURITY_PATCH)
  • VENDOR_SECURITY_PATCH := $(PLATFORM_SECURITY_PATCH)

Chỉ định thông tin phiên bản tuỳ chỉnh

Kể từ Android 13, mỗi bản dựng thiết bị có thể có một giá trị tuỳ chỉnh cho phiên bản hệ điều hành mà trình tải khởi động của thiết bị có thể nhận dạng. Ví dụ:

  • SYSTEM_OS_VERSION := 12.0.0 tạo ra
    • com.android.build.system.os_version -> '12.0.0'
  • BOOT_OS_VERSION := a.b.c tạo ra
    • com.android.build.boot.os_version -> 'a.b.c'
  • VENDOR_OS_VERSION := 12.0.1 tạo ra
    • com.android.build.vendor.os_version -> '12.0.1'

Thông tin về phiên bản không dùng nữa trong tiêu đề hình ảnh khởi động

Trong Android 9 trở lên, hoạt động liên kết phiên bản của Keymaster 4 đề xuất xoá os_version khỏi tiêu đề boot.img.

Để so sánh, cách sử dụng không còn được dùng để lấy thông tin phiên bản từ tiêu đề hình ảnh khởi động cũng được mô tả ở đây. Xin lưu ý rằng trường os_version trong tiêu đề khởi động kết hợp cả phiên bản hệ điều hành và cấp bản vá bảo mật thành một số nguyên không dấu 32 bit. Cơ chế này giả định rằng tất cả hình ảnh sẽ được cập nhật cùng nhau, điều này không còn phù hợp sau khi phân vùng mô-đun hoá trong 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;