Trên các thiết bị không phải thiết bị A/B, hình ảnh khôi phục phải chứa thông tin từ blob cây thiết bị (DTB) hoặc Cấu hình nâng cao và giao diện nguồn (ACPI). Khi nào thiết bị khởi động vào quá trình khôi phục, trình tải khởi động sau đó có thể tải hình ảnh lớp phủ tương thích với hình ảnh khôi phục. Các thiết bị hỗ trợ A/B (liền mạch) các bản cập nhật nên sử dụng tính năng khôi phục khi khởi động thay vì phân vùng khôi phục riêng (để biết chi tiết, hãy xem phần Triển khai A/B Bản cập nhật).
Các tuỳ chọn để đưa DTBO/ACPIO khôi phục vào quá trình khởi động/khôi phục hình ảnh khác nhau giữa các bản phát hành Android.
Phát hành | Cập nhật giao thức | Tuân thủ GKI | Phiên bản tiêu đề khởi động (đang chạy thiết bị) | Phiên bản tiêu đề khởi động (đang nâng cấp thiết bị) | Cần có hình ảnh khôi phục chuyên dụng |
---|---|---|---|---|---|
11 | A/B, A/B trực tuyến |
Có | 3* | Không áp dụng | Không |
A/B, A/B trực tuyến |
Không | 2, 3 | 0, 1, 2, 3 | Không | |
không thuộc A/B | Có | 3 | Không áp dụng | Có | |
không thuộc A/B | Không | 2, 3 | 0, 1, 2, 3 | Có | |
10 (Q) | A/B | Không áp dụng | 2 | 0, 1, 2 | Không |
không thuộc A/B | Không áp dụng | 2 | 0, 1, 2 | Có | |
9 (Bàn thắng phạt đền) | A/B | Không áp dụng | 1 | 0, 1 | Không |
không thuộc A/B | Không áp dụng | 1 | 0, 1 | Có | |
8 (O) | A/B | Không áp dụng | Không áp dụng (được coi là 0) | Không áp dụng (được coi là 0) | Không |
không thuộc A/B | Không áp dụng | Không áp dụng (được coi là 0) | Không áp dụng (được coi là 0) | Có |
* Thiết bị A/B chạy Android 11 trở lên và sử dụng Hình ảnh hạt nhân chung (GKI) phải sử dụng phiên bản tiêu đề khởi động chính của 3 trở thành tương thích với phương thức khởi động của nhà cung cấp phân vùng.
Điểm chính:
Thiết bị A/B không cần chỉ định hình ảnh khôi phục vì bản cập nhật A/B sử dụng hai nhóm phân vùng (bao gồm
boot
vàdtbo
) và chuyển đổi giữa các phân vùng đó trong khoảng thời gian cập nhật, không cần hình ảnh khôi phục. Thiết bị A/B có thể vẫn sử dụng hình ảnh khôi phục riêng.Các thiết bị không chạy trong báo cáo A/B chạy Android 11 trở lên và sử dụng phiên bản tiêu đề khởi động 3 phải chỉ định rõ tiêu đề khởi động phiên bản 2 cho hình ảnh khôi phục riêng. Ví dụ:
BOARD_RECOVERY_MKBOOTIMG_ARGS := --header_version 2
Đối với những kiến trúc không hỗ trợ cây thiết bị, hình ảnh khôi phục có thể thêm hình ảnh ACPIO thay vì hình ảnh DTBO.
Giới thiệu về lỗi OTA và hình ảnh khôi phục
Để ngăn chặn lỗi qua mạng không dây (OTA) trên các thiết bị không phải A/B, hình ảnh khôi phục phải độc lập và độc lập với các hình ảnh khác. Trong quá trình cập nhật qua mạng không dây, nếu sự cố xảy ra sau khi hình ảnh lớp phủ đã được cập nhật (nhưng trước khi hoàn tất quá trình cập nhật đầy đủ), thiết bị sẽ cố khởi động vào chế độ khôi phục để hoàn tất quá trình cập nhật OTA. Tuy nhiên, do phân vùng lớp phủ đã được cập nhật, thì có thể xảy ra lỗi không khớp với hình ảnh khôi phục (hình ảnh này chưa được chưa được cập nhật).
Để ngăn quá trình khôi phục phụ thuộc vào phân vùng DTBO/ACPIO trong thời gian bản cập nhật, các thiết bị không chạy Android 9 trở lên có thể chỉ định hình ảnh DTBO/ACPIO khôi phục có chứa thông tin từ lớp phủ hình ảnh dưới dạng một phần riêng biệt ở định dạng hình ảnh khởi động (phải sử dụng tiêu đề khởi động 1 hoặc 2).
Các thay đổi về hình ảnh khởi động
Để cho phép hình ảnh khôi phục chứa DTBO hoặc ACPIO khôi phục ở các trường không phải A/B thiết bị chạy Android 9 trở lên, hãy cập nhật tính năng khởi động cấu trúc hình ảnh như sau.
Phần hình ảnh khởi động | Số trang |
---|---|
Tiêu đề khởi động (1 trang) | 1 |
Kernel (l trang) | l = (kernel_size + page_size –
1) / page_size |
Ramdisk (m trang) | m = (ramdisk_size + page_size –
1) / page_size |
Trình tải khởi động giai đoạn hai (n trang) | n = (second_size + page_size –
1) / page_size |
DTBO hoặc ACPIO khôi phục (o trang) | o = (recovery_[dtbo|acpio]_size + page_size –
1) / page_size |
Để biết thông tin chi tiết về các đối số công cụ mkbootimg
để chỉ định hình ảnh khởi động
phiên bản tiêu đề và đường dẫn hình ảnh lớp phủ, xem Tiêu đề hình ảnh khởi động
Tạo phiên bản.
Triển khai DTBO
Các thiết bị không chạy A/B chạy từ 9 thiết bị trở lên có thể điền sẵn
Phần recovery_dtbo
của hình ảnh khôi phục. Để đưa recovery_dtbo
vào
hình ảnh trong recovery.img
, trên thiết bị BoardConfig.mk
:
Đặt cấu hình
BOARD_INCLUDE_RECOVERY_DTBO
thànhtrue
:BOARD_INCLUDE_RECOVERY_DTBO := true
Mở rộng biến
BOARD_MKBOOTIMG_ARGS
để chỉ định tiêu đề của hình ảnh khởi động phiên bản:BOARD_MKBOOTIMG_ARGS := --ramdisk_offset $(BOARD_RAMDISK_OFFSET) --tags_offset $(BOARD_KERNEL_TAGS_OFFSET) --header_version $(BOARD_BOOTIMG_HEADER_VERSION)
Đảm bảo rằng biến
BOARD_PREBUILT_DTBOIMAGE
được đặt thành đường dẫn của Hình ảnh DTBO. Hệ thống xây dựng Android sử dụng biến này để đặt giá trị Đối sốrecovery_dtbo
của công cụmkbootimg
trong quá trình tạo hình ảnh khôi phục.
Nếu BOARD_INCLUDE_RECOVERY_DTBO
, BOARD_MKBOOTIMG_ARGS
và
Các biến BOARD_PREBUILT_DTBOIMAGE
được thiết lập chính xác, hệ thống xây dựng Android
bao gồm DTBO do biến BOARD_PREBUILT_DTBOIMAGE
chỉ định trong
recovery.img
.
Triển khai ACPIO
Các thiết bị không phải A/B chạy Android 9 trở lên có thể sử dụng
hình ảnh lớp phủ ACPIO (thay vì hình ảnh DTBO) và có thể điền sẵn
Phần recovery_acpio
(thay vì phần recovery_dtbo
) của phần
hình ảnh khôi phục. Để đưa hình ảnh recovery_acpio
vào recovery.img
, trong
thiết bị BoardConfig.mk
:
Đặt cấu hình
BOARD_INCLUDE_RECOVERY_ACPIO
thànhtrue
:BOARD_INCLUDE_RECOVERY_ACPIO := true
Mở rộng biến
BOARD_MKBOOTIMG_ARGS
để chỉ định tiêu đề của hình ảnh khởi động . Biến phải lớn hơn hoặc bằng 1 để được hỗ trợ khôi phục ACPIO.BOARD_MKBOOTIMG_ARGS += --header_version $(BOARD_BOOTIMG_HEADER_VERSION)
Đảm bảo rằng biến
BOARD_RECOVERY_ACPIO
được đặt thành đường dẫn của Hình ảnh ACPIO. Hệ thống xây dựng Android sử dụng biến này để đặt giá trị Đối sốrecovery_acpio
của công cụmkbootimg
trong quá trình tạo hàm hình ảnh khôi phục.
Nếu BOARD_INCLUDE_RECOVERY_ACPIO
, BOARD_MKBOOTIMG_ARGS
và
Các biến BOARD_RECOVERY_ACPIO
được thiết lập chính xác, hệ thống xây dựng Android
bao gồm ACPIO do biến BOARD_RECOVERY_ACPIO
chỉ định trong
recovery.img
.