Để hỗ trợ các bản cập nhật qua mạng (OTA) , bộ nạp khởi động phải có khả năng truy cập vào đĩa RAM khôi phục trong khi khởi động. Nếu thiết bị sử dụng hình ảnh khôi phục AOSP chưa sửa đổi, bộ nạp khởi động sẽ đọc 32 byte đầu tiên trên phân vùng misc
; nếu dữ liệu ở đó khớp với boot-recovery
, bộ nạp khởi động sẽ khởi động vào hình ảnh recovery
. Phương pháp này cho phép mọi công việc khôi phục đang chờ xử lý (ví dụ: áp dụng OTA hoặc xóa dữ liệu) tiếp tục hoàn thành.
Để biết chi tiết về nội dung của một khối trong flash được sử dụng để liên lạc bởi recovery và bootloader, hãy tham khảo bootable/recovery/bootloader_message/bootloader_message.h .
Thiết bị có cập nhật A/B
Để hỗ trợ cập nhật OTA trên các thiết bị sử dụng cập nhật A/B , hãy đảm bảo rằng bộ tải khởi động của thiết bị đáp ứng các tiêu chí sau.
Tiêu chí chung
Tất cả các phân vùng được cập nhật qua OTA phải có thể cập nhật được trong khi hệ thống chính được khởi động (và không được cập nhật trong quá trình khôi phục).
Để khởi động phân vùng
system
, bộ nạp khởi động chuyển giá trị sau trên dòng lệnh kernel:ro root=/dev/[node] rootwait init=/init
.Khung công tác Android có trách nhiệm gọi
markBootSuccessful
từ HAL. Bộ nạp khởi động không bao giờ được đánh dấu phân vùng là đã khởi động thành công.
Hỗ trợ điều khiển khởi động HAL
Bộ tải khởi động phải hỗ trợ boot_control
HAL như được xác định trong hardware/libhardware/include/hardware/boot_control.h
). Trình cập nhật truy vấn điều khiển khởi động HAL , cập nhật khe khởi động hiện không được sử dụng, thay đổi khe khởi động bằng HAL và khởi động lại vào hệ điều hành đã cập nhật. Để biết chi tiết, hãy xem Triển khai điều khiển khởi động HAL .
Hỗ trợ khe cắm
Bộ nạp khởi động phải hỗ trợ chức năng liên quan đến phân vùng và khe cắm, bao gồm:
Tên phân vùng phải bao gồm hậu tố xác định phân vùng nào thuộc về một vị trí cụ thể trong bộ nạp khởi động. Đối với mỗi phân vùng như vậy, có một biến tương ứng
has-slot: partition base name
có giá trị làyes
. Các vị trí được đặt tên theo thứ tự bảng chữ cái là a, b, c, v.v. tương ứng với các phân vùng có hậu tố_a
,_b
,_c
, v.v. Bộ tải khởi động sẽ thông báo cho hệ điều hành biết vị trí nào đã được khởi động bằng thuộc tính dòng lệnhandroidboot.slot_suffix
. Thuộc tính này được đặt thông qua bootconfig cho các thiết bị chạy Android 12 trở lên.Giá trị
slot-retry-count
được đặt lại thành giá trị dương (thường là3
), bằng điều khiển khởi động HAL thông qua lệnh gọi lạisetActiveBootSlot
hoặc thông qua lệnhfastboot set_active
. Khi sửa đổi phân vùng là một phần của khe cắm, bộ nạp khởi động sẽ xóa "khởi động thành công" và đặt lại số lần thử lại cho khe cắm đó.
Bộ nạp khởi động cũng phải xác định khe nào sẽ được tải. Hình này cho thấy một ví dụ về quá trình ra quyết định.
Xác định vị trí nào cần thử. Đừng cố tải một vị trí được đánh dấu
slot-unbootable
. Vị trí này phải nhất quán với các giá trị được fastboot trả về và được gọi là vị trí hiện tại.Nếu vị trí hiện tại không được đánh dấu là
slot-successful
và cóslot-retry-count = 0
, hãy đánh dấu vị trí hiện tại làslot-unbootable
. Sau đó chọn một vị trí khác không được đánh dấu làunbootable
và được đánh dấu làslot-successful
; vị trí này bây giờ là vị trí được chọn. Nếu không có khe cắm hiện tại, hãy khởi động vào recovery hoặc hiển thị thông báo lỗi có ý nghĩa cho người dùng.Chọn
boot.img
thích hợp và bao gồm đường dẫn sửa phân vùng hệ thống trên dòng lệnh kernel.Điền tham số
slot_suffix
dòng lệnh kernel.Khởi động. Nếu không được đánh dấu
slot-successful
, hãy giảmslot-retry-count
.
Tiện ích fastboot
xác định phân vùng nào sẽ flash khi chạy bất kỳ lệnh flash nào. Ví dụ: chạy lệnh fastboot flash system system.img
trước tiên truy vấn biến current-slot
sau đó ghép kết quả với hệ thống để tạo tên của phân vùng cần được flash ( system_a
, system_b
, v.v.).
Khi đặt vị trí hiện tại bằng lệnh fastboot set_active
hoặc lệnh HAL setActiveBootSlot
điều khiển khởi động, bộ nạp khởi động sẽ cập nhật vị trí hiện tại, xóa slot-unbootable
và slot-successful
và đặt lại số lần thử lại (đây là cách duy nhất để xóa slot-unbootable
).
Các thiết bị không có cập nhật A/B
Để hỗ trợ cập nhật OTA trên các thiết bị không sử dụng bản cập nhật A/B (xem Các thiết bị có thể cập nhật không phải A/B ), hãy đảm bảo rằng bộ tải khởi động của thiết bị đáp ứng các tiêu chí sau.
Phân vùng
recovery
phải chứa hình ảnh có khả năng đọc hình ảnh hệ thống từ một số phân vùng được hỗ trợ (cache
,userdata
) và ghi nó vào phân vùngsystem
.Bộ nạp khởi động phải hỗ trợ khởi động lại trực tiếp vào chế độ khôi phục.
Nếu cập nhật hình ảnh radio được hỗ trợ, phân vùng
recovery
cũng có thể flash radio. Điều này có thể được thực hiện theo một trong hai cách:Bộ nạp khởi động nhấp nháy radio. Trong trường hợp này, có thể khởi động lại từ phân vùng khôi phục vào bộ nạp khởi động để hoàn tất cập nhật.
Hình ảnh khôi phục nhấp nháy trên radio. Chức năng này có thể được cung cấp dưới dạng thư viện hoặc tiện ích nhị phân.