ซอฟต์รีสตาร์ท

Android 11 รองรับการรีสตาร์ทแบบซอฟต์รีสตาร์ท รันไทม์จะเริ่มต้นกระบวนการใหม่ในพื้นที่ของผู้ใช้ที่ใช้อัปเดต ต้องรีบูต (เช่น อัปเดตแพ็กเกจ APEX) ปัจจุบันเป็นแบบ Soft การรีสตาร์ทจะจำกัดไว้เฉพาะกระบวนการที่เริ่มต้นหลังจากต่อเชื่อม userdata แล้ว

มีการขอให้ซอฟต์รีสตาร์ทด้วยวิธีต่อไปนี้

  • จาก PowerManager โดยการโทร PowerManager.reboot(PowerManager.REBOOT_USERSPACE)

  • จาก Shell โดยใช้ adb shell svc power reboot userspace หรือ adb reboot userspace

หลังจากซอฟต์รีสตาร์ท พื้นที่เก็บข้อมูลที่เข้ารหัสของข้อมูลเข้าสู่ระบบจะยังคงปลดล็อกอยู่

หากอุปกรณ์รองรับการซอฟต์รีสตาร์ท ระบบจะดำเนินการ เมธอด API ของ PowerManager.isRebootingUserspace() แสดงผล true และค่า ของคุณสมบัติของระบบ init.userspace_reboot.is_supported เท่ากับ 1

หากอุปกรณ์ไม่รองรับซอฟต์รีสตาร์ท จะโทรหา PowerManager.reboot(PowerManager.REBOOT_USERSPACE), adb reboot userspace และ adb shell svc power reboot userspace ล้มเหลว

การดำเนินการซอฟต์รีสตาร์ท

หลังจากขอซอฟต์รีสตาร์ท (ผ่าน PowerManager หรือจาก Shell) init ทําตามขั้นตอนต่อไปนี้

  1. ได้รับ sys.powerctl=reboot,userspace

  2. แยก UserspaceRebootWatchdogThread() เพื่อตรวจสอบการซอฟต์รีสตาร์ท

  3. เรียกใช้การดำเนินการ userspace-reboot-requested ซึ่งจะรีเซ็ตระบบทั้งหมด ที่อาจส่งผลต่อการซอฟต์รีสตาร์ท ที่พักที่ได้รับผลกระทบมีดังนี้

    • sys.usb.config
    • sys.usb.state
    • sys.boot_completed
    • dev.bootcomplete
    • sys.init.updatable_crashing
    • sys.init.updatable_crashing_process_name
    • apexd.status
    • sys.user.0.ce_available
    • sys.shutdown.requested
    • service.bootanim.exit

    ควรตั้งค่าพร็อพเพอร์ตี้ข้างต้นอีกครั้งระหว่างลำดับการเปิดเครื่อง หากจำเป็น คุณ สามารถรีเซ็ตพร็อพเพอร์ตี้เพิ่มเติมได้ ดูตัวอย่างได้ที่ on userspace-reboot-requested การดำเนินการใน rootdir/init.rc

  4. เรียกใช้ฟังก์ชัน DoUserspaceReboot ซึ่งจะทำงานดังต่อไปนี้

    1. ส่ง SIGTERM ไปยังกระบวนการที่เริ่มต้นหลังจากต่อเชื่อม userdata และ รอให้โฆษณาหยุด
    2. หลังจากถึงระยะหมดเวลาแล้ว ส่ง SIGKILL เพื่อฆ่าทุกอย่างที่ทำงานอยู่ กระบวนการ
    3. โทรหา /system/bin/vdc volume reset
    4. ยกเลิกการต่อเชื่อมอุปกรณ์ที่รองรับ zRAM
    5. ยกเลิกการต่อเชื่อมแพ็กเกจ APEX ที่ใช้งานอยู่
    6. เปลี่ยนกลับไปใช้เนมสเปซที่ต่อเชื่อมกับ Bootstrap
    7. ทริกเกอร์ userspace-reboot-resume การดำเนินการ

