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

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

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

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

  • จากเปลือกใช้ adb shell svc power reboot userspace หรือ adb reboot userspace

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

หากอุปกรณ์สนับสนุนเตะนุ่มแล้ว PowerManager.isRebootingUserspace() วิธี API ผลตอบแทน true และมูลค่าของทรัพย์สินระบบ init.userspace_reboot.is_supported มีค่าเท่ากับ 1

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

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

หลังจากที่มีการรีสตาร์ทนุ่มมีการร้องขอ (ผ่าน PowerManager หรือจากเปลือก) 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. สลับกลับไปที่เนมสเปซการเมานต์บูต
    7. เรียก userspace-reboot-resume การกระทำ

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

ด่านตรวจระบบไฟล์

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

  • ระบบแฟ้มระดับ checkpointing (ตัวอย่างเช่น f2fs ) userdata จะนั่งประจำที่กับ checkpoint=disable ตัวเลือก

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

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

ทางเลือกในการฮาร์ดรีบูต

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

  • อุปกรณ์ที่ล้มเหลวในการเริ่มต้นการเริ่มต้นใหม่ที่อ่อนนุ่ม (นั่นคือ sys.init.userspace_reboot.in_progress=1 ) ภายในหมดเวลาที่กำหนด
  • กระบวนการล้มเหลวในการหยุดภายในระยะหมดเวลาที่กำหนด
  • /system/bin/vdc volume reset การดำเนินการล้มเหลว
  • การเลิกเมาต์ของอุปกรณ์ zRAM ล้มเหลว
  • แพ็คเกจ APEX ที่ใช้งานอยู่ unmount อย่างไม่ถูกต้อง
  • ความพยายามที่จะ remount userdata เข้าสู่โหมด checkpointing ล้มเหลว
  • อุปกรณ์ที่ล้มเหลวในการประสบความสำเร็จในการบูต (นั่นคือ 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 หากอุปกรณ์ล้มเหลวในการ unmout 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