Android 11, yeniden başlatma gerektiren güncellemeleri (ör. APEX paketlerindeki güncellemeler) uygulamak için kullanılan kullanıcı alanındaki işlemlerin çalışma zamanı yeniden başlatılması olan yumuşak yeniden başlatmaları destekler. Şu anda yumuşak yeniden başlatma, userdata bağlandıktan sonra başlatılan işlemlerle sınırlıdır.
Yazılımsal yeniden başlatma aşağıdaki şekillerde istenebilir:
PowerManageradresinden veyaPowerManager.reboot(PowerManager.REBOOT_USERSPACE)numaralı telefonu arayarakKabuktan,
adb shell svc power reboot userspaceveyaadb reboot userspacekullanarak
Yumuşak yeniden başlatma işleminden sonra, kimlik bilgileriyle şifrelenmiş depolama alanı kilidi açık kalır.
Bir cihaz yumuşak yeniden başlatmayı destekliyorsa PowerManager.isRebootingUserspace() API yöntemi true değerini döndürür ve init.userspace_reboot.is_supported sistem özelliğinin değeri 1 olur.
Cihaz, yazılımsal yeniden başlatmayı desteklemiyorsa PowerManager.reboot(PowerManager.REBOOT_USERSPACE), adb reboot
userspace ve adb shell svc power reboot userspace numaralarına yapılan aramalar başarısız olur.
Yürütmeyi sessizce yeniden başlatma
Sessiz yeniden başlatma (PowerManager veya kabuk üzerinden) istendikten sonra init aşağıdaki adımları uygular:
sys.powerctl=reboot,userspacealıyor.Yumuşak yeniden başlatmayı izlemek için ayrı bir
UserspaceRebootWatchdogThread()işlemi oluşturur.Sessiz yeniden başlatmayı etkileyebilecek tüm sistem özelliklerini sıfırlayan bir
userspace-reboot-requestedişlemi tetikler. Etkilenen tesisler:sys.usb.configsys.usb.statesys.boot_completeddev.bootcompletesys.init.updatable_crashingsys.init.updatable_crashing_process_nameapexd.statussys.user.0.ce_availablesys.shutdown.requestedservice.bootanim.exit
Yukarıdaki özellikler, başlatma sırası sırasında tekrar ayarlanmalıdır. Gerekirse ek özellikleri sıfırlayabilirsiniz. Örnekler için
rootdir/init.rcbölümündekion userspace-reboot-requestedişlemine bakın.Aşağıdaki işlemleri gerçekleştiren
DoUserspaceRebootişlevini çalıştırır:SIGTERM,userdatabağlandıktan sonra başlatılan işlemlere gönderilir ve bu işlemlerin durması beklenir.- Zaman aşımı süresi dolduktan sonra, çalışan tüm işlemleri sonlandırmak için
SIGKILLsinyali gönderilir. - Aramalar
/system/bin/vdc volume reset. - zRAM destek cihazını kaldırır.
- Etkin APEX paketlerini çıkarır.
- Bootstrap bağlama ad alanına geri döner.
userspace-reboot-resumeişlemini tetikler.
Yumuşak yeniden başlatmadan önce dosya sistemi kontrol noktası oluşturma işlemi istenmişse userdata işlemi sırasında userspace-reboot-fs-remount kontrol noktası oluşturma modunda yeniden bağlanır (ayrıntılar için aşağıdaki bölüme bakın). sys.boot_completed property değeri 1 olarak ayarlandıktan sonra yazılımsal yeniden başlatma işlemi yapılır. Yumuşak yeniden başlatma işleminin sonunda ekran kapalı kalır ve uyandırmak için kullanıcının açıkça etkileşimde bulunması gerekir.
Dosya sistemi kontrol noktası oluşturma
Sessiz yeniden başlatmadan önce bir dosya sistemi kontrol noktası istenmişse userdata, sessiz yeniden başlatma sırasında kontrol noktası oluşturma modunda yeniden bağlanır.
Yeniden bağlama mantığı fs_mgr_remount_userdata_into_checkpointing işlevinde uygulanır ve kontrol noktası oluşturma yöntemleri arasında farklılık gösterir. Özellikle userdata şu durumlarda desteklenir:
Dosya sistemi düzeyinde kontrol noktası oluşturma (örneğin,
f2fs),userdata,checkpoint=disableseçeneğiyle yeniden monte edilir.Blok düzeyinde kontrol noktası oluşturma (örneğin,
ext4) yapıldıktan sonra/databağlantısı kaldırılır ve üzerine bağlandığı tüm üst cihaz eşleyici cihazlar yok edilir. Ardından,userdata, normal kontrol noktası oluşturma başlatma işleminde kullanılan kod yoluyla aynı kod yolu kullanılarak monte edilir.
Kimlik bilgisiyle şifrelenmiş (CE) ve cihazla şifrelenmiş (DE) anahtarları yönetmek için dosya sistemi düzeyinde bir anahtarlık kullanılırsa userdata bağlantısı kaldırıldıktan sonra anahtarlar kaybolur. Anahtarın geri yüklenmesine izin vermek için, bir dosya sistemi anahtarlığına anahtar yüklerken vold, oturum düzeyinde anahtarlığa fscrypt-provisioning türünde aynı anahtarı da yükler. init_user0 çağrıldığında, vold dosya sisteminin anahtar zincirindeki anahtarları yeniden yükler.
Tam yeniden başlatmaya geri dönme
Sessiz yeniden başlatma işleminin cihazı kullanılamaz durumda bırakmaması için Android 11'de aşağıdaki koşullardan biri karşılandığında tetiklenen zorunlu yeniden başlatma yedekleme özelliği bulunur:
- Bir cihaz, belirli bir zaman aşımı süresi içinde sessiz yeniden başlatma (yani
sys.init.userspace_reboot.in_progress=1) işlemini başlatamıyor. - Bir işlem, belirli bir zaman aşımı süresi içinde durdurulamıyor.
/system/bin/vdc volume resetişlemi başarısız olur.- zRAM cihazının bağlantısı kaldırılamıyor.
- Etkin bir APEX paketi yanlış şekilde kaldırılıyor.
userdata'yı kontrol noktası moduna yeniden bağlama girişimi başarısız oluyor.- Bir cihaz, belirli bir zaman aşımı süresi içinde başarıyla başlatılamaz (yani
sys.boot_completed=1).
Cihaz başına yapılandırma
Bazı yumuşak yeniden başlatma yönleri, aşağıdaki özelliklerin değerleri değiştirilerek ayarlanabilir:
init.userspace_reboot.is_supported, cihazın ne zaman yazılımsal olarak yeniden başlatılabileceğini kontrol eder. Bu özelliğin değerifalse,0ise veya belirtilmemişse yeniden başlatma girişimleri reddedilir.init.userspace_reboot.sigkill.timeoutmillis, durdurma içinSIGKILLsinyali alan işlemlerin zaman aşımını milisaniye cinsinden kontrol eder. İşlemlerden biri belirtilen zaman aşımında durdurulamazsa zorunlu yeniden başlatma işlemi tetiklenir.init.userspace_reboot.sigterm.timeoutmillis, sonlandırma içinSIGTERMsinyali alan işlemlerin zaman aşımını milisaniye cinsinden kontrol eder. Belirtilen zaman aşımı süresi içinde sonlandırılamayan tüm işlemlerSIGKILLsinyali alır.init.userspace_reboot.started.timeoutmillis, sessiz yeniden başlatmanın başlaması için milisaniye cinsinden zaman aşımını kontrol eder (yanisys.init.userspace_reboot.in_progress=1). Bir cihaz, belirtilen zaman aşımı içinde sessiz yeniden başlatmayı başlatamazsa zorunlu yeniden başlatmaya geri dönüş tetiklenir.init.userspace_reboot.userdata_remount.timeoutmillis,userdataöğesinin bağlantısını kaldırmak için milisaniye cinsinden zaman aşımını kontrol eder. Bir cihaz, verilen zaman aşımı süresi içindeuserdatabağlantıyı kaldıramazsa zorunlu yeniden başlatma işlemi tetiklenir.init.userspace_reboot.watchdog.timeoutmillis, bir cihazın başarıyla başlatılması için zaman aşımını kontrol eder (yanisys.boot_completed=1). Bir cihaz, verilen zaman aşımı içinde başlatılamazsa zorunlu yeniden başlatmaya geri dönüş tetiklenir.
Sessiz yeniden başlatma sırasında animasyonu özelleştirme
Sessiz yeniden başlatmanın referans uygulaması, sessiz yeniden başlatma sırasında gösterilen animasyonu özelleştirme özelliğini içerir.
userspace-reboot-fs-remount işlemi sona erdiğinde init, bootanim hizmetini başlatır. Bu hizmet, aşağıdaki animasyon dosyalarının varlığını belirtilen sırayla kontrol eder ve bulduğu ilk dosyayı oynatır:
/product/media/userspace-reboot.zip/oem/media/userspace-reboot.zip/system/media/userspace-reboot.zip
Sessiz yeniden başlatmaya özel animasyon dosyası belirtilmezse bootanim, varsayılan android animasyonunu gösterir.
Test
Android 11, yumuşak yeniden başlatmanın referans uygulamasını içerir. Ayrıca, UserspaceRebootHostTest'daki CTS testlerini kullanarak yumuşak yeniden başlatmayı doğrulayabilirsiniz.