Android 11, yeniden başlatma gerektiren güncellemeleri (örneğin, APEX paketlerine yapılan güncellemeler) uygulamak için kullanılan kullanıcı alanındaki işlemlerin çalışma zamanında yeniden başlatılması olan kolay yeniden başlatmaları destekler. Geçici yeniden başlatma şu anda userdata
eklendikten sonra başlatılan işlemlerle sınırlıdır.
Yumuşak yeniden başlatma aşağıdaki yöntemlerle istenir:
PowerManager
'tenPowerManager.reboot(PowerManager.REBOOT_USERSPACE)
numaralı telefonu arayarakKabuktan
adb shell svc power reboot userspace
veyaadb reboot userspace
kullanarak
Kolay bir yeniden başlatma sonrasında, kimlik bilgileri ile şifrelenmiş depolama alanının 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
'a eşittir.
Cihaz kolay şekilde yeniden başlatmayı desteklemiyorsa PowerManager.reboot(PowerManager.REBOOT_USERSPACE)
, adb reboot
userspace
ve adb shell svc power reboot userspace
çağrıları başarısız olur.
Yürütmeyi yumuşak yeniden başlatma
Yumuşak yeniden başlatma istendiğinde (PowerManager
aracılığıyla veya kabuktan) init
aşağıdaki adımları uygular:
sys.powerctl=reboot,userspace
alır.Yumuşak yeniden başlatmayı izlemek için ayrı bir
UserspaceRebootWatchdogThread()
işlemi oluşturur.Bir
userspace-reboot-requested
işlemini tetikler. Bu işlem, kolay yeniden başlatmayı etkileyebilecek tüm sistem özelliklerini sıfırlar. 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, önyükleme sırası sırasında tekrar ayarlanmalıdır. Gerekirse diğer mülkleri de sıfırlayabilirsiniz. Örnekler için
rootdir/init.rc
içindekion userspace-reboot-requested
işlemine bakın.Aşağıdaki işlemleri gerçekleştiren
DoUserspaceReboot
işlevini çalıştırır:userdata
monte edildikten sonra başlatılan işlemlereSIGTERM
gönderir ve bu işlemlerin durmasını bekler.- Zaman aşımına ulaşıldığında, çalışan tüm işlemleri sonlandırmak için
SIGKILL
gönderir. /system/bin/vdc volume reset
numaralı telefonu arar.- zRAM yedekleme cihazını kaldırır.
- Etkin APEX paketlerinin bağlantısını keser.
- Önyükleme bağlama ad alanına geri döner.
userspace-reboot-resume
işlemini tetikler.
Dosya sistemi kontrol noktası oluşturma işlemi yumuşak yeniden başlatmadan önce istenmişse userdata
, userspace-reboot-fs-remount
işlemi sırasında kontrol noktası oluşturma moduna yeniden monte edilir (ayrıntılar için aşağıdaki bölüme bakın). sys.boot_completed property
, 1
olarak ayarlandıktan sonra kolay yeniden başlatma kabul edilir. Yumuşak yeniden başlatmanın sonunda ekran kapalı kalır ve ekranı uyandırmak için kullanıcının açıkça etkileşimde bulunması 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ı modunda yeniden monte edilir.
Yeniden montaj mantığı, fs_mgr_remount_userdata_into_checkpointing
işlevinde uygulanır ve kontrol noktası yöntemleri arasında farklılık gösterir. Özellikle userdata
aşağıdakileri desteklediğinde:
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
), ardından/data
'ın montajı kaldırılır ve üzerine monte edildiği tüm üst cihaz eşleyici cihazları imha edilir. Daha sonrauserdata
, normal kontrol noktası başlatma işleminde kullanılan kod yolu kullanılarak eklenir.
Kimlik bilgisiyle şifrelenmiş (CE) ve cihazla şifrelenmiş (DE) anahtarları yönetmek için dosya sistemi düzeyinde bir anahtar zinciri kullanılıyorsa userdata
'ün bağlantısı kaldırıldıktan sonra anahtarlar kaybedilir. Anahtarların geri yüklenmesine izin vermek için vold
, bir anahtarı dosya sistemi anahtar zincirine yüklerken aynı fscrypt-provisioning
türündeki anahtarı oturum düzeyinde anahtar zincirine de yükler. init_user0
çağrıldığında vold
, anahtarları dosya sistemi anahtar zincirine yeniden yükler.
Zorunlu olarak yeniden başlatma
Sorunsuz yeniden başlatmanın bir cihazı kullanılamaz durumda bırakmasını önlemek için Android 11, aşağıdaki koşullardan biri karşılandığında tetiklenen bir donanım yeniden başlatma yedeği içerir:
- Cihaz, belirli bir zaman aşımı içinde yumuşak yeniden başlatmayı (
sys.init.userspace_reboot.in_progress=1
) başlatamaz. - Bir işlem, belirtilen zaman aşımı içinde durdurulamaz.
/system/bin/vdc volume reset
işlemi başarısız olur.- zRAM cihazının unmount edilmesi başarısız olur.
- Etkin bir APEX paketinin bağlantısı yanlış şekilde kesiliyor.
userdata
'ü kontrol noktası moduna yeniden bağlama girişimi başarısız olur.- Cihaz, belirli bir zaman aşımı içinde başarıyla başlatılamaz (
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 kolay yeniden başlatma yapabileceğini kontrol eder. Bu mülkün değerifalse
,0
ise veya belirtilmemişse yeniden başlatma girişimleri reddedilir.init.userspace_reboot.sigkill.timeoutmillis
,SIGKILL
durma sinyali alan işlemler için zaman aşım süresini milisaniye cinsinden kontrol eder. İşlemlerden biri belirtilen zaman aşımına kadar duraklatılmazsa sert yeniden başlatma işlemi tetiklenir.init.userspace_reboot.sigterm.timeoutmillis
, sona erdirilmesi içinSIGTERM
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
, kolay yeniden başlatmanın (yanisys.init.userspace_reboot.in_progress=1
) başlaması için zaman aşımını milisaniye cinsinden kontrol eder. Bir cihaz, belirtilen zaman aşımı süresi içinde kolay yeniden başlatma işlemini başlatamazsa donanım yeniden başlatma yedeği tetiklenir.init.userspace_reboot.userdata_remount.timeoutmillis
,userdata
'in bağlantısının kaldırılması için milisaniye cinsinden zaman aşım süresini kontrol eder. Bir cihaz, belirtilen zaman aşımı süresi içindeuserdata
bağlantısını kesemezse donanım yeniden başlatma yedeği tetiklenir.init.userspace_reboot.watchdog.timeoutmillis
, bir cihazın başarıyla başlatılması için zaman aşımını (yanisys.boot_completed=1
) kontrol eder. Bir cihaz belirtilen zaman aşımı içinde başlatılamazsa sert 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 olanağı sunar.
userspace-reboot-fs-remount
işleminin sonunda init
, bootanim
hizmetini başlatır. Bu hizmet, listelenen sırayla aşağıdaki animasyon dosyalarının varlığını arar ve bulduğu ilk dosyayı oynatır:
/product/media/userspace-reboot.zip
/oem/media/userspace-reboot.zip
/system/media/userspace-reboot.zip
Geçici yeniden başlatma için herhangi bir animasyon dosyası belirtilmezse bootanim
, varsayılan android
animasyonu gösterir.
Test
Android 11, yumuşak yeniden başlatmanın referans uygulamasını içerir. Ayrıca, UserspaceRebootHostTest
'te CTS testlerini kullanarak kolay yeniden başlatma işlemini doğrulayabilirsiniz.