หน้านี้จะอธิบายวิธีรีสตาร์ทและรีเซ็ตอุปกรณ์เสมือนของ Cuttlefish การรีเซ็ตอุปกรณ์ Cuttlefish เป็นสถานะดิสก์เริ่มต้นเรียกว่า powerwashing ในเครื่องมือบรรทัดคำสั่ง
เมื่อใช้เวิร์กโฟลว์แบบอัตโนมัติหรือด้วยตนเองโดยใช้กระบวนการต่างๆ มากมาย เช่น ชุดทดสอบ การรีเซ็ตอุปกรณ์ Cuttlefish ในระหว่างขั้นตอนต่างๆ จะช่วยให้มั่นใจได้ว่า การทำงานของแต่ละกระบวนการทำงานเป็นอิสระจากกัน หากสถานะดิสก์ไม่ใช่ รีเซ็ต กระบวนการหนึ่งอาจส่งผลต่อการทำงานของขั้นตอนต่อไปนี้
ขั้นตอนการรีสตาร์ทและรีเซ็ตซึ่งอธิบายไว้ในหน้านี้จะถือว่าคุณมี สร้างอุปกรณ์ Cuttlefish และตั้งสถานะในดิสก์แล้ว
# 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
คุณใช้ขั้นตอนการรีสตาร์ทและรีเซ็ตต่อไปนี้ได้จากจุดเริ่มต้นนี้
- หากอุปกรณ์ปรับเปลี่ยนตามอุปกรณ์ ให้รีสตาร์ทโดยใช้วิธีต่อไปนี้
adb reboot
- หากอุปกรณ์ไม่ตอบสนอง ให้รีสตาร์ทแบบไม่สะอาดโดยใช้
restart_cvd
- รีเซ็ตสถานะอุปกรณ์โดยใช้
powerwash_cvd
- หยุดอุปกรณ์และเปลี่ยนอาร์กิวเมนต์
launch_cvd
การรักษาสถานะของอุปกรณ์หรือ ถูกบังคับให้ล้างสถานะอุปกรณ์
การใช้งานการรีเซ็ต Cuttlefish อย่างรวดเร็ว
หมึกกระดองใช้การรีเซ็ตอย่างรวดเร็วซึ่งต้องอาศัยการปกป้อง ดิสก์ด้านหลัง การวางซ้อนดิสก์ qcow2 โดย ตามค่าเริ่มต้น Cuttlefish จะถือว่าดิสก์ต้นฉบับเป็นแบบอ่านอย่างเดียวและใช้การวางซ้อนเพื่อ จับการเขียนดิสก์
แต่ก็มีข้อเสียในการใช้การวางซ้อนแบบคัดลอกเมื่อเขียน สิ่งที่ควรทราบ การเปลี่ยนแปลงภายนอกเกี่ยวกับความเข้ากันได้ของช่วงพักโฆษณากับดิสก์ที่มีอยู่ ซ้อนทับ และทำให้สถานะของดิสก์ไม่สอดคล้องกัน การบังคับให้ใช้หมึกกระดอง สร้างการวางซ้อนอีกครั้งเมื่อตรวจพบการเปลี่ยนแปลงที่ทำงานร่วมกันไม่ได้
การบังคับให้สร้างการวางซ้อนใหม่เป็นสิ่งที่ไม่เป็นที่ต้องการเมื่อพัฒนาฟีเจอร์ที่ ต้องเก็บส่วนหนึ่งของดิสก์ไว้ในสถานะเริ่มต้น การเปลี่ยนส่วนอื่นๆ ของดิสก์ เช่น การติดตั้งแอปด้วย การกำหนดค่าผู้ใช้บางอย่าง จากนั้นสลับเคอร์เนลซ้ำๆ เป็น ทดสอบการโต้ตอบระหว่างแอปและบิลด์เคอร์เนลต่างๆ ในกรณีนี้ คุณควรปิดใช้การวางซ้อน
รีเซ็ตอุปกรณ์
ส่วนต่อไปนี้อธิบายวิธีรีเซ็ตอุปกรณ์ Cuttlefish เป็นค่าเริ่มต้น สถานะดิสก์
รีเซ็ตอุปกรณ์ 1 เครื่อง
หากต้องการรีเซ็ตอุปกรณ์ Cuttlefish เป็นสถานะดิสก์เริ่มต้น ให้เรียกใช้คำสั่งต่อไปนี้
powerwash_cvd
powerwash_cvd
จะปิดเครื่องเสมือน รีเซ็ตการเปลี่ยนแปลงที่เกิดขึ้น
ดิสก์ของเครื่องเสมือน รีสตาร์ทเครื่องเสมือน และรอจนกว่าจะเสร็จสิ้น
การเปิดเครื่อง อินสแตนซ์จะคงแฟล็กเดิมที่ให้ไว้กับ launch_cvd
ในการกำหนดค่าแบบหลายกลุ่มผู้ใช้
powerwash_cvd
จะรีสตาร์ทอินสแตนซ์เดียวออกจากกลุ่มอินสแตนซ์:
powerwash_cvd --instance_num=N
รีเซ็ตอุปกรณ์ทั้งหมด
หากต้องการหยุดและรีเซ็ตอุปกรณ์อย่างน้อย 1 เครื่องเป็นสถานะดิสก์เริ่มต้น ให้เรียกใช้
stop_cvd
launch_cvd --resume=false
stop_cvd
จะปิดระบบอย่างไม่สะอาดและหยุดอุปกรณ์
การเพิ่ม --resume=false
ไปยัง launch_cvd
จะทำให้หมึกกระดองทำลายไฟล์ทั้งหมด
ที่เกี่ยวข้องกับอินสแตนซ์ที่กำลังทำงานก่อนหน้าก่อนเริ่มการเรียกใช้ครั้งถัดไป ตอนนี้
เพิ่มการแจ้งว่าไม่เหมาะสม launch_cvd
รายการได้อย่างปลอดภัย
ในการกำหนดค่าแบบหลายกลุ่มผู้ใช้ stop_cvd
จะปิดอินสแตนซ์ทั้งกลุ่ม
รีสตาร์ทอุปกรณ์
ส่วนต่อไปนี้อธิบายวิธีรีสตาร์ทอุปกรณ์โดยไม่ต้องรีเซ็ต อุปกรณ์เป็นสถานะดิสก์เริ่มต้น
ล้างรีสตาร์ท
หากต้องการรีสตาร์ทอุปกรณ์เมื่ออุปกรณ์มีการตอบสนอง ให้เรียกใช้
adb reboot
adb reboot
จะนำอุปกรณ์เข้าสู่ขั้นตอนการปิดเครื่องโดยสมบูรณ์ ซึ่งก็คือการซิงค์
เปลี่ยนแปลงลงในดิสก์และทำให้แน่ใจว่ากระบวนการปิดลง โฮสต์หมึกกระดอง
ที่ไม่เกี่ยวข้องกัน ขั้นตอนนี้อาจไม่พร้อมใช้งานหากอุปกรณ์
ได้อยู่ในสถานะไม่ดีและไม่ตอบสนอง
วิธีรีสตาร์ทอุปกรณ์ Cuttlefish อย่างสะอาดตาใน
การกำหนดค่าแบบหลายกลุ่มผู้ใช้ ให้ระบุ
หมายเลขซีเรียล
ของอุปกรณ์เป้าหมายเมื่อเรียกใช้ adb-reboot
หากไม่มีอุปกรณ์เป้าหมาย
ระบุไว้ adb
จะไม่รีสตาร์ทอุปกรณ์ใดๆ
adb -s SERIAL reboot
รีสตาร์ทไม่สะอาด
หากต้องการรีสตาร์ทด้วยวิธีที่ไม่สะอาดเมื่ออุปกรณ์ไม่ตอบสนอง ให้เรียกใช้
restart_cvd
restart_cvd
ทำการปิดเครื่องอย่างไม่ปลอดภัยโดยปิด
อุปกรณ์หมึกกระดอง restart_cvd
เทียบเท่ากับ
ยกเลิกการเชื่อมต่อและเชื่อมต่อแบตเตอรี่กับอุปกรณ์จริงอีกครั้ง การเขียนดิสก์
อาจหายไปหากอยู่ระหว่างดำเนินการ restart_cvd
จะรอจนกว่าอุปกรณ์
ได้บูตอย่างสมบูรณ์อีกครั้งแล้วก่อนที่จะออก
ในการกำหนดค่าแบบหลายกลุ่มผู้ใช้
restart_cvd
จะรีสตาร์ทอินสแตนซ์เดียวออกจากอินสแตนซ์ หากต้องการระบุ
อินสแตนซ์ Cuttlefish ที่ต้องการรีสตาร์ท ให้ใช้แฟล็ก instance_num
restart_cvd --instance_num=N
หากไม่ได้ใช้ --instance_num
หมายเลขอินสแตนซ์จะมีค่าเริ่มต้นเป็น 1
รีสตาร์ทโดยใช้แฟล็ก Launch_cvd อื่น
หากต้องการหยุดอุปกรณ์อย่างน้อย 1 เครื่องและเปิดอีกครั้งด้วย Flag launch_cvd
อื่น ให้เรียกใช้
stop_cvd
launch_cvd NEW_FLAG
stop_cvd
ทำการปิดเครื่องที่ไม่สะอาดซึ่งคล้ายกับ restart_cvd
โดยออกจาก
อุปกรณ์ในสถานะไม่มีความเคลื่อนไหว ซึ่งสามารถเริ่มต้นอีกครั้งในภายหลังโดยใช้
คำสั่ง launch_cvd
เช่นเดียวกับ restart_cvd
การเขียนดิสก์อาจไม่คงอยู่หาก
ไม่ได้ซิงค์กับดิสก์โดยสมบูรณ์ ในการบันทึกข้อมูลลงในดิสก์อย่างปลอดภัย ให้เรียกใช้
adb reboot
ก่อน
adb reboot
stop_cvd
launch_cvd NEW_FLAG
หากการเปลี่ยนแปลงกับแฟล็ก launch_cvd
จะบังคับให้เปลี่ยนแปลงเลย์เอาต์ของดิสก์
ไม่สามารถใช้ร่วมกับการใช้งานแบบคัดลอกเมื่อเขียนได้ launch_cvd
จะละเว้น
การแก้ไขดิสก์เดิมและรีเซ็ตเป็นสถานะดิสก์เดิม แบบเต็ม
โปรดดูรายการแฟล็กที่แฟล็ก
เรียกใช้โดยไม่มีการวางซ้อน
หากต้องการเลือกไม่ใช้การสนับสนุนการรีเซ็ตอย่างรวดเร็ว ให้เรียกใช้คำสั่งต่อไปนี้
launch_cvd --use_overlay=false
--use_overlay=false
จะถือว่าไฟล์ดิสก์ Cuttlefish เป็นโหมดอ่าน-เขียนและ
ระบบจะเผยแพร่การเปลี่ยนแปลงไปยังไฟล์ดังกล่าว
การเปลี่ยนระหว่าง --use_overlay=false
และค่าเริ่มต้นอาจทำให้เกิดความเข้ากันได้
หากต้องการบังคับให้ล้างสถานะอุปกรณ์ก่อนหน้า ให้เรียกใช้คำสั่งต่อไปนี้
stop_cvd
rm $HOME/cuttlefish $HOME/cuttlefish_runtime $HOME/cuttlefish_assembly
หมึกกระดองไม่สามารถรับมือกับการเปลี่ยนผ่านระหว่างกระแสกับและ ไม่มีการซ้อนทับ ดังนั้นการเปลี่ยนแปลงนี้จะลบสถานะการจัดการ Cuttlefish ทั้งหมด หากมีการแก้ไขไฟล์ดิสก์ภายนอกและมีการนำกลับมาใช้ใหม่พร้อมกับการวางซ้อน การปรับเปลี่ยนก่อนหน้านี้ถือเป็นส่วนหนึ่งของสถานะเกณฑ์พื้นฐาน
ธง
คุณสามารถเพิ่มอาร์กิวเมนต์โดยใช้แฟล็กเมื่อเปิดใช้งานอุปกรณ์ Cuttlefish โดยใช้
launch_cvd
แต่สำหรับการแจ้งว่าไม่เหมาะสม
(แฟล็กที่ต้องเหมือนเดิม) ข้อมูลสูญหายอาจเกิดขึ้นได้หากแฟล็ก
มีการเปลี่ยนแปลงระหว่างคำสั่ง launch_cvd
รายการ เพื่อไม่ให้ข้อมูลสูญหายเมื่อ
โดยใช้ลำดับคำสั่งที่มี launch_cvd
, stop_cvd
จากนั้น
launch_cvd
อีกครั้ง ใช้แฟล็กเดียวกันสำหรับคำสั่ง launch_cvd
ทุกคำสั่ง สำหรับ
เช่น หากแฟล็ก launch_cvd
แรกมีอาร์กิวเมนต์
--kernel_path=KERNEL_PATH
การเรียกใช้ launch_cvd
ครั้งที่ 2
ต้องมี --kernel_path=KERNEL_PATH
ที่เหมือนกันด้วย
หรือการเปลี่ยนแปลงระบบไฟล์ใดๆ ที่ทำไว้ก่อนหน้า stop_cvd
จะหายไปในอาร์กิวเมนต์
การเรียกใช้ launch_cvd
ครั้งที่ 2 ไฟล์ที่อ้างถึง
KERNEL_PATH
ต้องมีเนื้อหาเดียวกันด้วย
แฟล็กบางรายการสามารถเปลี่ยนแปลงระหว่างการเรียกใช้ launch_cvd
ได้อย่างปลอดภัย ดังต่อไปนี้
ส่วนต่างๆ จะแสดงรายการ Flag ที่ต้องคงเดิมเพื่อหลีกเลี่ยงการสูญเสียข้อมูลและการแจ้งว่าไม่เหมาะสม
ซึ่งสามารถเปลี่ยนแปลงได้อย่างปลอดภัย โดยข้อมูลไม่สูญหาย สำหรับรายละเอียดเกี่ยวกับการแจ้งว่าไม่เหมาะสม
อ้างอิงแหล่งที่มา (
flags.cc
disk_flags.cc
) หรือเรียกใช้ launch_cvd --help
แฟล็กที่ต้องเหมือนเดิม
แฟล็กเหล่านี้ต้องเหมือนกันจากการเรียกใช้ launch_cvd
1 ครั้งไปยังคำขอถัดไป
หลีกเลี่ยงการสูญหายของข้อมูล:
--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
แฟล็กที่เปลี่ยนแปลงได้
การแจ้งเหล่านี้สามารถเปลี่ยนได้อย่างปลอดภัยระหว่างการเรียกใช้ launch_cvd
รายการโดยไม่ต้อง
ทำให้ข้อมูลสูญหาย:
--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