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ść zachowania każdej procedury. 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 zainstalowanie aplikacji z określoną konfiguracją użytkownika, a następnie wielokrotne zastępowanie jądra, aby przetestować interakcję 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
Resetuj wszystkie urządzenia
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 wcześniej uruchomioną instancją przed rozpoczęciem kolejnego uruchomienia. Możesz bezpiecznie dodać dowolne dodatkowe launch_cvd
flagi.
W konfiguracji z wieloma najemcamiß
stop_cvd
wyłącza 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 nie reaguje na polecenia.
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 wyłączenie, 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 realizacji. restart_cvd
czeka, aż urządzenie ponownie się włączy, 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 będzie domyślnie 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 będą później ponownie używane razem z nakładkami, wcześniejsze modyfikacje będą traktowane jako część stanu podstawowego.
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 znacznik 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ć te same treści.
Niektóre flagi można bezpiecznie zmieniać między wywołaniami launch_cvd
. W sekcjach poniżej znajdziesz listę flag, które muszą pozostać niezmienione, 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 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