Khi phát triển và phát hành thiết bị mới, nhà cung cấp có thể xác định và khai báo phiên bản FCM mục tiêu trong tệp kê khai thiết bị (DM). Khi nâng cấp hình ảnh nhà cung cấp cho các thiết bị cũ, nhà cung cấp có thể chọn triển khai các phiên bản HAL mới và tăng phiên bản FCM mục tiêu.
Phát triển thiết bị mới
Khi xác định phiên bản FCM mục tiêu của thiết bị cho thiết bị mới:
- Để
DEVICE_MANIFEST_FILE
vàPRODUCT_ENFORCE_VINTF_MANIFEST
không xác định. - Triển khai HAL cho phiên bản FCM mục tiêu.
- Viết đúng tệp kê khai thiết bị.
- Ghi phiên bản FCM mục tiêu vào tệp kê khai thiết bị.
- Đặt
DEVICE_MANIFEST_FILE
. - Đặt
PRODUCT_ENFORCE_VINTF_MANIFEST
thànhtrue
.
Phát hành thiết bị mới
Khi phát hành một thiết bị mới, bạn cần xác định và khai báo phiên bản FCM mục tiêu ban đầu của thiết bị đó trong tệp kê khai thiết bị dưới dạng thuộc tính "target-level
" trong phần tử <manifest>
cấp cao nhất.
Ví dụ: các thiết bị chạy Android 9 phải có phiên bản FCM mục tiêu bằng 3 (phiên bản cao hơn hiện có). Cách khai báo điều này trong tệp kê khai thiết bị:
<manifest version="1.0" type="device" target-level="3"> <!-- ... --> </manifest>
Nâng cấp hình ảnh nhà cung cấp
Khi nâng cấp hình ảnh nhà cung cấp cho một thiết bị cũ, nhà cung cấp có thể chọn triển khai các phiên bản HAL mới và tăng phiên bản FCM mục tiêu.
Nâng cấp HAL
Trong quá trình nâng cấp hình ảnh của nhà cung cấp, nhà cung cấp có thể triển khai các phiên bản HAL mới miễn là tên HAL, tên giao diện và tên thực thể giống nhau. Ví dụ:
- Các thiết bị Google Pixel 2 và Pixel 2 XL được phát hành với phiên bản FCM mục tiêu là phiên bản 2, triển khai HAL âm thanh 2.0 bắt buộc là
android.hardware.audio@2.0::IDeviceFactory/default
. - Đối với HAL âm thanh 4.0 được phát hành cùng với Android 9, các thiết bị Google Pixel 2 và Pixel 2 XL có thể sử dụng OTA đầy đủ để nâng cấp lên HAL 4.0, triển khai
android.hardware.audio@4.0::IDeviceFactory/default
. - Mặc dù
compatibility_matrix.2.xml
chỉ chỉ định âm thanh 2.0, nhưng yêu cầu đối với hình ảnh nhà cung cấp có phiên bản FCM mục tiêu 2 đã được nới lỏng vì khung Android 9 (FCM phiên bản 3) coi âm thanh 4.0 là thay thế cho HAL âm thanh 2.0 về chức năng.
Tóm lại, do compatibility_matrix.2.xml
yêu cầu âm thanh 2.0 và compatibility_matrix.3.xml
yêu cầu âm thanh 4.0, nên các yêu cầu sẽ như sau:
Phiên bản FCM (hệ thống) | Phiên bản FCM mục tiêu (nhà cung cấp) | Yêu cầu |
---|---|---|
2 (8.1) | 2 (8.1) | Âm thanh 2.0 |
3 (9) | 2 (8.1) | Âm thanh 2.0 hoặc 4.0 |
3 (9) | 3 (9) | Audio 4.0 |
Nâng cấp phiên bản FCM mục tiêu
Trong quá trình nâng cấp hình ảnh nhà cung cấp, nhà cung cấp cũng có thể tăng phiên bản FCM mục tiêu để chỉ định phiên bản FCM mục tiêu mà hình ảnh nhà cung cấp đã nâng cấp có thể hoạt động. Để nâng phiên bản FCM mục tiêu của một thiết bị, nhà cung cấp cần:
- Triển khai tất cả Phiên bản HAL bắt buộc mới cho phiên bản FCM mục tiêu.
- Sửa đổi Phiên bản HAL trong tệp kê khai thiết bị.
- Sửa đổi phiên bản FCM mục tiêu trong tệp kê khai thiết bị.
- Xoá các phiên bản HAL không dùng nữa.
Ví dụ: Thiết bị Google Pixel và Pixel XL ra mắt với Android 7.0 nên phiên bản FCM mục tiêu của chúng phải ít nhất là phiên bản cũ. Tuy nhiên, tệp kê khai thiết bị khai báo FCM phiên bản 2 mục tiêu vì hình ảnh nhà cung cấp đã được cập nhật để tuân thủ compatibility_matrix.2.xml
:
<manifest version="1.0" type="device" target-level="2">
Nếu nhà cung cấp không triển khai tất cả phiên bản HAL mới bắt buộc hoặc không xoá các phiên bản HAL không dùng nữa, thì bạn không thể nâng cấp phiên bản FCM mục tiêu.
Ví dụ: các thiết bị Google Pixel 2 và Pixel 2 XL có FCM phiên bản 2 mục tiêu.
Mặc dù triển khai một số HAL mà compatibility_matrix.3.xml
yêu cầu (chẳng hạn như âm thanh 4.0, sức khoẻ 2.0, v.v.), nhưng các phiên bản này không xoá android.hardware.radio.deprecated@1.0
. android.hardware.radio.deprecated@1.0
không còn được dùng nữa trong FCM phiên bản 3 (Android 9). Do đó, các thiết bị này không thể nâng cấp phiên bản FCM mục tiêu lên 3.
Bắt buộc các yêu cầu về nhân trong quá trình cập nhật qua mạng không dây
Cập nhật thiết bị chạy Android 9 trở xuống
Trên các thiết bị chạy Android 9 trở xuống, hãy đảm bảo rằng các CL sau đây được chọn lọc:
Những thay đổi này sẽ giới thiệu cờ bản dựng PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS
và không đặt cờ cho các thiết bị chạy Android 9 trở xuống.
- Khi cập nhật lên Android 10, ứng dụng OTA trên các thiết bị chạy Android 9 trở xuống không kiểm tra chính xác các yêu cầu về hạt nhân trong gói OTA. Những thay đổi này là cần thiết để loại bỏ các yêu cầu về hạt nhân khỏi gói OTA đã tạo.
-
Khi cập nhật lên Android 11, bạn không bắt buộc phải đặt cờ bản dựng
PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS
để kiểm tra khả năng tương thích của VINTF khi tạo gói cập nhật.
Để biết thêm thông tin về cờ bản dựng này, hãy xem phần Cập nhật thiết bị từ Android 10.
Cập nhật thiết bị từ Android 10
Android 10 giới thiệu một cờ bản dựng mới, PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS
. Đối với các thiết bị chạy Android 10, cờ này sẽ tự động được đặt thành true
. Khi cờ được đặt thành true
, một tập lệnh sẽ trích xuất phiên bản hạt nhân và cấu hình hạt nhân từ hình ảnh hạt nhân đã cài đặt.
- Khi cập nhật lên Android 10, gói cập nhật OTA sẽ chứa phiên bản và cấu hình hạt nhân. Ứng dụng OTA trên các thiết bị chạy Android 10 sẽ đọc thông tin này để kiểm tra khả năng tương thích.
- Khi cập nhật lên Android 11, quá trình tạo gói OTA sẽ đọc phiên bản và cấu hình hạt nhân để kiểm tra khả năng tương thích.
Nếu tập lệnh không trích xuất được thông tin này cho hình ảnh hạt nhân, hãy làm một trong những việc sau:
- Chỉnh sửa tập lệnh để hỗ trợ định dạng nhân và đóng góp cho AOSP.
- Đặt
BOARD_KERNEL_VERSION
thành phiên bản hạt nhân vàBOARD_KERNEL_CONFIG_FILE
thành đường dẫn của tệp cấu hình hạt nhân đã tạo.config
. Bạn phải cập nhật cả hai biến này khi cập nhật hình ảnh hạt nhân. - Ngoài ra, hãy đặt
PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS
thànhfalse
để bỏ qua việc kiểm tra các yêu cầu về hạt nhân. Bạn không nên làm như vậy vì mọi vấn đề không tương thích sẽ bị ẩn và chỉ được phát hiện khi chạy các kiểm thử VTS sau khi cập nhật.
Bạn có thể xem mã nguồn của tập lệnh trích xuất thông tin hạt nhân extract_kernel.py
.