Để triển khai 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 ổ 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 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
, 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 công việc 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 flash dùng cho hoạt động giao tiếp bằng cách 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ập nhật qua mạng không dây 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 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 OTA đều có thể cập nhật trong khi hệ thống chính 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 hạt 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 được đánh dấu một phân vùng là đã khởi động thành công.
Hỗ trợ HAL điều khiển 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 điều khiển khởi động, cập nhật khe khởi động không sử 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 kiểm soát khởi động.
Hỗ trợ khe
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, 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 một khe cụ thể trong trình tải khởi động. Đối với mỗi phân vùng như vậy, có một biến
has-slot:partition base name
tương ứng có giá trị làyes
. Các khe được đặt tên theo thứ tự bảng chữ cái như 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 về khe 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ị khởi chạy bằng Android 12 trở lên.Giá trị
slot-retry-count
được đặt lại thành giá trị dương (thường là3
), do HAL kiểm soát 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, trình tải khởi động sẽ xoá trạng thái "đã khởi động thành công" và đặt lại số lần thử lại cho khe đó.
Trình tải khởi động cũng phải xác định khe nào sẽ tải. Hình này minh hoạ một quy trình quyết định mẫu.
Xác định vị trí cần thử. Đừng cố tải một vị trí được đánh dấu là
slot-unbootable
. Khe này phải nhất quán với các giá trị do tính năng khởi động nhanh trả về và được gọi là khe 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 đó, hãy chọn một vùng khác không được đánh dấu làunbootable
và được đánh dấu làslot-successful
; vùng này hiện là vùng đã chọn. Nếu không có khe hiện tại, 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à đưa đường dẫn để sửa phân vùng hệ thống vào dòng lệnh hạt nhân.Điền tham số
slot_suffix
của dòng lệnh hạt 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 cài đặt ROM khi chạy bất kỳ lệnh cài đặt ROM nào. Ví dụ: trước tiên, việc chạy lệnh fastboot flash system system.img
sẽ truy vấn biến current-slot
, sau đó nối kết quả với hệ thống để tạo tên của phân vùng cần được cài đặt ROM (system_a
, system_b
, v.v.).
Khi thiết lập khe hiện tại bằng lệnh fastboot set_active
hoặc lệnh setActiveBootSlot
kiểm soát khởi động HAL, trình tải khởi động sẽ cập nhật khe 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ợ bản 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 phần Thiết bị không thể 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.
Phân vùng
recovery
phải chứa một hình ảnh có thể đọ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 sẽ hỗ trợ việc khởi động ngay vào chế độ khôi phục.
Nếu hỗ trợ bản cập nhật hình ảnh đài, thì phân vùng
recovery
cũng phải có thể cài đặt ROM cho đà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ẽ cài đặt ROM cho đà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ào 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 phát. Bạn có thể cung cấp chức năng này dưới dạng thư viện hoặc tiện ích nhị phân.