Việc triển khai lớp phủ cây thiết bị (DTO) bao gồm 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:
- Main DT. Phần chỉ có SoC và các 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 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 phần 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à DT lớp phủ
Cách tạo DT chính:
- Biên dịch DT chính
.dts
thành tệp.dtb
. - Nạp 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 (được trình bày chi tiết trong [Partition DTs](#partition)).
Cách tạo DT lớp phủ:
- Biên dịch DT lớp phủ
.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 nhau sẽ phân biệt tệp này với DT chính. - Nạp 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 (được trình bày chi tiết trong [Partition DTs](#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ủ, hãy xem phần Biên dịch và xác minh.
Phân vùng DT
Xác định một 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í cho DT chính:
- Một phần của phân vùng khởi động, được thêm vào 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í cho lớp phủ DT:
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 một phân vùng odm).
Hình 2. Đặt .dtbo vào một phân vùng riêng biệ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 đầu blob DT chính. Thông thường, 8 MB là quá đủ và cho phép tăng dung lượng trong tương lai nếu cần.
Đối với những thiết bị hỗ trợ bản cập nhật liền mạch (A/B), hãy phân vùng DT chính và DT lớp phủ A/B:
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. Triển khai thời gian chạy điển hình 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 một DT hợp nhất. - Khởi động nhân bằng đị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à một 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 đảm bảo hai phần này tương thích với nhau trong tương lai, bao gồm:
- Định nghĩa DT trong DT chính. Ví dụ: các 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 "bí danh" ánh xạ đến 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 cửa hàng.
Đả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 Phần chân trang HASH AVB (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 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. Trình tải khởi động này sẽ 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 bài viết Xác minh quy trình khởi động.