Việc triển khai lớp phủ cây thiết bị (DTO) liên quan đến việc phân chia cây thiết bị (DT), tạo, phân vùng và chạy. Sau khi triển khai thành công, bạn cũng phải duy trì khả năng tương thích giữa hai DT và xác định chiến lược để đảm bảo tính bảo mật của từng phân vùng DT.
Chia DT
Bắt đầu bằng cách chia DT thành hai phần:
- DT chính. Phần chỉ dành cho SoC và cấu hình mặc định do nhà cung cấp SoC cung cấp.
- Lớp phủ DT. Cấu hình dành riêng cho thiết bị, do ODM/OEM cung cấp.
Sau khi phân chia các DT, bạn phải đảm bảo tính tương thích giữa DT chính và DT lớp phủ để việc hợp nhất DT chính và DT lớp phủ sẽ tạo ra một DT hoàn chỉnh cho thiết bị. Để biết thông tin chi tiết về định dạng và quy tắc DTO, hãy xem cú pháp DTO. Để biết thông tin chi tiết về nhiều DT, hãy xem phần Sử dụng nhiều DT.
Tạo DT chính và lớp phủ
Cách tạo DT chính:
- Biên dịch
.dts
DT chính thành tệp.dtb
. - Truyền tệp
.dtb
vào một phân vùng có thể truy cập trong thời gian chạy của trình tải khởi động (chi tiết trong [Phân vùng DT](#partition)).
Cách tạo DT lớp phủ:
- Biên dịch lớp phủ DT
.dts
thành tệp.dtbo
. Mặc dù định dạng tệp này giống với tệp.dtb
được định dạng dưới dạng DT được làm phẳng, nhưng đuôi tệp khác biệt giúp phân biệt định dạng này với DT chính. - Truyền tệp
.dtbo
vào một phân vùng có thể truy cập trong thời gian chạy của trình tải khởi động (chi tiết trong [Phân vùng DT](#partition)).
Để biết thông tin chi tiết về cách biên dịch bằng DTC và xác minh kết quả DTO trên máy chủ lưu trữ, hãy xem phần Biên dịch và xác minh.
Phân vùng DT
Xác định vị trí đáng tin cậy và có thể truy cập trong thời gian chạy của trình tải khởi động trong bộ nhớ flash để đặt .dtb
và .dtbo
.
Ví dụ về vị trí của DT chính:
- Một phần của phân vùng khởi động, được thêm vào hạt nhân (
image.gz
) - Tách các blob DT (
.dtb
) trong phân vùng chuyên dụng (dtb
)
Ví dụ về vị trí của DT lớp phủ:
Hình 1. Đặt .dtbo vào một phân vùng odm (chỉ thực hiện việc này nếu trình tải khởi động có khả năng tải dữ liệu từ hệ thống tệp của phân vùng odm).
Hình 2. Đặt .dtbo vào một phân vùng duy nhất, chẳng hạn như phân vùng dtbo.
Lưu ý: Kích thước của phân vùng DT lớp phủ phụ thuộc vào thiết bị và số lượng thay đổi cần thiết trên blob DT chính. Thông thường, 8 MB là quá đủ và cho phép bạn có không gian để phát triển trong tương lai nếu cần.
Đối với các thiết bị hỗ trợ cập nhật liền mạch (A/B), hãy A/B các phân vùng DT chính và DT lớp phủ:
Hình 3. Phân vùng DTBO A/B, ví dụ 1.
Hình 4. Phân vùng DTBO A/B, ví dụ 2.
Chạy trong trình tải khởi động
Cách chạy:
Hình 5. Cách triển khai thời gian chạy thông thường cho DTO trong trình tải khởi động.
- Tải
.dtb
từ bộ nhớ vào bộ nhớ. - Tải
.dtbo
từ bộ nhớ vào bộ nhớ. - Lớp phủ
.dtb
với.dtbo
để trở thành DT hợp nhất. - Bắt đầu hạt nhân dựa trên địa chỉ bộ nhớ của DT đã hợp nhất.
Duy trì khả năng tương thích
DTB chính (từ nhà cung cấp SoC) được coi là nền tảng API cho DTBO. Sau khi tách DT thành một phần chung của SoC và một phần dành riêng cho thiết bị, bạn phải duy trì khả năng tương thích lẫn nhau của hai phần này trong tương lai, bao gồm:
- Định nghĩa DT trong DT chính. Ví dụ: nút, thuộc tính, nhãn. Mọi thay đổi về định nghĩa trong DT chính đều có thể kích hoạt các thay đổi trong DT lớp phủ. Ví dụ: để sửa tên nút trong DT chính, hãy xác định nhãn "alias" (bí danh) liên kết với tên nút ban đầu (để tránh thay đổi DT lớp phủ).
- Lớp phủ vị trí cửa hàng DT. Ví dụ: tên phân vùng, định dạng lưu trữ.
Đảm bảo an toàn
Trình tải khởi động phải đảm bảo DTB hoặc DTBO an toàn, không bị sửa đổi và không bị hỏng. Bạn có thể sử dụng bất kỳ giải pháp nào để bảo mật DTB hoặc DTBO, ví dụ: Chữ ký hình ảnh khởi động trong VBoot 1.0 hoặc Chân trang AVB HASH (VBoot 2.0).
- Nếu DTB hoặc DTBO nằm trong một phân vùng riêng biệt, bạn có thể thêm phân vùng đó vào chuỗi tin cậy của AVB. Chuỗi tin cậy bắt đầu từ một thư mục gốc tin cậy được bảo vệ bằng phần cứng và chuyển đến trình tải khởi động để xác minh tính toàn vẹn và tính xác thực của phân vùng DTB hoặc DTBO.
- Nếu DTB hoặc DTBO nằm trong một phân vùng hiện có (chẳng hạn như phân vùng
odm
), thì phân vùng đó phải nằm trong chuỗi tin cậy của AVB. (Phân vùng DTBO có thể chia sẻ khoá công khai với phân vùngodm
).
Để biết thông tin chi tiết, hãy tham khảo phần Khởi động được xác minh.