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:
PowerManager
başlangıç fiyatıyla,PowerManager.reboot(PowerManager.REBOOT_USERSPACE)
numaralı telefonu arayarakKabuktan,
adb shell svc power reboot userspace
veyaadb reboot userspace
kullanarak
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,userspace
alı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-requested
işlemi tetikler. Etkilenen tesisler: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
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.rc
bölümündekion userspace-reboot-requested
işlemine bakın.Aşağıdaki işlemleri gerçekleştiren
DoUserspaceReboot
işlevini çalıştırır:SIGTERM
,userdata
bağ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
SIGKILL
sinyali 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-resume
iş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=disable
seçeneğiyle yeniden monte edilir.Blok düzeyinde kontrol noktası oluşturma (örneğin,
ext4
) yapıldığında/data
bağ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 reset
iş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
,0
ise veya belirtilmemişse yeniden başlatma girişimleri reddedilir.init.userspace_reboot.sigkill.timeoutmillis
, durdurmaSIGKILL
sinyali 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 üzereSIGTERM
sinyali alan işlemlerin zaman aşımını milisaniye cinsinden kontrol eder. Belirtilen zaman aşımı süresinde sonlandırılamayan tüm işlemlerSIGKILL
sinyali 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.