Phân vùng ODM

Android 10 hỗ trợ việc tạo phân vùng odm bằng hệ thống xây dựng Android.

Giới thiệu về các phân vùng ODM

Nhà sản xuất thiết kế gốc (ODM) tuỳ chỉnh gói hỗ trợ bo mạch (BSP) của nhà cung cấp hệ thống trên một chip (SoC) cho các thiết bị cụ thể (bo mạch) của họ. Điều này cho phép họ triển khai các mô-đun hạt nhân cho các thành phần dành riêng cho bo mạch, trình nền dành riêng cho bo mạch hoặc các tính năng riêng của họ trên các lớp trừu tượng phần cứng (HAL). Họ cũng có thể muốn thay thế hoặc tuỳ chỉnh các thành phần SoC.

Trong các bản phát hành Android thấp hơn, các tuỳ chỉnh như vậy đã ngăn việc sử dụng một hình ảnh nhà cung cấp duy nhất cho các thiết bị có cùng một SoC (hoặc có nhiều SoC nhưng thuộc cùng một gia đình). Trong Android 10 trở lên, bạn có thể sử dụng một phân vùng odm riêng biệt để tuỳ chỉnh, cho phép bạn sử dụng một hình ảnh nhà cung cấp cho nhiều SKU phần cứng.

Sử dụng các phân vùng sản phẩm và ODM

Android 9 đã thêm tính năng hỗ trợ tạo phân vùng product, cho phép sử dụng một hình ảnh hệ thống cho nhiều SKU phần mềm do nhiều hình ảnh product.img cung cấp. Mặc dù phân vùng product dành cho SKU phần mềm, nhưng phân vùng odm dành cho SKU phần cứng.

Với các phân vùng sản phẩm và ODM chuyên dụng, bạn có thể sử dụng phân vùng system để lưu trữ mã chung để chia sẻ giữa nhiều SKU phần mềm và phân vùng vendor để lưu trữ mã BSP dành riêng cho SoC để chia sẻ giữa nhiều thiết bị dựa trên SoC nhất định.

Việc sử dụng các phân vùng riêng biệt có một số bất lợi, chẳng hạn như khó quản lý dung lượng ổ đĩa (ví dụ: bạn phải dành một lượng dung lượng hạn chế để tăng trưởng trong tương lai). Tuy nhiên, tính năng hỗ trợ phân vùng động của Android 10 sẽ loại bỏ vấn đề về ổ đĩa và cho phép phân vùng lại thiết bị trong quá trình cập nhật qua mạng không dây (OTA).

Thành phần ODM

Phân vùng odm chứa các thành phần dành riêng cho ODM sau đây (tương tự như phân vùng vendor), được liệt kê trong bảng sau.

Thành phần dành riêng cho ODM Vị trí
Mô-đun nhân có thể tải (LKM) /odm/lib/modules/*.ko
Thư viện gốc /odm/lib[64]
HAL /odm/lib[64]/hw
SEPolicy /odm/etc/selinux
Dữ liệu đối tượng VINTF /odm/etc/vintf
Tệp init.rc /odm/etc/init
Thuộc tính hệ thống /odm/build.prop
Lớp phủ tài nguyên thời gian chạy (RRO) /odm/overlay/*.apk
Ứng dụng /odm/app/*.apk
Priv-apps /odm/priv-app/*.apk
Thư viện Java /odm/framework/*.jar
Cấu hình hệ thống Khung Android /odm/etc/sysconfig/*/odm/etc/permissions/*

Không có hình ảnh tuỳ chỉnh

Đừng sử dụng hình ảnh tuỳ chỉnh vì các hình ảnh này không hỗ trợ những tính năng sau:

  • Cài đặt một mô-đun cho một mục tiêu cụ thể. Hình ảnh tuỳ chỉnh hỗ trợ sao chép cấu phần phần mềm vào hình ảnh, nhưng không thể cài đặt mô-đun vào một phân vùng cụ thể bằng cách chỉ định phân vùng mục tiêu là một phần của quy tắc bản dựng.
  • Soong. Không thể tạo custom_images bằng hệ thống xây dựng Soong.
  • Cập nhật qua mạng không dây (OTA). Hình ảnh tuỳ chỉnh được dùng làm hình ảnh ROM gốc không thể được OTA.

Duy trì ABI giữa các phân vùng

Phân vùng odm là phần mở rộng của phân vùng vendor. Khi xem xét độ ổn định của giao diện nhị phân của ứng dụng (ABI), hãy lưu ý đến cấu trúc sau.

Duy trì ABI giữa các phân vùng

Hình 1. Duy trì ABI giữa các phân vùng.

  • Không có độ ổn định ABI giữa các phân vùng odmvendor. Bạn phải nâng cấp cả hai phân vùng cùng một lúc.
  • Các phân vùng odmvendor có thể phụ thuộc lẫn nhau, nhưng phân vùng vendor phải hoạt động mà không cần phân vùng odm.
  • ABI giữa odmsystem giống với ABI giữa vendorsystem.

Không được phép tương tác trực tiếp giữa phân vùng product và phân vùng vendor hoặc odm. (Điều này do SEpolicy thực thi.)

Triển khai các phân vùng ODM

Trước khi triển khai một phân vùng mới, hãy xem lại các thay đổi liên quan đến AOSP.

Thiết lập các phân vùng ODM

Để thiết lập các phân vùng odm, hãy thêm các cờ bản dựng sau:

  • BOARD_ODMIMAGE_PARTITION_SIZE cho kích thước phân vùng cố định
  • PRODUCT_USE_DYNAMIC_PARTITIONSBOARD_ODMIMAGE_PARTITION_RESERVED_SIZE cho kích thước phân vùng động
  • Loại hệ thống tệp BOARD_ODMIMAGE_FILE_SYSTEM_TYPE dùng cho hình ảnh ODM
  • PRODUCT_ODM_PROPERTIES cho /odm/build.prop để sử dụng trong $(call inherit-product path/to/device.mk), như trong PRODUCT_ODM_PROPERTIES += product.abc=ok

Cài đặt mô-đun vào phân vùng ODM

Sử dụng các cờ bản dựng này để cài đặt mô-đun vào phân vùng odm:

  • device_specific: true trong Android.bp
  • LOCAL_ODM_MODULE := true trong Android.mk

Bật tính năng Xác minh quy trình khởi động

Để ngăn phần mềm độc hại can thiệp vào các phân vùng odm, hãy bật tính năng Khởi động được xác minh của Android (AVB) cho các phân vùng đó (giống như bạn làm với các phân vùng vendorsystem).

Để bật AVB, hãy thêm cờ bản dựng BOARD_AVB_ODM_ADD_HASHTREE_FOOTER_ARGS. Để biết thông tin chi tiết về cách định cấu hình AVB trên các phân vùng động, hãy xem phần Thay đổi về cấu hình AVB.

Xem /odm là một phân vùng /vendor khác

Để đảm bảo hệ thống xử lý phân vùng odm dưới dạng phân vùng vendor, hãy thay thế mọi tệp tham chiếu vendor được mã hoá cứng bằng một tập hợp các phân vùng hướng đến phần cứng (hiện là odmvendor). Các vị trí tham chiếu vendor đáng chú ý trong nền tảng bao gồm trình liên kết động, trình quản lý góishell/libc.