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/* và /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.

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
odm
vàvendor
. 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
odm
vàvendor
có thể phụ thuộc lẫn nhau, nhưng phân vùngvendor
phải hoạt động mà không cần phân vùngodm
. - ABI giữa
odm
vàsystem
giống với ABI giữavendor
vàsystem
.
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ố địnhPRODUCT_USE_DYNAMIC_PARTITIONS
vàBOARD_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ư trongPRODUCT_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
trongAndroid.bp
LOCAL_ODM_MODULE := true
trongAndroid.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 vendor
và system
).
Để 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à odm
và vendor
). 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ói và shell/libc
.