Phân vùng ODM

Android 10 bao gồm hỗ trợ xây dựng phân vùng odm bằng hệ thống xây dựng Android.

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

Các nhà sản xuất thiết kế ban đầu (ODM) tùy chỉnh các gói hỗ trợ bảng mạch (BSP) của nhà cung cấp hệ thống trên chip (SoC) cho các thiết bị cụ thể của họ (bảng 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, các trình nền dành riêng cho bo mạch hoặc các tính năng của riêng chúng 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 tùy 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 tùy chỉnh như vậy đã ngăn việc sử dụng hình ảnh nhà cung cấp duy nhất cho các thiết bị có cùng SoC (hoặc với các SoC khác nhau nhưng trong cùng một dòng). Trong Android 10 trở lên, bạn có thể sử dụng phân vùng odm riêng để tùy chỉnh, cho phép bạn sử dụng một hình ảnh nhà cung cấp duy nhất cho nhiều SKU phần cứng.

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

Android 9 đã thêm hỗ trợ cho việc xây dựng phân vùng product , cho phép sử dụng một hình ảnh hệ thống duy nhất cho nhiều SKU phần mềm được cung cấp bởi các hình ảnh product.img khác nhau. Mặc dù phân vùng product dành cho SKU phần mềm, phân vùng odm dành cho SKU phần cứng.

Với các phân vùng dành riêng cho sản phẩm và ODM, bạn có thể sử dụng phân vùng system để lưu trữ mã chung nhằm 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ó những nhược điểm, 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ế để phát triển trong tương lai). Tuy nhiên, hỗ trợ Android 10 cho phân vùng động sẽ loại bỏ sự cố ổ đĩa và giúp có thể phân vùng lại thiết bị trong quá trình cập nhật qua mạng (OTA) .

linh kiện ODM

Phân vùng odm chứa các thành phần dành riêng cho ODM sau (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í
Các mô-đun hạt nhân có thể tải được (LKM) /odm/lib/modules/*.ko
Thư viện gốc /odm/lib[64]
HAL /odm/lib[64]/hw
Chính sách SE /odm/etc/selinux
Dữ liệu đối tượng VINTF /odm/etc/vintf
tập tin 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
Ứng dụng riêng tư /odm/priv-app/*.apk
Thư viện Java /odm/framework/*.jar
Cấu hình hệ thống Android Framework /odm/etc/sysconfig/*/odm/etc/permissions/*

Không có hình ảnh tùy chỉnh

Không sử dụng hình ảnh tùy chỉnh vì chúng thiếu hỗ trợ cho những điều sau:

  • Cài đặt một mô-đun cho một mục tiêu cụ thể. Hình ảnh tùy chỉnh hỗ trợ sao chép các tạo phẩ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 đích như một phần của quy tắc xây dựng.
  • Sùng. Không thể tạo custom_images bằng hệ thống xây dựng Soong.
  • Cập nhật OTA. Hình ảnh tùy chỉnh được sử 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 tính ổn định của giao diện nhị phân ứng dụng (ABI), hãy ghi nhớ kiến ​​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ó sự ổn định ABI giữa các phân vùng odmvendor . Cả hai phân vùng phải được nâng cấp cùng một lú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 như 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 được thực thi bởi SEpolicy.)

Triển khai phân vùng ODM

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

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

Để thiết lập phân vùng odm , hãy bao gồm các cờ xây 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 được sử dụng cho hình ảnh ODM
  • PRODUCT_ODM_PROPERTIES dành 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ờ xây 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

Kích hoạt tính năng khởi động đã được xác minh

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

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

Xử lý/odm như một phân vùng/nhà cung cấp khác

Để đảm bảo hệ thống xử lý phân vùng odm như phân vùng vendor , hãy thay thế mọi tham chiếu vendor được mã hóa cứng bằng một tập hợp các phân vùng hướng phần cứng (hiện tại 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 .