Để triển khai các bản cập nhật qua mạng không dây (OTA), trình tải khởi động phải có thể truy cập vào đĩa RAM khôi phục trong quá trình khởi động. Nếu thiết bị sử dụng hình ảnh khôi phục AOSP chưa được sửa đổi, thì trình tải 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
, thì trình tải khởi động sẽ khởi động vào hình ảnh recovery
. Phương thức này cho phép mọi hoạt động khôi phục đang chờ xử lý (ví dụ: áp dụng OTA hoặc xoá dữ liệu) tiếp tục hoàn tất.
Để biết thông tin chi tiết về nội dung của một khối trong bộ nhớ flash dùng cho hoạt động giao tiếp của quá trình khôi phục và trình tải khởi động, hãy tham khảo bootable/recovery/bootloader_message/bootloader_message.h.
Thiết bị có bản cập nhật A/B
Để hỗ trợ các bản cập nhật OTA trên những thiết bị sử dụng bản cập nhật A/B, hãy đảm bảo rằng trình 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 thông qua bản cập nhật qua mạng đều có thể cập nhật trong khi hệ thống chính đang khởi động (và không được cập nhật trong chế độ khôi phục).
Để khởi động phân vùng
system
, trình tải khởi động sẽ truyền giá trị sau trên dòng lệnh của nhân:ro root=/dev/[node] rootwait init=/init
.Khung Android có trách nhiệm gọi
markBootSuccessful
từ HAL. Trình tải khởi động không bao giờ được đánh dấu một phân vùng là đã khởi động thành công.
Hỗ trợ HAL kiểm soát quá trình khởi động
Trình tải khởi động phải hỗ trợ HAL boot_control
như được xác định trong hardware/libhardware/include/hardware/boot_control.h
. Trình cập nhật truy vấn HAL kiểm soát quá trình khởi động, cập nhật khe khởi động không được dùng, thay đổi khe đang hoạt động bằng HAL và khởi động lại vào hệ điều hành đã cập nhật. Để biết thông tin chi tiết, hãy xem phần Triển khai HAL điều khiển khởi động.
Hỗ trợ các khe cắm
Trình tải khởi động phải hỗ trợ chức năng liên quan đến các phân vùng và khe cắm, bao gồm:
Tên phân vùng phải có một hậu tố xác định phân vùng nào thuộc một khe cắm cụ thể trong trình tải khởi động. Đối với mỗi phân vùng như vậy, sẽ có một biến
has-slot:partition base name
tương ứng có giá trị làyes
. Các khe cắm được đặt tên theo 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. Trình tải khởi động phải thông báo cho hệ điều hành biết khe cắm nào đã được khởi động bằng cách sử dụng thuộc tính dòng lệnhandroidboot.slot_suffix
. Thuộc tính này được thiết lập thông qua bootconfig cho các thiết bị khởi chạy bằng Android 12 trở lên.Giá trị
slot-retry-count
được đặt lại thành một giá trị dương (thường là3
), bằng HAL điều khiển khởi động thông qua lệnh gọi lạisetActiveBootSlot
hoặc thông qua lệnhfastboot set_active
. Khi sửa đổi một phân vùng thuộc một khe cắm, trình tải khởi động sẽ xoá "đã khởi động thành công" và đặt lại số lần thử lại cho khe cắm.
Trình tải khởi động cũng phải xác định khe cắm cần tải. Hình này minh hoạ một quy trình đưa ra quyết định mẫu.

Xác định vị trí cần thử. Đừng cố gắng tải một khe được đánh dấu là
slot-unbootable
. Vị trí này phải nhất quán với các giá trị do fastboot trả về và được gọi là vị trí hiện tại.Nếu khe hiện tại không được đánh dấu là
slot-successful
và cóslot-retry-count = 0
, hãy đánh dấu khe hiện tại làslot-unbootable
. Sau đó, hãy chọn một khe cắm khác không được đánh dấuunbootable
và được đánh dấu làslot-successful
; khe cắm này hiện là khe cắm được chọn. Nếu không có khe cắm hiện tại nào, hãy khởi động vào chế độ khôi phục 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à thêm đường dẫn đến phân vùng hệ thống chính xác trên dòng lệnh của nhân.Điền tham số
slot_suffix
dòng lệnh của nhân.Khởi động. Nếu không được đánh dấu là
slot-successful
, hãy giảmslot-retry-count
.
Tiện ích fastboot
xác định phân vùng cần flash khi chạy bất kỳ lệnh flash nào. Ví dụ: khi chạy lệnh fastboot flash system system.img
, trước tiên, lệnh này sẽ truy vấn biến current-slot
rồi nối 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 khe cắm hiện tại bằng lệnh fastboot set_active
hoặc lệnh HAL kiểm soát quá trình khởi động setActiveBootSlot
, trình tải khởi động sẽ cập nhật khe cắm hiện tại, xoá slot-unbootable
và slot-successful
, đồng thời đặt lại số lần thử lại (đây là cách duy nhất để xoá slot-unbootable
).
Thiết bị không có bản cập nhật A/B
Để hỗ trợ các bản cập nhật OTA trên những thiết bị không sử dụng bản cập nhật A/B (xem phần Thiết bị có thể cập nhật không phải A/B), hãy đảm bảo rằng trình 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 một 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 hình ảnh đó vào phân vùngsystem
.Trình tải khởi động phải hỗ trợ khởi động trực tiếp vào chế độ khôi phục.
Nếu được hỗ trợ cập nhật hình ảnh vô tuyến, thì phân vùng
recovery
cũng phải có khả năng flash đài. Bạn có thể thực hiện việc này theo một trong hai cách:Trình tải khởi động sẽ nhấp nháy đài. Trong trường hợp này, bạn có thể khởi động lại từ phân vùng khôi phục về trình tải khởi động để hoàn tất quá trình cập nhật.
Hình ảnh khôi phục sẽ nhấp nháy đài. Chức năng này có thể được cung cấp dưới dạng một thư viện hoặc tiện ích nhị phân.