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
จะดำเนินการตามขั้นตอนต่อไปนี้
ได้รับ
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
ได้ด้วย