หมึกกระดอง: รีสตาร์ทและรีเซ็ต

หน้านี้จะอธิบายวิธีรีสตาร์ทและรีเซ็ตอุปกรณ์เสมือนของ Cuttlefish การรีเซ็ตอุปกรณ์ Cuttlefish เป็นสถานะดิสก์เริ่มต้นเรียกว่า powerwashing ในเครื่องมือบรรทัดคำสั่ง

เมื่อใช้เวิร์กโฟลว์แบบอัตโนมัติหรือด้วยตนเองโดยใช้กระบวนการต่างๆ มากมาย เช่น ชุดทดสอบ การรีเซ็ตอุปกรณ์ Cuttlefish ในระหว่างขั้นตอนต่างๆ จะช่วยให้มั่นใจได้ว่า การทำงานของแต่ละกระบวนการทำงานเป็นอิสระจากกัน หากสถานะดิสก์ไม่ใช่ รีเซ็ต กระบวนการหนึ่งอาจส่งผลต่อการทำงานของขั้นตอนต่อไปนี้

ขั้นตอนการรีสตาร์ทและรีเซ็ตซึ่งอธิบายไว้ในหน้านี้จะถือว่าคุณมี สร้างอุปกรณ์ Cuttlefish และตั้งสถานะในดิสก์แล้ว

# Launch a device
launch_cvd
# Make some modifications to the device
adb shell touch /storage/self/primary/Documents/hello
# Check the device state
adb shell ls /storage/self/primary/Documents

คุณใช้ขั้นตอนการรีสตาร์ทและรีเซ็ตต่อไปนี้ได้จากจุดเริ่มต้นนี้

การใช้งานการรีเซ็ต 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