Na tej stronie dowiesz się, jak ponownie uruchamiać i resetować wirtualne urządzenia Cuttlefish. Przywracanie urządzenia Cuttlefish do początkowego stanu dysku jest w narzędziu wiersza poleceń określane jako powerwash.
Podczas uruchamiania automatycznych lub ręcznych przepływów pracy z wieloma różnymi procedurami, takimi jak zestawy testów, zresetowanie urządzenia Cuttlefish między procedurami zapewnia niezależność działania każdej z nich. Jeśli stan dysku nie zostanie zresetowany, jedna procedura może wpłynąć na działanie następnej.
Procedury ponownego uruchamiania i resetowania opisane na tej stronie zakładają, że masz utworzone urządzenie Cuttlefish i ustawiony na dysku pewien stan.
# Launch a devicelaunch_cvd
# Make some modifications to the deviceadb shell touch /storage/self/primary/Documents/hello
# Check the device stateadb shell ls /storage/self/primary/Documents
W tym miejscu możesz skorzystać z tych procesów ponownego uruchamiania i resetowania:
- Jeśli urządzenie odpowiada, wykonaj czyste ponowne uruchomienie za pomocą przycisku
adb reboot
. - Jeśli urządzenie nie odpowiada, wykonaj niepełne ponowne uruchomienie za pomocą przycisku
restart_cvd
. - Zresetuj stan urządzenia za pomocą
powerwash_cvd
. - Zatrzymaj urządzenie i zmień argumenty
launch_cvd
, zachowując stan urządzenia lub wymuszając wyczyszczenie stanu urządzenia.
Implementacja szybkiego resetowania Cuttlefish
Cuttlefish korzysta z szybkiego resetowania, które zależy od ochrony dysków za pomocą nakładek dysku qcow2. Domyślnie Cuttlefish traktuje oryginalne dyski jako tylko do odczytu i używa nakładek do rejestrowania zapisów na dysku.
Korzystanie z nakładek typu copy-on-write ma jednak wady. W szczególności zewnętrzne zmiany na dyskach bazowych powodują utratę zgodności z istniejącymi nakładkami i niespójny stan dysku. Cuttlefish wymusza ponowne utworzenie nakładek, gdy wykryje niezgodne zmiany.
Wymuszone ponowne tworzenie nakładek jest niepożądane podczas opracowywania funkcji, która wymaga utrzymania części dysku w określonym stanie zainicjowania przy jednoczesnej wymianie innej części dysku. Może to być na przykład instalowanie aplikacji z określoną konfiguracją użytkownika, a następnie wielokrotne zamienianie jądra w celu przetestowania interakcji między aplikacją a różnymi kompilacjami jądra. W takim przypadku warto wyłączyć nakładki.
Resetowanie urządzeń
W kolejnych sekcjach opisujemy sposoby przywracania urządzenia Cuttlefish do początkowego stanu dysku.
Resetowanie jednego urządzenia
Aby zresetować jedno urządzenie Cuttlefish do początkowego stanu dysku, uruchom:
powerwash_cvd
powerwash_cvd
wyłącza maszynę wirtualną, resetuje wszelkie zmiany wprowadzone na dysku maszyny wirtualnej, ponownie uruchamia maszynę wirtualną i czeka, aż zakończy się jej uruchamianie. Instancja zachowuje oryginalne flagi przekazane do launch_cvd
.
W konfiguracji z wieloma najemcami:powerwash_cvd
ponownie uruchamia jedną instancję z grupy instancji:
powerwash_cvd --instance_num=N
Resetowanie wszystkich urządzeń
Aby zatrzymać i zresetować co najmniej 1 urządzenie do początkowego stanu dysku, uruchom to polecenie:
stop_cvd
launch_cvd --resume=false
stop_cvd
wykonuje nieprawidłowe wyłączenie i zatrzymuje urządzenie.
Dodanie --resume=false
do launch_cvd
powoduje, że Cuttlefish usuwa wszystkie pliki
związane z poprzednio uruchomioną instancją przed rozpoczęciem kolejnego uruchomienia. Możesz bezpiecznie dodać dowolne dodatkowe launch_cvd
flagi.
W konfiguracji wielodostępnejß
stop_cvd
zamyka całą grupę instancji.
Uruchom urządzenie ponownie
W kolejnych sekcjach opisujemy sposoby ponownego uruchamiania urządzenia bez przywracania go do początkowego stanu dysku.
Czysty restart
Aby wykonać czyste ponowne uruchomienie urządzenia, gdy odpowiada ono na polecenia, wpisz:
adb reboot
adb reboot
przeprowadza pełną procedurę zamykania urządzenia, synchronizując zmiany na dysku i dbając o to, aby procesy zostały zamknięte. Procesy hosta Cuttlefish nie są zaangażowane. Ta procedura może być niedostępna, jeśli urządzenie
jest w złym stanie i przestało reagować.
Aby przeprowadzić czysty restart pojedynczego urządzenia Cuttlefish w konfiguracji wielodostępowej, podczas uruchamiania adb-reboot
podaj numer seryjny urządzenia docelowego. Jeśli nie określono urządzenia docelowego, adb
nie uruchamia ponownie żadnego urządzenia.
adb -s SERIAL reboot
Nieprawidłowe ponowne uruchomienie
Aby wykonać nieprawidłowe ponowne uruchomienie, gdy urządzenie nie odpowiada, wpisz:
restart_cvd
restart_cvd
wykonuje nieprawidłowe zamknięcie, natychmiast wyłączając urządzenie Cuttlefish. restart_cvd
jest odpowiednikiem odłączenia i ponownego podłączenia baterii do urządzenia fizycznego. Zapisy na dysku mogą nie zostać zachowane, jeśli były w trakcie. restart_cvd
czeka, aż urządzenie ponownie się w pełni uruchomi, zanim zakończy działanie.
W konfiguracji z wieloma najemcamirestart_cvd
ponowne uruchomienie pojedynczej instancji z grupy instancji. Aby określić, którą instancję Cuttlefish chcesz ponownie uruchomić, użyj flagi instance_num
.
restart_cvd --instance_num=N
Jeśli nie użyjesz --instance_num
, numer instancji domyślnie będzie wynosić 1
.
Uruchom ponownie, używając innych flag launch_cvd
Aby zatrzymać co najmniej 1 urządzenie i uruchomić je ponownie z innymi flagami launch_cvd
, wpisz:
stop_cvd
launch_cvd NEW_FLAG
stop_cvd
wykonuje nieprawidłowe wyłączenie podobne do restart_cvd
. Urządzenie przechodzi w stan uśpienia, z którego można je później wybudzić za pomocą innego polecenia launch_cvd
. Podobnie jak w przypadku restart_cvd
, zapisy na dysku mogą nie zostać zachowane, jeśli nie zostaną w pełni zsynchronizowane z dyskiem. Aby bezpiecznie zapisać dane na dysku, najpierw uruchom
adb reboot
.
adb reboot
stop_cvd
launch_cvd NEW_FLAG
Jeśli zmiany flag launch_cvd
wymuszą zmianę układu dysku, która jest niezgodna z implementacją kopiowania przy zapisie, launch_cvd
zignoruje stare modyfikacje dysku i przywróci pierwotny stan dysku. Pełną listę flag znajdziesz w sekcji Flagi.
Uruchom bez nakładki
Aby zrezygnować z obsługi szybkiego resetowania, uruchom to polecenie:
launch_cvd --use_overlay=false
--use_overlay=false
traktuje pliki dysku Cuttlefish jako pliki do odczytu i zapisu, a zmiany są propagowane do tych plików.
Przełączanie między --use_overlay=false
a domyślnym może powodować błędy zgodności. Aby wymusić wyczyszczenie poprzedniego stanu urządzenia, uruchom to polecenie:
stop_cvd
rm $HOME/cuttlefish $HOME/cuttlefish_runtime $HOME/cuttlefish_assembly
Cuttlefish nie może bezpiecznie przechodzić między przepływami z nakładkami i bez nich, więc ta zmiana usuwa cały stan zarządzania Cuttlefish. Jeśli pliki na dysku zewnętrznym zostaną zmodyfikowane i później ponownie użyte razem z nakładkami, wcześniejsze modyfikacje będą traktowane jako część stanu bazowego.
Flagi
Podczas uruchamiania urządzenia Cuttlefish za pomocą polecenia
launch_cvd
możesz dodawać argumenty za pomocą flag. W przypadku niektórych flag (flag, które muszą pozostać takie same) utrata danych może jednak nastąpić, jeśli flagi zostaną zmienione między poleceniami launch_cvd
. Aby uniknąć utraty danych podczas wykonywania sekwencji poleceń, które zawierają launch_cvd
, stop_cvd
, a potem ponownie launch_cvd
, używaj tych samych flag w każdym poleceniu launch_cvd
. Jeśli na przykład pierwszy tag launch_cvd
zawiera argument --kernel_path=KERNEL_PATH
, drugie wywołanie launch_cvd
musi również zawierać ten sam argument --kernel_path=KERNEL_PATH
. W przeciwnym razie wszelkie zmiany w systemie plików wprowadzone przed stop_cvd
zostaną utracone w drugim wywołaniu launch_cvd
. Plik, do którego odwołuje się element KERNEL_PATH
, musi zawierać tę samą treść.
Niektóre flagi można bezpiecznie zmieniać między wywołaniami launch_cvd
. W sekcjach poniżej znajdziesz listę flag, które muszą pozostać bez zmian, aby uniknąć utraty danych, oraz flag, które można bezpiecznie zmienić bez utraty danych. Szczegółowe informacje o poszczególnych flagach znajdziesz w źródle (flags.cc
, disk_flags.cc
) lub uruchom polecenie launch_cvd --help
.
Flagi, które muszą pozostać bez zmian
Aby uniknąć utraty danych, te flagi muszą pozostać takie same od jednego wywołania funkcji launch_cvd
do następnego:
--data_policy
--blank_data_image_mb
--kernel_path
--initramfs_path
--vm_manager
--enable_minimal_mode
--bootloader
--protected_vm
--userdata_format
--use_overlay
--system_image_dir
--boot_image
--init_boot_image
--data_image
--super_image
--misc_image
--misc_info_txt
--metadata_image
--vendor_boot_image
--vbmeta_image
--vbmeta_system_image
--linux_kernel_path
--linux_initramfs_path
--linux_root_image
--fuchsia_zedboot_path
--fuchsia_multiboot_bin_path
--fuchsia_root_image
--custom_partition_path
--blank_metadata_image_mb
Flagi, które można zmienić
Te flagi można bezpiecznie zmieniać między wywołaniami launch_cvd
bez powodowania utraty danych:
--displays_textproto
--displays_binproto
--cpus
--gdb_port
--display0
--display1
--display2
--display3
--x_res
--y_res
--dpi
--refresh_rate_hz
--extra_kernel_cmdline
--extra_bootconfig_args
--guest_enforce_security
--memory_mb
--serial_number
--use_random_serial
--gpu_mode
--hwcomposer
--gpu_capture_binary
--enable_gpu_udmabuf
--enable_gpu_angle
--use_allocd
--pause_in_bootloader
--enable_host_bluetooth
--rootcanal_instance_num
--rootcanal_args
--netsim
--netsim_bt
--bluetooth_controller_properties_file
--bluetooth_commands_file
--enable_sandbox
--seccomp_policy_dir
--start_webrtc
--webrtc_assets_dir
--webrtc_certs_dir
--start_webrtc_sig_server
--webrtc_sig_server_addr
--webrtc_sig_server_port
--tcp_port_range
--udp_port_range
--webrtc_sig_server_path
--webrtc_sig_server_secure
--verify_sig_server_certificate
--webrtc_device_id
--uuid
--daemon
--setupwizard_mode
--enable_bootanimation
--qemu_binary_dir
--crosvm_binary
--gem5_binary_dir
--gem5_checkpoint_dir
--gem5_debug_file
--gem5_debug_flags
--restart_subprocesses
--enable_vehicle_hal_grpc_server
--boot_slot
--num_instances
--report_anonymous_usage_stats
--ril_dns
--kgdb
--start_gnss_proxy
--gnss_file_path
--fixed_location_file_path
--enable_modem_simulator
--modem_simulator_sim_type
--console
--enable_kernel_log
--vhost_net
--vhost_user_mac80211_hwim
--wmediumd_config
--ap_rootfs_image
--ap_kernel_image
--record_screen
--smt
--vsock_guest_cid
--secure_hals
--use_sdcard
--enable_audio
--camera_server_port
--modem_simulator_count
--blank_sdcard_image_mb
--adb_mode