Cập nhật hệ thống A/B

SDV tuân theo phương pháp tiêu chuẩn của Android về bản cập nhật hệ thống A/B (liền mạch). Tài liệu AOSP chủ yếu áp dụng cho SDV. Trang này trình bày chi tiết về cách sử dụng dành riêng cho SDV và các đường dẫn tốt đã biết để tạo và áp dụng gói cập nhật.

Hiện tại, SDV được định cấu hình để sử dụng các bản cập nhật A/B không ảo.

Triển khai HAL kiểm soát quy trình khởi động

Hình ảnh SDV Core cho Cuttlefish (sdv_core_cf) cung cấp một cách triển khai tiêu chuẩn của HAL kiểm soát quy trình khởi động dựa trên hardware/interfaces/boot/aidl/default/. Các trình tải khởi động khác phải triển khai HAL để hỗ trợ bản cập nhật A/B.

Hãy tham khảo phần Triển khai HAL kiểm soát quy trình khởi động trong tài liệu AOSP để biết thông tin chi tiết. Bạn có thể sử dụng bootctl có trong hình ảnh SDV gỡ lỗi (enguserdebug) để kiểm thử quá trình triển khai.

Tạo gói OTA

Để tìm hiểu thêm, hãy xem: Tạo gói OTA. Hướng dẫn trong trang này tuân theo tài liệu AOSP với một số điểm khác biệt nhỏ.

Toàn bộ bản cập nhật

Từ thư mục gốc của kho lưu trữ:

source build/envsetup.sh && lunch sdv_core_cf-trunk_staging-userdebug
mkdir dist_output
m dist DIST_DIR=dist_output

Các lệnh này tạo ra tệp đích trong thư mục dist_output. Đối với các bản dựng cục bộ của sdv_core_cf đây thường là sdv_core_cf-target_files-$USER.zip.

Để tạo gói OTA, bạn cần sử dụng ota_from_target_files. Không giống như trong AOSP, gói này không được tạo như một phần của m dist.

m ota_from_target_files
ota_from_target_files \
  dist_output/sdv_core_cf-target_files-$USER.zip \
  ota_update.zip

Bản cập nhật bổ sung

Cùng một lệnh gọi ota_from_target_files như trong AOSP:

ota_from_target_files \
  -i PREVIOUS-sdv_core_cf-target_files.zip \
  dist_new/sdv_core_cf-target_files-$USER.zip \
  incremental_ota_update.zip

Cài đặt gói OTA

Các bản cập nhật được cài đặt bằng dịch vụ update_engine. Các bản dựng SDV gỡ lỗi bao gồm update_engine_client mà bạn có thể dùng để gỡ lỗi và kiểm thử quy trình cập nhật.

Để cài đặt gói OTA, hãy chạy:

system/update_engine/scripts/update_device.py ota_update.zip

Nếu bản cập nhật được cài đặt đúng cách (trạng thái cuối cùng là UPDATE_STATUS_UPDATED_NEED_REBOOT và kết quả là ErrorCode::kSuccess), thì bản cập nhật sẽ được kích hoạt khi khởi động lại lần tiếp theo.

Lập phiên bản

Đối với các bản cập nhật hệ thống, SDV sử dụng siêu dữ liệu gói OTA của Android để xác định xem gói OTA có đáp ứng các yêu cầu và có thể cài đặt hay không.

Ngoài ra đối với APEX, SDV tuân theo các khái niệm của Android về khả năng cập nhật. Do đó, bạn có thể cập nhật APEX khi APEX không phải là APEX khởi động. Bạn phải cập nhật APEX khởi động thông qua các bản cập nhật hệ thống và:

  • Phiên bản đã khai báo version cao hơn phiên bản được cài đặt sẵn và cả hai đều lớn hơn hoặc bằng 1,

hoặc

  • Phiên bản đã khai báo là APEX không được cài đặt sẵn và phiên bản này cao hơn phiên bản trong danh sách từ chối (nếu có).

SDV thường được triển khai cho nhiều hệ thống trong một mạng. Do đó, bạn phải đảm bảo các bản cập nhật được thực hiện cho một hệ thống duy nhất được thực thi đúng cách. Tuy nhiên, việc này không đảm bảo rằng tất cả hệ thống đều có thể giao tiếp đúng cách.

Bạn cũng cần cập nhật toàn bộ mạng. Việc này đòi hỏi các bản cập nhật cho gói dịch vụ phải được triển khai cho tất cả máy cùng một lúc hoặc các bản cập nhật không chứa thay đổi gây lỗi. Ví dụ: các thay đổi không tương thích đối với giao diện.

Mặc dù SDV không cung cấp công cụ để phát hiện các thay đổi không tương thích, nhưng nguyên tắc của chúng tôi mô tả cách điều chỉnh các thay đổi được thực hiện đối với giao diện cũng như các phương pháp hay nhất cần thiết để triển khai các thay đổi.

Ngoài ra, SDV còn hỗ trợ cơ chế khôi phục cho các bản cập nhật hệ thống và APEX. Nếu hệ thống vô tình chuyển sang trạng thái không đạt yêu cầu, chúng tôi có thể khôi phục trạng thái đạt yêu cầu đã biết gần đây nhất.