Triển khai DTO

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:

  1. Biên dịch DT chính .dts thành tệp .dtb.
  2. 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ủ:

  1. 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.
  2. 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.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.

  1. Tải .dtb từ bộ nhớ vào bộ nhớ.
  2. Tải .dtbo từ bộ nhớ vào bộ nhớ.
  3. Lớp phủ .dtb với .dtbo để trở thành một DT hợp nhất.
  4. 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ùng odm).

Để 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.