Trang này mô tả cách khởi động lại và đặt lại thiết bị ảo Cuttlefish. Việc đặt lại thiết bị Cuttlefish về trạng thái ổ đĩa ban đầu được gọi là tẩy sạch trong công cụ dòng lệnh.
Khi chạy quy trình làm việc tự động hoặc thủ công với nhiều quy trình khác nhau, chẳng hạn như bộ kiểm thử, việc đặt lại thiết bị Cuttlefish giữa các quy trình sẽ đảm bảo hành vi của mỗi quy trình là độc lập. Nếu trạng thái ổ đĩa không được đặt lại, một quy trình có thể ảnh hưởng đến hành vi của quy trình sau.
Các quy trình khởi động lại và đặt lại được mô tả trên trang này giả định rằng bạn đã tạo một thiết bị Cuttlefish và đã đặt một số trạng thái trên ổ đĩa.
# 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
Từ điểm xuất phát này, bạn có thể sử dụng các luồng khởi động lại và đặt lại sau:
- Nếu thiết bị phản hồi, hãy khởi động lại sạch bằng
adb reboot
. - Nếu thiết bị không phản hồi, hãy khởi động lại không sạch bằng cách sử dụng
restart_cvd
. - Đặt lại trạng thái thiết bị bằng
powerwash_cvd
. - Dừng thiết bị và thay đổi các đối số
launch_cvd
trong khi giữ trạng thái thiết bị hoặc buộc xoá trạng thái thiết bị.
Triển khai tính năng đặt lại nhanh Cuttlefish
Cuttlefish sử dụng phương thức triển khai đặt lại nhanh phụ thuộc vào việc bảo vệ các ổ đĩa đằng sau lớp phủ ổ đĩa qcow2. Theo mặc định, Cuttlefish coi các ổ đĩa gốc là chỉ có thể đọc và sử dụng lớp phủ để ghi lại hoạt động ghi ổ đĩa.
Tuy nhiên, việc sử dụng lớp phủ sao chép khi ghi cũng có một số hạn chế. Đáng chú ý là các thay đổi bên ngoài đối với ổ đĩa cơ bản sẽ làm mất khả năng tương thích với các lớp phủ hiện có và gây ra trạng thái ổ đĩa không nhất quán. Cuttlefish buộc tạo lại các lớp phủ khi phát hiện thấy các thay đổi không tương thích.
Bạn không nên buộc tạo lại lớp phủ khi phát triển một tính năng yêu cầu giữ một phần ổ đĩa ở trạng thái khởi chạy cụ thể trong khi hoán đổi một phần khác của ổ đĩa. Ví dụ: cài đặt một ứng dụng có cấu hình người dùng cụ thể, sau đó liên tục hoán đổi nhân để kiểm thử hoạt động tương tác giữa ứng dụng và các bản dựng nhân khác nhau. Trong trường hợp này, bạn nên tắt lớp phủ.
Đặt lại thiết bị
Các phần sau đây mô tả cách đặt lại thiết bị Cuttlefish về trạng thái ổ đĩa ban đầu.
Đặt lại một thiết bị
Để đặt lại một thiết bị Cuttlefish về trạng thái ổ đĩa ban đầu, hãy chạy:
powerwash_cvd
powerwash_cvd
tắt máy ảo, đặt lại mọi thay đổi đối với đĩa máy ảo, khởi động lại máy ảo và đợi cho đến khi máy ảo khởi động xong. Thực thể này giữ nguyên các cờ ban đầu được cấp cho launch_cvd
.
Trong cấu hình nhiều người dùng, powerwash_cvd
khởi động lại một thực thể trong nhóm thực thể:
powerwash_cvd --instance_num=N
Đặt lại tất cả thiết bị
Để dừng và đặt lại một hoặc nhiều thiết bị về trạng thái ổ đĩa ban đầu, hãy chạy:
stop_cvd
launch_cvd --resume=false
stop_cvd
thực hiện tắt không sạch và dừng thiết bị.
Việc thêm --resume=false
vào launch_cvd
sẽ khiến Cuttlefish huỷ bỏ tất cả các tệp liên quan đến phiên bản đang chạy trước đó trước khi bắt đầu lần chạy tiếp theo. Bạn có thể thêm bất kỳ cờ launch_cvd
nào khác một cách an toàn.
Trong cấu hình nhiều người dùng, stop_cvd
sẽ tắt toàn bộ nhóm thực thể.
Khởi động lại thiết bị
Các phần sau đây mô tả cách khởi động lại thiết bị mà không cần đặt lại thiết bị về trạng thái ổ đĩa ban đầu.
Khởi động lại sạch
Để khởi động lại thiết bị một cách sạch sẽ khi thiết bị phản hồi, hãy chạy:
adb reboot
adb reboot
đưa thiết bị qua quy trình tắt hoàn toàn, đồng bộ hoá các thay đổi với ổ đĩa và đảm bảo các quy trình tắt. Các quy trình lưu trữ của Cuttlefish không liên quan. Quy trình này có thể không hoạt động nếu thiết bị đã chuyển sang trạng thái xấu và không phản hồi.
Để khởi động lại một thiết bị Cuttlefish trong cấu hình nhiều người dùng, hãy chỉ định số sê-ri của thiết bị mục tiêu khi chạy adb-reboot
. Nếu không chỉ định thiết bị mục tiêu, adb
sẽ không khởi động lại thiết bị nào.
adb -s SERIAL reboot
Khởi động lại không sạch
Để khởi động lại không sạch khi thiết bị không phản hồi, hãy chạy:
restart_cvd
restart_cvd
thực hiện tắt không sạch bằng cách tắt ngay thiết bị Cuttlefish. restart_cvd
tương đương với việc ngắt kết nối và kết nối lại pin với một thiết bị thực. Các hoạt động ghi ổ đĩa có thể không tiếp tục nếu đang diễn ra. restart_cvd
sẽ chờ cho đến khi thiết bị khởi động lại hoàn toàn rồi mới thoát.
Trong cấu hình nhiều người dùng, restart_cvd
sẽ khởi động lại một thực thể trong nhóm thực thể. Để chỉ định thực thể Cuttlefish cần khởi động lại, hãy sử dụng cờ instance_num
.
restart_cvd --instance_num=N
Nếu bạn không sử dụng --instance_num
, số lượng thực thể sẽ mặc định là 1
.
Khởi động lại bằng các cờ launch_cvd khác nhau
Để dừng một hoặc nhiều thiết bị và chạy lại bằng các cờ launch_cvd
khác nhau, hãy chạy:
stop_cvd
launch_cvd NEW_FLAG
stop_cvd
thực hiện tắt không sạch tương tự như restart_cvd
. Lệnh này sẽ đưa thiết bị vào trạng thái ngủ đông và có thể khởi động lại sau bằng một lệnh launch_cvd
khác. Giống như restart_cvd
, các hoạt động ghi ổ đĩa có thể không tồn tại nếu không được đồng bộ hoá hoàn toàn với ổ đĩa. Để lưu dữ liệu vào ổ đĩa một cách an toàn, trước tiên, hãy chạy adb reboot
.
adb reboot
stop_cvd
launch_cvd NEW_FLAG
Nếu các thay đổi đối với cờ launch_cvd
buộc phải thay đổi bố cục ổ đĩa không tương thích với việc triển khai tính năng sao chép khi ghi, thì launch_cvd
sẽ bỏ qua các sửa đổi ổ đĩa cũ và đặt lại về trạng thái ổ đĩa ban đầu. Để xem danh sách đầy đủ các cờ, hãy xem phần Cờ.
Chạy mà không có lớp phủ
Để chọn không sử dụng tính năng hỗ trợ đặt lại nhanh, hãy chạy:
launch_cvd --use_overlay=false
--use_overlay=false
coi các tệp ổ đĩa Cuttlefish là có thể đọc và ghi, đồng thời các thay đổi sẽ được truyền vào các tệp đó.
Việc thay đổi giữa --use_overlay=false
và mặc định có thể gây ra lỗi về khả năng tương thích. Để buộc dọn dẹp trạng thái thiết bị trước đó, hãy chạy:
stop_cvd
rm $HOME/cuttlefish $HOME/cuttlefish_runtime $HOME/cuttlefish_assembly
Cuttlefish không thể điều hướng an toàn quá trình chuyển đổi giữa các luồng có và không có lớp phủ, vì vậy, thay đổi này sẽ xoá tất cả trạng thái quản lý Cuttlefish. Nếu các tệp ổ đĩa ngoài được sửa đổi và sử dụng lại sau cùng với các lớp phủ, thì các nội dung sửa đổi trước đó sẽ được coi là một phần của trạng thái cơ sở.
Cờ
Bạn có thể thêm đối số bằng cờ khi khởi chạy thiết bị Cuttlefish bằng launch_cvd
. Tuy nhiên, đối với một số cờ nhất định (Cờ phải giữ nguyên), dữ liệu có thể bị mất nếu cờ thay đổi giữa các lệnh launch_cvd
. Để đảm bảo không xảy ra tình trạng mất dữ liệu khi chạy một chuỗi lệnh bao gồm launch_cvd
, stop_cvd
, sau đó chạy lại launch_cvd
, hãy sử dụng cùng một cờ cho mọi lệnh launch_cvd
. Ví dụ: nếu cờ launch_cvd
đầu tiên bao gồm đối số --kernel_path=KERNEL_PATH
, thì lệnh gọi launch_cvd
thứ hai cũng phải bao gồm cùng một đối số --kernel_path=KERNEL_PATH
, hoặc mọi thay đổi đối với hệ thống tệp được thực hiện trước stop_cvd
sẽ bị mất trong lệnh gọi launch_cvd
thứ hai. Tệp được KERNEL_PATH
tham chiếu cũng phải có cùng nội dung.
Bạn có thể thay đổi một số cờ một cách an toàn giữa các lệnh gọi launch_cvd
. Các phần sau đây liệt kê các cờ phải giữ nguyên để tránh mất dữ liệu và các cờ có thể thay đổi một cách an toàn mà không làm mất dữ liệu. Để biết thông tin chi tiết về từng cờ, hãy tham khảo nguồn (flags.cc
, disk_flags.cc
) hoặc chạy launch_cvd --help
.
Cờ phải giữ nguyên
Các cờ này phải giữ nguyên từ lệnh gọi launch_cvd
này đến lệnh gọi tiếp theo để tránh mất dữ liệu:
--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
Cờ có thể thay đổi
Bạn có thể thay đổi các cờ này một cách an toàn giữa các lệnh gọi launch_cvd
mà không gây mất dữ liệu:
--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