DTB hình ảnh

Việc triển khai Android có thể bao gồm hình ảnh blob cây thiết bị (DTB) để bộ tải khởi động sử dụng. Vị trí của hình ảnh DTB (và các tùy 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 chuyển 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 nó là một phần của phân vùng khởi động của nhà cung cấp. Để chỉ định các tham số hình ảnh DTB, hãy xem Tiêu đề khởi động của nhà cung cấp .

  • Trong Android 10, thiết bị có thể đưa hình ảnh DTB vào phân vùng khởi động. Để chỉ định các tham số hình ảnh DTB, hãy xem Đư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ể tồn tại trong phân vùng riêng hoặc được thêm vào kernel image.gz để tạo kernel + image DTB (sau đó được chuyển tới mkbootimg để tạo boot.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 đốm màu DT nối tiếp nhau. Bộ tải khởi động sử dụng trường totalsize trong mỗi tiêu đề FDT để đọc và phân tích blob tương ứng.

  • Phân vùng DTB/DTBO. Bộ nạp khởi động có một cách hiệu quả để chọn đúng blob DT bằng cách kiểm tra cấu trúc dt_table_entry (chứa các trường id , revcustom ) có thể chứa thông tin nhận dạng phần cứng cho mục nhập). Để biết chi tiết, hãy xem Phân vùng DTB/DTBO .

Bao gồm hình ảnh DTB trong hình ảnh khởi động

Các thiết bị chạy Android 10 có thể đưa hình ảnh DTB vào hình ảnh khởi động. Điều này loại bỏ nhu cầu Android hỗ trợ các tập lệnh gắn hình ảnh DTB vào image.gz trong kernel và cho phép sử dụng thử nghiệm Bộ kiểm tra nhà cung cấp (VTS) để xác minh (và chuẩn hóa) vị trí DTB.

Ngoài ra, đối với các thiết bị không phải A/B, việc đặt DTB như một phần của hình ảnh khôi phục sẽ an toàn hơn thay vì nằm trong một phân vùng riêng để ngăn chặn sự cố do OTA bị gián đoạn gây ra. Trong quá trình OTA, nếu xảy ra sự cố sau khi cập nhật phân vùng DTB (nhưng trước khi hoàn tất 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 OTA; tuy nhiên, vì phân vùng DTB đã được cập nhật nên có thể xảy ra hiện tượng 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 như một phần của định dạng hình ảnh khởi động sẽ ngăn ngừa những vấn đề như vậy bằng cách làm cho hình ảnh khôi phục tự đủ (nghĩa là nó không phụ thuộc vào một phân vùng khác).

Cấu trúc ảnh khởi động

Các thiết bị chạy Android 10 có thể bao gồm 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
Tiêu đề khởi động (1 trang) 1
Hạt nhân (l trang) l = ( kernel_size + page_size - 1) / page_size
Đĩa RAM (m trang) m = ( ramdisk_size + page_size - 1) / page_size
Bộ tải khởi động giai đoạn thứ hai (n trang) n = ( second_size + page_size - 1) / page_size
Phục hồi DTBO (o trang) 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.

Lý lẽ Sự miêu 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ố base0x10000000 và đối số dtb_offset0x01000000 thì dtb_addr_field trong tiêu đề ảnh khởi động được điền là 0x11000000 .

Biến cấu hình bảng BOARD_PREBUILT_DTBIMAGE_DIR phải được sử dụng để chỉ định đường dẫn đến hình ảnh DTB. Nếu có nhiều hơn một tệp có phần mở rộng *.dtb trong thư mục BOARD_PREBUILT_DTBIMAGE_DIR thì hệ thống xây dựng Android sẽ ghép các tệp để tạo hình ảnh DTB cuối cùng được sử dụng trong quá trình tạo hình ảnh khởi động.

Để chuyển đối số dtb cho mkbootimg.py với hình ảnh DTB từ thư mục được chỉ định bởi BOARD_PREBUILT_DTBIMAGE_DIR , biến cấu hình bảng BOARD_INCLUDE_DTB_IN_BOOTIMG phải được đặt thành true . Ví dụ:

BOARD_INCLUDE_DTB_IN_BOOTIMG := true

Bạn có thể nối đối số dtb_offset vào biến cấu hình bảng BOARD_MKBOOTIMG_ARGS với phiên bản tiêu đề và offset 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ợ bộ nạp khởi động

Để VTS chạy thành công trên các thiết bị chạy Android 10, bộ nạp khởi động phải hỗ trợ hình ảnh khởi động được cập nhật và phải thêm tham số dòng lệnh kernel androidboot.dtb_idx để cho biết chỉ mục của cây thiết bị đã chọn (DT). 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 là chỉ mục dựa trên 0 của cây thiết bị được bộ tải khởi động chọn từ tập hợp DTB có trong ảnh khởi động.