Việc triển khai DTO bao gồm việc phân chia cây thiết bị, xây dựng, phân vùng và chạy. Sau khi triển khai hoạt độ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 cho từng phân vùng DT.
Chia DT
Bắt đầu bằng cách chia cây thiết bị thành hai (2) phần:
- ĐT chính . Phần chỉ dành cho 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 phân chia cây thiết bị, bạn phải đảm bảo khả năng 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 thành một DT hoàn chỉnh cho thiết bị. Để biết chi tiết về định dạng và quy tắc DTO, hãy xem Cú pháp DTO . Để biết chi tiết về nhiều cây thiết bị, hãy xem Nhiều DT .
Xây dựng DT chính và lớp phủ
Để xây dựng DT chính:
- Biên dịch DT
.dts
chính thành tệp.dtb
. - Flash tệp
.dtb
vào phân vùng có thể truy cập thời gian chạy của bộ nạp khởi động (chi tiết bên dưới).
Để xây dựng lớp phủ DT:
- 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 cây thiết bị phẳng, nhưng phần mở rộng tệp khác nhau sẽ phân biệt nó với DT chính. - Flash tệp
.dtbo
vào phân vùng có thể truy cập thời gian chạy của bộ nạp khởi động (như chi tiết bên dưới).
Để biết 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 Biên dịch & Xác minh .
Phân vùng DT
Xác định vị trí đáng tin cậy và có thể truy cập thời gian chạy của bộ nạp khởi động trong bộ nhớ flash để đặt .dtb
và .dtbo
.
Vị trí ví dụ cho DT chính:
- Một phần của phân vùng khởi động, được thêm vào kernel (
image.gz
). - Tách các đốm màu DT (
.dtb
) trong phân vùng chuyên dụng (dtb
).
Vị trí ví dụ cho lớp phủ DT:
Phân vùng duy nhất |
---|
Phân vùng ODM |
---|
.dtbo
vào phân vùng odm
(chỉ thực hiện việc này nếu bộ nạp khởi động của bạn có khả năng tải dữ liệu từ hệ thống tập tin của phân vùng odm
).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à có thể 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) , A/B cho các phân vùng DT chính và lớp phủ DT:
ví dụ 1 |
---|
Ví dụ 2 |
---|
Chạy trong bộ nạp khởi động
Chạy:
- Tải
.dtb
từ bộ lưu trữ vào bộ nhớ. - Tải
.dtbo
từ bộ lưu trữ vào bộ nhớ. - Xếp chồng
.dtb
với.dtbo
để trở thành một DT hợp nhất. - Bắt đầu kernel với đị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à bề mặt API cho DTBO. Sau khi tách cây thiết bị thành phần SoC chung và phần dành riêng cho thiết bị, bạn phải giữ cho 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ụ: nút, thuộc tính, nhãn) . Bất kỳ thay đổi định nghĩa nào trong DT chính đều có thể gây ra những 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ạ tới tên nút gốc (để tránh thay đổi lớp phủ DT).
- Lớp phủ vị trí lưu trữ DT (ví dụ: tên phân vùng, định dạng cửa hàng) .
Đảm bảo an ninh
Bộ tải khởi động phải đảm bảo DTB/DTBO được bảo mật, 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/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/DTBO nằm trong một phân vùng duy nhấ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ừ gốc tin cậy được bảo vệ bằng phần cứng và đi tới bộ nạp khởi động, bộ nạp khởi động này xác minh tính toàn vẹn và tính xác thực của phân vùng DTB/DTBO.
- Nếu DTB/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ẻ khóa chung với phân vùngodm
).
Để biết chi tiết, hãy tham khảo Khởi động đã xác minh .