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

Để hỗ trợ liên kết phiên bản Keymaster, bootloader thiết bị dự kiến ​​sẽ cung cấp phiên bản hệ điều hành (OS) và mức vá bảo mật cho từng phân vùng. Phiên bản hệ điều hành và mức vá bảo mật là hai cặp khóa -> giá trị riêng biệt trong 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'

Bộ tải khởi động thiết bị có thể lấy các thuộc tính AVB đó từ hình ảnh vbmeta thông qua avb_property_lookup() . Nhiều hình ảnh vbmeta có thể được tải bởi avb_slot_verify() và sẽ đượ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 xây dựng Android sẽ 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 tương ứng.

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

  • A: phiên bản chính
  • B: phiên bản nhỏ, mặc định là 0 khi vắng mặt
  • C: phiên bản phụ, mặc định là 0 khi vắng mặt

Đị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ẽ chỉ 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.v. cho các phân vùng không thuộc 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 nhà sản xuất sẽ luôn cập nhật tất cả các phân vùng lên phiên bản có cùng mức vá lỗi 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 tùy chỉnh

Bắt đầu từ Android 13, mỗi bản dựng thiết bị có thể có một giá trị tùy chỉnh cho phiên bản hệ điều hành mà bộ tải khởi động thiết bị có thể nhận ra. ví dụ,

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

Thông tin phiên bản lỗi thời trong tiêu đề ảnh khởi động

Bắt đầu từ Android 9, liên kết phiên bản Keymaster đề xuất xóa os_version khỏi tiêu đề boot.img .

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