Các hoạt động triển khai Android có thể bao gồm một hình ảnh blob cây thiết bị (DTB) để trình tải khởi động sử dụng. Vị trí của hình ảnh DTB (và các lựa chọn để chỉ định tham số hình ảnh DTB) khác nhau giữa các bản phát hành Android.
Trong Android 11, các thiết bị sử dụng Hình ảnh hạt nhân chung (GKI) phải hỗ trợ phân vùng khởi động của nhà cung cấp, bao gồm tất cả thông tin dành riêng cho nhà cung cấp đã được di dời khỏi phân vùng khởi động. Vì hình ảnh DTB chứa dữ liệu dành riêng cho nhà cung cấp, nên giờ đây, hình ảnh này là một phần của phân vùng khởi động của nhà cung cấp. Để chỉ định các thông số hình ảnh DTB, hãy xem Tiêu đề khởi động của nhà cung cấp.
Trong Android 10, các thiết bị có thể bao gồm hình ảnh DTB trong phân vùng khởi động. Để chỉ định các tham số hình ảnh DTB, hãy xem phần Đưa hình ảnh DTB vào hình ảnh khởi động.
Trong Android 9 trở xuống, hình ảnh DTB có thể nằm trong phân vùng riêng hoặc được thêm vào hạt nhân
image.gz
để tạo hình ảnh hạt nhân + DTB (sau đó được truyền đếnmkbootimg
để tạoboot.img
).
Định dạng hình ảnh DTB
Trong Android 10 trở lên, hình ảnh DTB phải sử dụng một trong các định dạng sau:
Các blob DT được nối với nhau. Trình tải khởi động sử dụng trường
totalsize
trong mỗi tiêu đề FDT để đọc và phân tích cú pháp blob tương ứng.Phân vùng DTB/DTBO. Trình tải khởi động có một cách hiệu quả để chọn blob DT chính xác bằng cách kiểm tra cấu trúc
dt_table_entry
(chứa các trườngid
,rev
vàcustom
) có thể lưu giữ thông tin nhận dạng phần cứng cho mục nhập. Để biết thông tin chi tiết, hãy xem phần Phân vùng DTB/DTBO.
Đưa hình ảnh DTB vào hình ảnh khởi động
Các thiết bị chạy Android 10 có thể bao gồm hình ảnh DTB trong hình ảnh khởi động. Việc này giúp Android không cần hỗ trợ các tập lệnh nối hình ảnh DTB vào image.gz
trong nhân và cho phép sử dụng kiểm thử Vendor Test Suite (VTS) để xác minh (và chuẩn hoá) vị trí DTB.
Ngoài ra, đối với các thiết bị không phải A/B, sẽ an toàn hơn nếu DTB nằm trong hình ảnh khôi phục thay vì trong một phân vùng riêng biệt để ngăn chặn các vấn đề do OTA bị gián đoạn gây ra. Trong quá trình cập nhật qua mạng (OTA), nếu xảy ra vấn đề sau khi phân vùng DTB đượ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ố gắng khởi động vào chế độ khôi phục để hoàn tất quá trình cập nhật qua mạng. Tuy nhiên, vì phân vùng DTB đã được cập nhật, nên có thể xảy ra sự không khớp với hình ảnh khôi phục (chưa được cập nhật). Việc có hình ảnh DTB trong định dạng hình ảnh khởi động sẽ ngăn chặn những vấn đề như vậy bằng cách giúp hình ảnh khôi phục tự đủ (tức là không phụ thuộc vào một phân vùng khác).
Cấu trúc hình ảnh khởi động
Các thiết bị chạy Android 10 có thể bao gồm một hình ảnh DTB bằng cấu trúc hình ảnh khởi động sau.
Phần hình ảnh khởi động | Số trang |
---|---|
Đầu trang 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 thứ hai (n trang) | n = (second_size + page_size – 1) / page_size |
Recovery DTBO (o pages) | o = (recovery_dtbo_size + page_size – 1) / page_size |
DTB (p trang) | p = (dtb_size + page_size – 1) / page_size |
Đường dẫn hình ảnh DTB
Đối với các thiết bị chạy Android 10, bạn có thể sử dụng công cụ mkbootimg.py
và các đối số sau để chỉ định đường dẫn đến hình ảnh DTB.
Đối số | Mô tả |
---|---|
dtb |
Đường dẫn đến hình ảnh DTB sẽ được đưa vào hình ảnh khởi động/khôi phục. |
dtb_offset |
Khi được thêm vào đối số base , sẽ cung cấp địa chỉ tải vật lý cho cây thiết bị cuối cùng. Ví dụ: nếu đối số base là 0x10000000 và đối số dtb_offset là 0x01000000 , thì dtb_addr_field trong tiêu đề hình ảnh khởi động sẽ được điền là 0x11000000 . |
Bạn phải dùng biến cấu hình bảng BOARD_PREBUILT_DTBIMAGE_DIR
để chỉ định đường dẫn đến hình ảnh DTB. Nếu có nhiều tệp có đuôi *.dtb
trong thư mục BOARD_PREBUILT_DTBIMAGE_DIR
, hệ thống tạo bản dựng Android sẽ nối các tệp để tạo hình ảnh DTB cuối cùng được dùng trong quá trình tạo hình ảnh khởi động.
Để truyền đối số dtb
đến mkbootimg.py
bằng hình ảnh DTB từ thư mục do BOARD_PREBUILT_DTBIMAGE_DIR
chỉ định, bạn phải đặt biến cấu hình bảng BOARD_INCLUDE_DTB_IN_BOOTIMG
thành true
. Ví dụ:
BOARD_INCLUDE_DTB_IN_BOOTIMG := true
Bạn có thể thêm đối số dtb_offset
vào biến BOARD_MKBOOTIMG_ARGS
board config cùng với các độ lệch và phiên bản tiêu đề khác. Ví dụ:
BOARD_MKBOOTIMG_ARGS := --ramdisk_offset $(BOARD_RAMDISK_OFFSET) --dtb_offset $(BOARD_DTB_OFFSET) --tags_offset $(BOARD_KERNEL_TAGS_OFFSET) --header_version $(BOARD_BOOTIMG_HEADER_VERSION)
Hỗ trợ trình tải khởi động
Để VTS chạy thành công trên các thiết bị chạy Android 10, trình tải khởi động phải hỗ trợ hình ảnh khởi động đã cập nhật và phải thêm tham số dòng lệnh của hạt nhân androidboot.dtb_idx
để cho biết chỉ mục của cây thiết bị (DT) đã chọn. Bạn chỉ có thể chỉ định một (1) chỉ mục. Ví dụ: tham số androidboot.dtb_idx=N
báo cáo N
dưới dạng chỉ mục dựa trên 0 của cây thiết bị do trình tải khởi động chọn trong tập hợp DTB có trong hình ảnh khởi động.