Triển khai DTO

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:

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

  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 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.
  2. 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.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
Hình 1. Đặt .dtbo vào một phân vùng duy nhất, ví dụ phân vùng dtbo .
Phân vùng ODM
Hình 2. Đặt .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
Hình 3. Phân vùng DTBO A/B, ví dụ 1.
Ví dụ 2
Hình 4. Phân vùng DTBO A/B, ví dụ 2

Chạy trong bộ nạp khởi động

Chạy:

Hình 5. Triển khai thời gian chạy điển hình cho lớp phủ cây thiết bị trong bộ nạp khởi động.
  1. Tải .dtb từ bộ lưu trữ vào bộ nhớ.
  2. Tải .dtbo từ bộ lưu trữ vào bộ nhớ.
  3. Xếp chồng .dtb với .dtbo để trở thành một DT hợp nhất.
  4. 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ùng odm ).

Để biết chi tiết, hãy tham khảo Khởi động đã xác minh .