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
ทําตามขั้นตอนต่อไปนี้
ได้รับ
sys.powerctl=reboot,userspace
แยก
UserspaceRebootWatchdogThread()
เพื่อตรวจสอบการซอฟต์รีสตาร์ทเรียกใช้การดำเนินการ
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
เรียกใช้ฟังก์ชัน
DoUserspaceReboot
ซึ่งจะทำงานดังต่อไปนี้- ส่ง
SIGTERM
ไปยังกระบวนการที่เริ่มต้นหลังจากต่อเชื่อมuserdata
และ รอให้โฆษณาหยุด - หลังจากถึงระยะหมดเวลาแล้ว ส่ง
SIGKILL
เพื่อฆ่าทุกอย่างที่ทำงานอยู่ กระบวนการ - โทรหา
/system/bin/vdc volume reset
- ยกเลิกการต่อเชื่อมอุปกรณ์ที่รองรับ zRAM
- ยกเลิกการต่อเชื่อมแพ็กเกจ APEX ที่ใช้งานอยู่
- เปลี่ยนกลับไปใช้เนมสเปซที่ต่อเชื่อมกับ Bootstrap
- ทริกเกอร์
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