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 ที่ใช้งานอยู่
- สลับกลับไปเป็นเนมสเปซเมานต์บูตสแตรป
- ทริกเกอร์การดำเนินการ
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
จะถูกยกเลิกการต่อเชื่อม และอุปกรณ์ mapper อุปกรณ์หลักทั้งหมดที่ติดตั้งอยู่ด้านบนจะถูกทำลาย ถัดไปuserdata
จะถูกเมาท์โดยใช้เส้นทางโค้ดเดียวกันกับที่ใช้ในการบูตจุดตรวจสอบปกติ
หากใช้คีย์ริงระดับระบบไฟล์เพื่อจัดการคีย์ที่เข้ารหัสข้อมูลประจำตัว (CE) และคีย์ที่เข้ารหัสอุปกรณ์ (DE) คีย์จะสูญหายไปหลังจากยกเลิกการต่อเชื่อม userdata
เพื่อให้กู้คืนคีย์ได้ เมื่อติดตั้งคีย์ให้กับคีย์ริงของระบบไฟล์ volold 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