หากมีการร้องขอการตรวจสอบระบบไฟล์ก่อนการซอฟต์รีสตาร์ท userdata ต่อเชื่อมอีกครั้งในโหมดตรวจสอบจุดตรวจสอบในระหว่าง การดำเนินการ userspace-reboot-fs-remount (ดูรายละเอียดในส่วนต่อไปนี้) ต ซอฟต์รีสตาร์ทหลังจากตั้งค่า sys.boot_completed property แล้ว ไปยัง 1 เมื่อสิ้นสุดซอฟต์รีสตาร์ท จอแสดงผลจะปิดอยู่และ ต้องมีการโต้ตอบของผู้ใช้อย่างชัดแจ้งเพื่อปลุกระบบ

การตรวจสอบระบบไฟล์

หากมีการร้องขอจุดตรวจสอบระบบไฟล์ก่อนซอฟต์รีสตาร์ท userdata ต่อเชื่อมอีกครั้งในโหมดตรวจสอบจุดตรวจสอบระหว่างซอฟต์รีสตาร์ท มีการใช้ตรรกะการต่อเชื่อมอีกครั้งใน fs_mgr_remount_userdata_into_checkpointing และแตกต่างกันระหว่างวิธีการตรวจสอบ โดยเฉพาะอย่างยิ่ง userdata รองรับ

  • จุดตรวจสอบระดับระบบไฟล์ (เช่น f2fs) userdata คือ ต่อเชื่อมอีกครั้งด้วยตัวเลือก checkpoint=disable

  • จุดตรวจสอบระดับบล็อก (เช่น ext4) จากนั้นระบบจะยกเลิกการต่อเชื่อม /data และอุปกรณ์หลักทั้งหมดที่วางตำแหน่งนั้นไว้ด้านบน ถูกทำลายแล้ว ถัดไป ระบบจะต่อเชื่อม userdata โดยใช้เส้นทางโค้ดเดียวกับที่ใช้ใน การเปิดเครื่องเช็คพอยต์ตามปกติ

หากใช้คีย์ริงระดับระบบไฟล์เพื่อจัดการข้อมูลเข้าสู่ระบบที่เข้ารหัส (CE) และ คีย์ที่เข้ารหัสอุปกรณ์ (DE) คีย์จะหายไปหลังจากที่เลิกต่อเชื่อม userdata ถึง อนุญาตให้กู้คืนคีย์ เมื่อติดตั้งคีย์ไปยังคีย์ริงระบบไฟล์ vold ติดตั้งคีย์ประเภท fscrypt-provisioning เดียวกันที่ระดับเซสชันด้วย คีย์ริง เมื่อมีการเรียก init_user0 vold จะติดตั้งคีย์ในไฟล์อีกครั้ง คีย์ริงระบบ

สำรองเพื่อรีบูตอุปกรณ์ด้วยตนเอง

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

  • อุปกรณ์ไม่สามารถเริ่มการซอฟต์รีสตาร์ท (กล่าวคือ sys.init.userspace_reboot.in_progress=1) ภายในระยะหมดเวลาที่กำหนด
  • กระบวนการไม่หยุดภายในระยะหมดเวลาที่กำหนด
  • การดำเนินการ /system/bin/vdc volume reset ล้มเหลว
  • ยกเลิกการต่อเชื่อมอุปกรณ์ zRAM ไม่สำเร็จ
  • แพ็กเกจ APEX ที่ใช้งานอยู่ยกเลิกการต่อเชื่อมไม่ถูกต้อง
  • ความพยายามต่อเชื่อม userdata อีกครั้งในโหมดตรวจสอบจุดล้มเหลว
  • อุปกรณ์เปิดเครื่องไม่สำเร็จ (กล่าวคือ sys.boot_completed=1) ภายใน การหมดเวลาที่กำหนด

การกำหนดค่าต่ออุปกรณ์

