Android 11 รองรับการรีสตาร์ทแบบไม่บังคับ ซึ่งเป็นการรีสตาร์ทกระบวนการรันไทม์ในพื้นที่ผู้ใช้ที่ใช้เพื่อใช้การอัปเดตที่ต้องรีบูต (เช่น การอัปเดตแพ็กเกจ APEX) ปัจจุบันการรีสตาร์ทแบบไม่บังคับใช้ได้เฉพาะกับกระบวนการที่เริ่มหลังจากมีการติดตั้ง userdata
คุณขอให้รีสตาร์ทแบบไม่บังคับได้โดยทำดังนี้
จาก
PowerManager
โดยโทรไปที่PowerManager.reboot(PowerManager.REBOOT_USERSPACE)
จากเชลล์โดยใช้
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
หรือจากเชลล์) 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
และอุปกรณ์ Device Mapper ทั้งหมดที่เชื่อมต่ออยู่ด้านบนจะถูก ทำลาย จากนั้นจะมีการติดตั้ง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