Triển khai DTO

Việc triển khai lớp phủ cây thiết bị (DTO) bao gồm việc chia cây thiết bị (DT), xây dựng, 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ác cấu hình mặc định do nhà cung cấp SoC cung cấp.
  • Lớp phủ DT. Các cấu hình dành riêng cho thiết bị do ODM/OEM cung cấp.

Sau khi chia DT, bạn phải đảm bảo khả năng tương thích giữa DT chính và lớp phủ DT để việc hợp nhất DT chính và lớp phủ DT 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 bài viết Sử dụng nhiều DT.

Tạo DT chính và lớp phủ DT

Cách tạo DT chính:

  1. Biên dịch DT chính .dts thành tệp .dtb.
  2. Ghi tệp .dtb vào một phân vùng có thể truy cập trong thời gian chạy trình tải khởi động (được trình bày chi tiết trong phần [Phân vùng DT](#partition)).

Cách tạo lớp phủ DT:

  1. 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 nhau sẽ phân biệt tệp này với DT chính.
  2. Ghi tệp .dtbo vào một phân vùng có thể truy cập trong thời gian chạy trình tải khởi động (được trình bày chi tiết trong phần [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ủ, hãy xem 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 trình tải khởi động trong bộ nhớ flash để đặt .dtb.dtbo.

Ví dụ về các vị trí 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)
  • Các blob DT riêng biệt (.dtb) trong phân vùng dành riêng (dtb)

Ví dụ về các 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ủa bạn 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 lớp phủ DT 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 tăng thêm trong tương lai nếu cần.

Đối với các thiết bị hỗ trợ bản cập nhật liền mạch (A/B), hãy phân vùng A/B cho DT chính và lớp phủ DT:

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 bằng .dtbo để trở thành một DT đã hợp nhất.
  4. Khởi động kernel theo đị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 bề mặt API cho DTBO. Sau khi tách DT thành một phần chung cho 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 giữa hai phần này 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. Bất kỳ thay đổi nào về định nghĩa trong DT chính đều có thể kích hoạt các thay đổi trong lớp phủ DT. 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 lớp phủ DT).
  • Vị trí lưu trữ lớp phủ DT. Ví dụ: tên phân vùng, định dạng lưu trữ.

Đảm bảo tính bảo mật

Trình tải khởi động phải đảm bảo DTB hoặc 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 hoặc DTBO, ví dụ: Chữ ký hình ảnh khởi động trong VBoot 1.0 hoặc AVB chân trang 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 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 Khởi động đã xác minh.