บางลักษณะซอฟต์รีสตาร์ทสามารถปรับแต่งได้โดยเปลี่ยนค่าต่อไปนี้ พร็อพเพอร์ตี้:

  • init.userspace_reboot.is_supported จะควบคุมช่วงเวลาที่อุปกรณ์สามารถดำเนินการต่อไปนี้ ซอฟต์รีสตาร์ท หากค่าของพร็อพเพอร์ตี้นี้คือ false, 0 หรือไม่ได้ระบุ ความพยายามรีสตาร์ทจะถูกปฏิเสธ
  • init.userspace_reboot.sigkill.timeoutmillis ควบคุมระยะหมดเวลาใน มิลลิวินาทีสำหรับกระบวนการที่ได้รับสัญญาณ SIGKILL หยุด หากหนึ่งใน กระบวนการไม่สามารถหยุดได้ในระยะหมดเวลาที่กำหนด จากนั้นก็มีการสำรองไว้ มีการรีบูต
  • init.userspace_reboot.sigterm.timeoutmillis ควบคุมระยะหมดเวลาใน มิลลิวินาทีสำหรับกระบวนการที่ได้รับสัญญาณ SIGTERM จะสิ้นสุด ทั้งหมด การประมวลผลที่ไม่เสร็จสิ้นในระยะหมดเวลาที่ระบุจะได้รับ สัญญาณ SIGKILL รายการ
  • init.userspace_reboot.started.timeoutmillis ควบคุมระยะหมดเวลาใน มิลลิวินาทีที่ซอฟต์รีสตาร์ทในการเริ่มต้น (กล่าวคือ sys.init.userspace_reboot.in_progress=1) หากอุปกรณ์ไม่เริ่มทำงานอย่างนุ่มนวล รีสตาร์ทภายในระยะหมดเวลาที่กำหนด ระบบจะทริกเกอร์โฆษณาสำรองให้รีบูตด้วยตนเอง
  • init.userspace_reboot.userdata_remount.timeoutmillis ควบคุมระยะหมดเวลาใน มิลลิวินาทีก่อนยกเลิกการต่อเชื่อม userdata หากอุปกรณ์ยกเลิกการต่อเชื่อม userdata ไม่สำเร็จ ภายในระยะหมดเวลาที่กำหนด จะมีการทริกเกอร์โฆษณาสำรองให้รีบูตด้วยตนเอง
  • init.userspace_reboot.watchdog.timeoutmillis ควบคุมระยะหมดเวลาสำหรับ อุปกรณ์เพื่อให้เปิดเครื่องได้สำเร็จ (ซึ่งก็คือ sys.boot_completed=1) หากอุปกรณ์ ไม่สามารถบูตภายในระยะหมดเวลาที่กำหนด ทางเลือกสำรองสำหรับการรีบูตอย่างรวดเร็วคือ ทริกเกอร์

ปรับแต่งภาพเคลื่อนไหวระหว่างซอฟต์รีสตาร์ท

การใช้ซอฟต์แวร์อ้างอิงของซอฟต์รีสตาร์ทจะรวมความสามารถในการปรับแต่ง ภาพเคลื่อนไหวที่แสดงระหว่างซอฟต์รีสตาร์ท

เมื่อสิ้นสุดการดำเนินการ userspace-reboot-fs-remount init จะเริ่มต้น บริการ bootanim บริการนี้จะค้นหาการมีอยู่ของรายการต่อไปนี้ ภาพเคลื่อนไหวตามลำดับที่ระบุไว้ และเล่นไฟล์แรกที่พบ

  • /product/media/userspace-reboot.zip
  • /oem/media/userspace-reboot.zip
  • /system/media/userspace-reboot.zip

หากไม่ได้ระบุไฟล์ภาพเคลื่อนไหวที่เฉพาะเจาะจงแบบซอฟต์รีสตาร์ท bootanim จะแสดง ภาพเคลื่อนไหวเริ่มต้น android รายการ

การทดสอบ

Android 11 มีการใช้ข้อมูลอ้างอิงของ ซอฟต์รีสตาร์ท นอกจากนี้ คุณยังยืนยันซอฟต์รีสตาร์ทโดยใช้ CTS ได้ด้วย การทดสอบใน UserspaceRebootHostTest