Phát triển tệp 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 nhắm mục tiêu phiên bản FCM trong tệp kê khai thiết bị (DM). Khi nâng cấp hình ảnh nhà cung cấp đối với 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 dần 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 theo thiết bị cho thiết bị mới:

  1. Rời khỏi DEVICE_MANIFEST_FILEPRODUCT_ENFORCE_VINTF_MANIFEST chưa xác định.
  2. Triển khai HAL cho phiên bản FCM mục tiêu.
  3. Ghi đúng tệp kê khai thiết bị.
  4. Ghi 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.

Phát hành 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ần phải được xác định và khai báo trong tệp kê khai thiết bị dưới dạng "target-level" ở cấp cao nhất Phần tử <manifest>.

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 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ể là giống nhau. Ví dụ:

  • Thiết bị Google Pixel 2 và Pixel 2 XL ra mắt với phiên bản FCM mục tiêu 2, triển khai âm thanh 2.0 HAL theo yêu cầu android.hardware.audio@2.0::IDeviceFactory/default.
  • Đối với HAL âm thanh 4.0 được phát hành với Android 9, 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ỉ định âm thanh 2.0 yêu cầu về hình ảnh nhà cung cấp có FCM mục tiêu phiên bản 2 là do khung Android 9 (phiên bản FCM) 3) coi âm thanh 4.0 là sự thay thế của HAL âm thanh 2.0 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, như sau:

Phiên bản FCM (hệ thống) Phiên bản FCM (nhà cung cấp) mục tiêu 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 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 FCM mục tiêu phiên bản để chỉ định phiên bản FCM được nhắm mục tiêu mà hình ảnh nhà cung cấp đã nâng cấp có thể hoạt động với. Để chuyển sang phiên bản FCM mục tiêu của một 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 (Lớp trừu tượng phần cứng) 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. Xoá các phiên bản HAL (Lớp trừu tượng phần cứng) không dùng nữa.

Ví dụ: thiết bị Google Pixel và Pixel XL chạy Android 7.0 vì vậy, phiên bản FCM mục tiêu của họ tối thiểu phải là phiên bản cũ. Tuy nhiên, thiết bị tệp kê khai khai báo FCM mục tiêu phiên bản 2 vì hình ảnh nhà cung cấp có đã đượ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 xoá các phiên bản HAL không dùng nữa, nên không thể nâng cấp phiên bản FCM đích.

Ví dụ: thiết bị Google Pixel 2 và Pixel 2 XL có phiên bản FCM mục tiêu 2. Mặc dù họ triển khai một số HAL (Lớp trừu tượng phần cứng) được yêu cầu bởi compatibility_matrix.3.xml (chẳng hạn như âm thanh 4.0, Health 2.0, v.v.), chúng không xoá android.hardware.radio.deprecated@1.0, tức là không dùng nữa tại FCM phiên bản 3 (Android 9). Do đó, thiết bị 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 hệ điều hành trong OTA

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

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

Những thay đổi này giới thiệu cờ bản dựng PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS và rời khỏi không đặt cờ cho các thiết bị chạy Android 9 hoặc thấp hơn.

  • Khi cập nhật lên Android 10, Ứng dụng OTA trên thiết bị chạy Android 9 hoặc thấp hơn, đừng kiểm tra chính xác các yêu cầu về nhân hệ điều hành 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ề nhân hệ điều hành khỏi OTA đã tạo .
  • Khi cập nhật lên Android 11, bạn không bắt buộc phải đặt giá trị PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS tạo cờ để kiểm tra VINTF khả năng tương thích khi gói cập nhật được tạo.

Để biết thêm thông tin về cờ bản dựng này, hãy xem Cập nhật thiết bị từ Android 10.

Đang cập nhật thiết bị từ Android 10

Android 10 ra mắt cờ bản dựng mới PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS. Đối với thiết bị được khởi chạy cùng với Android 10, cờ này là tự động đặt thành true. Khi cờ này được đặt thành true, một tập lệnh trích xuất phiên bản hạt nhân và nhân hệ điều hành qua hình ảnh nhân hệ điều hành đã 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 và cấu hình kernel. Ứng dụng OTA trên thiết bị chạy Android 10 đọ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, thể loại gói OTA đọc phiên bản và cấu hình kernel để 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 của bạn, hãy thực hiện một trong như 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 kernel và BOARD_KERNEL_CONFIG_FILE đến đường dẫn của hạt nhân đã tạo tệp cấu hình .config. Bạn phải cập nhật cả hai biến khi hình ảnh nhân hệ điều hành được cập nhật.
  • Hoặc đặt PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS thành false để bỏ qua bước kiểm tra các yêu cầu về nhân hệ điều hành. Bạn không nên làm vậy vì mọi sự không tương thích đều bị ẩn và chỉ được phát hiện khi chạy kiểm tra 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.