SDV korzysta ze standardowego podejścia Androida do aktualizacji systemu A/B (bezproblemowych). Dokumentacja AOSP dotyczy głównie SDV. Na tej stronie znajdziesz szczegółowe informacje o użytkowaniu w przypadku SDV oraz sprawdzone ścieżki tworzenia i stosowania pakietów aktualizacji.
Obecnie SDV jest skonfigurowany do korzystania z aktualizacji A/B na urządzeniach fizycznych.
Implementowanie interfejsu HAL sterowania rozruchem
Obraz SDV Core dla Cuttlefish (sdv_core_cf) zapewnia standardową implementację HAL sterowania rozruchem opartą na hardware/interfaces/boot/aidl/default/. Inne programy rozruchowe muszą implementować HAL, aby obsługiwać aktualizacje A/B.
Szczegółowe informacje znajdziesz w sekcji Implementacja HAL kontroli uruchamiania w dokumentacji AOSP. Aby przetestować implementację, możesz użyć narzędzia bootctl, które jest dostępne na obrazach SDV w wersji debugowania (eng i userdebug).
Generowanie pakietu OTA
Więcej informacji znajdziesz w artykule Tworzenie pakietów OTA. Instrukcje na tej stronie są zgodne z dokumentacją AOSP, z niewielkimi odchyleniami.
Pełna aktualizacja
W folderze głównym repozytorium:
source build/envsetup.sh && lunch sdv_core_cf-trunk_staging-userdebug
mkdir dist_output
m dist DIST_DIR=dist_output
Te polecenia tworzą pliki docelowe w katalogu dist_output. W przypadku lokalnych wersji sdv_core_cf jest to zwykle sdv_core_cf-target_files-$USER.zip.
Aby utworzyć pakiet OTA, musisz użyć ota_from_target_files. W przeciwieństwie do AOSP pakiet nie jest tworzony w ramach m dist.
m ota_from_target_files
ota_from_target_files \
dist_output/sdv_core_cf-target_files-$USER.zip \
ota_update.zip
Aktualizacja przyrostowa
Takie samo wywołanie ota_from_target_files jak w 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
Instalowanie pakietu OTA
Aktualizacje są instalowane za pomocą usługi update_engine. Wersje SDV do debugowania
zawierają update_engine_client, które można wykorzystać do debugowania i testowania procesu aktualizacji.
Aby zainstalować pakiet OTA, uruchom:
system/update_engine/scripts/update_device.py ota_update.zip
Jeśli aktualizacja zostanie zainstalowana prawidłowo (stan końcowy to UPDATE_STATUS_UPDATED_NEED_REBOOT, a wynik to ErrorCode::kSuccess), zostanie ona aktywowana podczas następnego ponownego uruchomienia.
Obsługa wersji
W przypadku aktualizacji systemu SDV używa metadanych pakietu OTA Androida, aby określić, czy pakiet OTA spełnia wymagania i może zostać zainstalowany.
W przypadku APEX-ów SDV postępuje zgodnie z koncepcjami Androida dotyczącymi możliwości aktualizacji. W związku z tym APEX można zaktualizować, jeśli nie jest to bootstrap APEX. Bootstrap APEX musi być aktualizowany w ramach aktualizacji systemu i spełniać jeden z tych warunków:
- zadeklarowana wersja jest nowsza niż wersja preinstalowana, a obie są większe lub równe 1,
lub
- Zadeklarowana wersja to niepreinstalowany pakiet APEX, a wersja jest wyższa niż wersja na liście zablokowanych, jeśli na niej występuje.
SDV jest zwykle wdrażane w wielu systemach w sieci. Dlatego musisz mieć pewność, że aktualizacje wprowadzone w jednym systemie są prawidłowo wykonywane. Nie gwarantuje to jednak, że wszystkie systemy będą mogły się prawidłowo komunikować.
Równie ważne jest zaktualizowanie całej sieci, co wymaga wdrożenia aktualizacji pakietów usług na wszystkich maszynach w tym samym czasie lub braku zmian powodujących problemy w aktualizacjach. Na przykład niezgodne zmiany w interfejsie.
Chociaż SDV nie udostępnia narzędzi do wykrywania niezgodnych zmian, w naszych wytycznych opisujemy, jak uzgadniać zmiany wprowadzone w interfejsach, a także podajemy sprawdzone metody wdrażania tych zmian.
SDV obsługuje też mechanizmy wycofywania aktualizacji systemu i modułów APEX. Jeśli system przypadkowo przejdzie w stan niezadowalający, możemy przywrócić ostatni znany stan zadowalający.