Để 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 đĩ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 sửa đổi, 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 bản cập nhật 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 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ợ bản cập nhật OTA trên các 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 OTA đều có thể cập nhật 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, trình tải khởi động sẽ truyền giá trị sau trên dòng lệnh của kernel:ro root=/dev/[node] rootwait init=/init.Khung Android chịu trách nhiệm gọi
markBootSuccessfultừ 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 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 bài viết
Triển khai HAL kiểm soát quá trình khởi động.
Hỗ trợ cho các 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 có hậu tố xác định phân vùng nào thuộc về 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 tương ứng
has-slot:partition base namecó giá trị làyes. Các khe đượ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 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 đặt thông qua bootconfig cho các thiết bị ra mắt 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 kiểm soát quá trình khởi động thông qua lệnh gọi lạisetActiveBootSlothoặ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á "đã 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 cần tải. Hình minh hoạ quy trình quyết định mẫu.
Xác định khung giờ nào cần thử. Đừng cố tải một khe được đánh dấu là
slot-unbootable. Khe này phải nhất quán với các giá trị do fastboot trả về và được gọi là khe hiện tại.Nếu khe hiện tại không được đánh dấu là
slot-successfulvà 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 khác không được đánh dấu làunbootablevà được đánh dấu làslot-successful; khe này hiện là khe đã chọn. Nếu không có khe 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.imgthích hợp và đưa đường dẫn đến phân vùng hệ thống chính xác trên dòng lệnh của kernel.Điền tham số
slot_suffixtrên dòng lệnh của kernel.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 nào 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, sau đó nối kết quả với hệ thống để tạo tên của phân vùng cần flash (system_a, system_b, v.v.).
Khi đặt khe 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 phải 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 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
recoveryphả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ợ bản cập nhật hình ảnh radio, phân vùng
recoverycũng phải có thể flash radio. 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 flash radio. 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 flash radio. 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.