Ta strona opisuje, jak ponownie uruchomić i zresetować urządzenia wirtualne Cuttlefish. W narzędziu wiersza poleceń resetowanie urządzenia Cuttlefish do początkowego stanu dysku jest nazywane czyszczeniem.
Podczas uruchamiania ścieżek pracy automatycznych lub ręcznych z wieloma różnymi procedurami, takimi jak zestawy testów, zresetowanie urządzenia Cuttlefish między procedurami zapewnia, że zachowanie każdej procedury jest niezależne. Jeśli stan dysku nie jest zresetowany, jedna procedura może wpływać na działanie kolejnej procedury.
Procedury ponownego uruchamiania i resetowania opisane na tej stronie zakładają, że masz utworzone urządzenie Cuttlefish i ustawiony stan dysku.
# 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
Po wykonaniu tych czynności możesz użyć tych ścieżek ponownego uruchamiania i resetowania:
- Jeśli urządzenie reaguje, zrestartuj je, używając
adb reboot
. - Jeśli urządzenie nie odpowiada, wykonaj nieczyste ponowne uruchomienie, używając
restart_cvd
. - Zresetuj stan urządzenia za pomocą
powerwash_cvd
. - Zatrzymaj urządzenie i zmień argumenty
launch_cvd
, zachowując stan urządzenia, lub przymusowo wyczyść stan urządzenia.
Szybkie resetowanie w Cuttlefish
Cuttlefish używa szybkiego resetowania, które zależy od ochrony dysków za pomocą nakładek dysków qcow2. Domyślnie Cuttlefish traktuje oryginalne dyski jako dyski tylko do odczytu i używa nakładek do rejestrowania zapisów na dyskach.
Korzystanie z przesłonek kopiowania podczas zapisu ma jednak pewne wady. W szczególności zmiany zewnętrzne w podstawowych dyskach powodują utratę zgodności z dotychczasowymi nakładkami i niespójny stan dysku. Cuttlefish przymusowo odtwarza nakładki, gdy wykryje niezgodne zmiany.
Przymusowe ponowne tworzenie nakładek jest niepożądane podczas tworzenia funkcji, która wymaga utrzymywania części dysku w określonym zainicjowanym stanie podczas zastępowania innej części dysku. Możesz na przykład zainstalować aplikację z określoną konfiguracją użytkownika, a potem wielokrotnie zmieniać jądro, aby przetestować interakcję między aplikacją a różnymi wersjami jądra. W takim przypadku warto wyłączyć nakładki.
Resetowanie urządzeń
W następnych sekcjach opisano sposoby przywracania urządzenia Cuttlefish do pierwotnego 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, uruchamia ponownie maszynę wirtualną i czeka, aż zakończy się jej uruchamianie. Instansa zachowuje oryginalne flagi nadane launch_cvd
.
W konfiguracji dla wielu dzierżawców:
powerwash_cvd
powoduje ponowne uruchomienie pojedynczej instancji z grupy instancji:
powerwash_cvd --instance_num=N
Zresetuj wszystkie urządzenia
Aby zatrzymać i zresetować co najmniej 1 urządzenie do początkowego stanu dysku, uruchom:
stop_cvd
launch_cvd --resume=false
stop_cvd
wykonuje nieprawidłowe wyłączenie i zatrzymuje urządzenie.
Dodanie parametru --resume=false
do parametru launch_cvd
spowoduje, że przed rozpoczęciem kolejnego uruchomienia narzędzie Cuttlefish usunie wszystkie pliki powiązane z wcześniej uruchomioną instancją. Możesz dodać dodatkowe launch_cvd
flagi.
W konfiguracji wielodzierżawczej polecenie stop_cvd
wyłącza całą grupę instancji.
Uruchom urządzenie ponownie
W następnych sekcjach opisano sposoby ponownego uruchamiania urządzenia bez przywracania go do pierwotnego stanu dysku.
Czyste ponowne uruchomienie
Aby wyczyścić i ponownie uruchomić urządzenie, gdy jest ono gotowe do działania, uruchom:
adb reboot
adb reboot
przeprowadza pełną procedurę zamykania urządzenia, synchronizując zmiany na dysku i upewniając się, że procesy zostały zamknięte. Procesy hosta Cuttlefish nie są uwzględniane. Ta procedura może być niedostępna, jeśli urządzenie przeszło w zły stan i przestało reagować na polecenia.
Aby wyczyścić i ponownie uruchomić pojedyncze urządzenie Cuttlefish w konfiguracji wielodostępnej, podaj numer seryjny urządzenia docelowego podczas uruchamiania adb-reboot
. Jeśli nie zostanie określone żadne urządzenie docelowe, adb
nie uruchomi żadnego urządzenia.
adb -s SERIAL reboot
Nieprawidłowy restart
Aby wykonać nieczyste ponowne uruchomienie, gdy urządzenie nie reaguje, uruchom:
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. restart_cvd
czeka, aż urządzenie ponownie się uruchomi, a potem zamyka się.
W konfiguracji dla wielu dzierżawcówrestart_cvd
powoduje ponowne uruchomienie pojedynczej instancji z grupy instancji. Aby określić, którą instancję Cuttlefish ma zostać ponownie uruchomiona, użyj flagi instance_num
.
restart_cvd --instance_num=N
Jeśli nie użyjesz parametru --instance_num
, numer instancji zostanie domyślnie ustawiony na 1
.
Uruchom ponownie, używając innych flag launch_cvd
Aby zatrzymać co najmniej 1 urządzenie i uruchomić je ponownie z różnymi flagami launch_cvd
, uruchom:
stop_cvd
launch_cvd NEW_FLAG
stop_cvd
wykonuje nieprawidłowe wyłączenie podobne do restart_cvd
. Pozostawia urządzenie w stanie uśpienia, z którego można je później ponownie uruchomić za pomocą innego polecenia launch_cvd
. Podobnie jak w przypadku restart_cvd
, zapisy na dysku mogą nie zostać zachowane, jeśli nie są 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 w flagach launch_cvd
wymuszą zmianę układu dysku, która jest niezgodna z implementacją kopiowania na zapis, launch_cvd
zignoruje stare modyfikacje dysku i przywróci go do pierwotnego stanu. Pełną listę flag znajdziesz w sekcji Flagi.
Uruchom bez nakładki
Aby zrezygnować z szybkiego resetowania, uruchom:
launch_cvd --use_overlay=false
--use_overlay=false
traktuje pliki dyskowe Cuttlefish jako do odczytu i zapisu, a zmiany są rozpowszechniane w tych plikach.
Przełączanie się między --use_overlay=false
a wartością domyślną może powodować błędy zgodności. Aby wymusić wyczyszczenie poprzedniego stanu urządzenia, uruchom:
stop_cvd
rm $HOME/cuttlefish $HOME/cuttlefish_runtime $HOME/cuttlefish_assembly
Cuttlefish nie może bezpiecznie przejść przez przejście między przepływami z i bez nakładek, więc ta zmiana powoduje usunięcie całego stanu zarządzania Cuttlefish. Jeśli pliki dysku zewnętrznego zostaną zmodyfikowane i ponownie użyte później razem z nakładkami, wcześniejsze modyfikacje zostaną uznane za część stanu bazowego.
Flagi
Podczas uruchamiania urządzenia Cuttlefish za pomocą polecenia launch_cvd
możesz dodawać argumenty za pomocą flag. Jednak w przypadku niektórych flag (flag, które muszą pozostać takie same) może dojść do utraty danych, jeśli flagi zostaną zmienione między poleceniami launch_cvd
. Aby mieć pewność, że podczas wykonywania sekwencji poleceń, które obejmują launch_cvd
, stop_cvd
, a następnie ponownie launch_cvd
, nie dojdzie do utraty danych, użyj tych samych flag dla każdego polecenia launch_cvd
. Jeśli np. pierwszy parametr launch_cvd
zawiera argument --kernel_path=KERNEL_PATH
, wywołanie drugiego parametru launch_cvd
musi również zawierać ten sam argument --kernel_path=KERNEL_PATH
, w przeciwnym razie wszelkie zmiany w systemie plików wprowadzone przed wywołaniem parametru stop_cvd
zostaną utracone w przypadku drugiego wywołania parametru launch_cvd
. Plik, do którego odwołuje się element KERNEL_PATH
, musi mieć też taką samą zawartość.
Niektóre flagi można bezpiecznie zmieniać między wywołaniami launch_cvd
. W następnych sekcjach 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 w zapytaniu launch_cvd --help
.
Flagi, które muszą pozostać bez zmian
Aby uniknąć utraty danych, te flagi muszą pozostać takie same w kolejnych wywołaniach funkcji launch_cvd
:
--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 mogą się zmienić
Te flagi można bezpiecznie zmieniać między wywołaniami funkcji launch_cvd
bez ryzyka 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