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şlatmaları 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:
PowerManagerbaşlangıç fiyatıyla,PowerManager.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
Yumuşak yeniden başlatma istendikten sonra (PowerManager aracılığıyla veya kabuktan) 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.Yumuşak 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 userdata kontrol noktası oluşturma modunda yeniden monte edilir (ayrıntılar için aşağıdaki bölüme bakın).userspace-reboot-fs-remount sys.boot_completed property, 1 olarak ayarlandıktan sonra yazılımsal yeniden başlatma işlemi yapılır. Yumuşak yeniden başlatmanın sonunda ekran kapalı kalır ve uyandırmak için açık kullanıcı etkileşimi gerekir.
Dosya sistemi kontrol noktası oluşturma
Yumuşak yeniden başlatmadan önce bir dosya sistemi kontrol noktası istenmişse userdata, yumuşak 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ığında/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ı şekilde monte edilir.
Kimlik bilgisi şifreli (CE) ve cihaz şifreli (DE) anahtarlarını 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
Yazılımsal 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 yumuşak yeniden başlatma (yani
sys.init.userspace_reboot.in_progress=1) işlemini başlatamaz. - 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 özellikleri, aşağıdaki özelliklerin değerleri değiştirilerek ayarlanabilir:
init.userspace_reboot.is_supported, cihazın ne zaman yazılımsal yeniden başlatma işlemi gerçekleştirebileceğini kontrol eder. Bu özelliğin değerifalse,0ise veya belirtilmemişse yeniden başlatma girişimleri reddedilir.init.userspace_reboot.sigkill.timeoutmillis, durdurmaSIGKILLsinyali alan işlemler için 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ırılmak üzereSIGTERMsinyali alan işlemlerin zaman aşımını milisaniye cinsinden kontrol eder. Belirtilen zaman aşımı süresinde 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çindeuserdataçıkarılamazsa 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şlatma işlemi tetiklenir.
Yumuşak yeniden başlatma sırasında animasyonu özelleştirme
Yumuşak yeniden başlatmanın referans uygulaması, yumuşak 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ı listelenen sırayla arar ve bulduğu ilk dosyayı oynatır:
/product/media/userspace-reboot.zip/oem/media/userspace-reboot.zip/system/media/userspace-reboot.zip
Yumuşak yeniden başlatmaya özel animasyon dosyaları 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.