Phát triển bản kê khai thiết bị

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 bảng 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 thiết bị Phiên bản FCM mục tiêu cho thiết bị mới:

  1. Không xác định DEVICE_MANIFEST_FILEPRODUCT_ENFORCE_VINTF_MANIFEST .
  2. Triển khai HAL cho Phiên bản FCM mục tiêu.
  3. Viết đúng tệp kê khai thiết bị.
  4. Viết Phiên bản FCM mục tiêu vào tệp kê khai thiết bị.
  5. Đặt DEVICE_MANIFEST_FILE .
  6. Đặt PRODUCT_ENFORCE_VINTF_MANIFEST thành true .

Ra mắt thiết bị mới

Khi một thiết bị mới được phát hành, Phiên bản FCM mục tiêu ban đầu của thiết bị đó cần phải được xác định và khai báo 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ị khởi chạy bằng 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ó tại thời điểm này). Để khai báo điều này trong bảng 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 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 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 phiên bản giống nhau. Ví dụ:

  • Các thiết bị Google Pixel 2 và Pixel 2 XL được phát hành cùng với Target FCM Phiên bản 2, đã triển khai âm thanh 2.0 HAL bắt buộc android.hardware.audio@2.0::IDeviceFactory/default .
  • Đối với âm thanh 4.0 HAL đượ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 4.0 HAL, 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 về hình ảnh nhà cung cấp với Target FCM Phiên bản 2 đã được nới lỏng do khung Android 9 (FCM Phiên bản 3) coi âm thanh 4.0 là sự thay thế cho âm thanh 2.0 HAL về mặt chức năng .

Tóm lại, vì 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 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) Âm thanh 4.0

Nâng cấp phiên bản Target FCM

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 được nâng cấp có thể hoạt động. Để nâng cấp Phiên bản FCM mục tiêu của thiết bị, nhà cung cấp cần phải:

  1. Triển khai tất cả các Phiên bản HAL được yêu cầu mới cho Phiên bản FCM Mục tiêu.
  2. Sửa đổi Phiên bản HAL trong tệp kê khai thiết bị.
  3. Sửa đổi Phiên bản FCM mục tiêu trong tệp kê khai thiết bị.
  4. Xóa các phiên bản HAL không được dùng nữa.

Ví dụ: các thiết bị Google Pixel và Pixel XL được khởi chạy cùng với Android 7.0 nên Phiên bản FCM mục tiêu của chúng ít nhất phải là phiên bản cũ. Tuy nhiên, tệp kê khai thiết bị khai báo Target FCM Phiên bản 2 vì hình ảnh nhà cung cấp đã được cập nhật để phù hợp với 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ả các phiên bản HAL mới bắt buộc hoặc không xóa các phiên bản HAL không được dùng nữa thì 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ó Target FCM Phiên bản 2. Mặc dù chúng triển khai một số HAL được yêu cầu bởi compatibility_matrix.3.xml (chẳng hạn như âm thanh 4.0, sức khỏe 2.0, v.v.), nhưng chúng không xóa android.hardware.radio.deprecated@1.0 , không được dùng nữa ở 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 Target FCM lên 3.

Yêu cầu bắt buộc về kernel trong OTA

Cập nhật thiết bị từ Android 9 trở xuống

Trên các thiết bị chạy Android 9 trở xuống, hãy đảm bảo chọn các CL sau:

Những thay đổi này giới thiệu cờ xây dựng PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS và không đặt cờ này 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 khách OTA trên 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 kernel trong gói OTA. Những thay đổi này là cần thiết để loại bỏ các yêu cầu kernel khỏi gói OTA đã tạo.
  • Khi cập nhật lên Android 11, bạn có thể tùy chọn đặt cờ xây dựng PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS để kiểm tra khả năng tương thích VINTF khi gói cập nhật được tạo.

Để biết thêm thông tin về cờ xây dựng này, hãy xem 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 cờ xây dựng mới, PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS . Đối với các thiết bị khởi chạy Android 10, cờ này tự động được đặt thành true . Khi cờ được đặt thành true , tập lệnh sẽ trích xuất phiên bản kernel và cấu hình kernel từ ảnh kernel đã cài đặt.

  • Khi cập nhật lên Android 10, gói cập nhật OTA chứa phiên bản kernel và cấu hình. Máy khách OTA trên thiết bị chạy Android 10 đọc thông tin này để kiểm tra tính tương thích.
  • Khi cập nhật lên Android 11, thể loại gói OTA sẽ đọc phiên bản kernel và cấu hình để kiểm tra tính tương thích.

Nếu tập lệnh không trích xuất được thông tin này cho ảnh hạt nhân của bạn, hãy thực hiện một trong các thao tác sau:

  • Chỉnh sửa tập lệnh để hỗ trợ định dạng kernel của bạn và đóng góp cho AOSP.
  • Đặt BOARD_KERNEL_VERSION thành phiên bản kernel và BOARD_KERNEL_CONFIG_FILE thành đường dẫn của tệp cấu hình kernel đã xây dựng .config . Cả hai biến phải được cập nhật khi ảnh kernel được cập nhật.
  • Ngoài ra, hãy đặt PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS thành false để bỏ qua việc kiểm tra các yêu cầu về kernel. Điều này không được khuyến khích vì mọi sự không tương thích đều bị ẩn và chỉ được phát hiện khi chạy thử nghiệm 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 kernel extract_kernel.py .