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ında 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.
Yumuşak yeniden başlatma aşağıdaki şekillerde istenir:
PowerManager
'tenPowerManager.reboot(PowerManager.REBOOT_USERSPACE)
numaralı telefonu arayarakKabuk üzerinden
adb shell svc power reboot userspace
veyaadb reboot userspace
kullanarak
Yumuşak yeniden başlatma işleminden sonra, kimlik bilgileri ş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 yumuşak yeniden başlatmayı desteklemiyorsa PowerManager.reboot(PowerManager.REBOOT_USERSPACE)
, adb reboot
userspace
ve adb shell svc power reboot userspace
numaralı telefonlara yapılan aramalar 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.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, önyükleme sırası sırasında tekrar ayarlanmalıdır. Gerekirse ek özellikleri 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ı telefondan arama.- zRAM yedekleme cihazını kaldırır.
- Etkin APEX paketlerinin bağlantısını kaldırır.
- Ö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 yumuşak yeniden başlatma işlemi gerçekleşir. 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 bağlama 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. Ardından,userdata
normal kontrol noktası önyüklemesinde kullanılan kod yolu kullanılarak monte edilir.
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
Yumuşak yeniden başlatmanın cihazı kullanılamaz durumda bırakmasını önlemek için Android 11, aşağıdaki koşullardan biri karşılandığında tetiklenen sert yeniden başlatma özelliğine sahiptir:
- 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 paketi yanlış şekilde kaldırılır.
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 yumuşak 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
, sonlandırmaSIGTERM
sinyali alan işlemler için zaman aşım süresini milisaniye cinsinden kontrol eder. Belirtilen zaman aşımı içinde sonlandırılamayan tüm işlemler birSIGKILL
sinyali alır.init.userspace_reboot.started.timeoutmillis
, sessiz yeniden başlatmanın başlaması için zaman aşım süresini milisaniye cinsinden kontrol eder (yanisys.init.userspace_reboot.in_progress=1
). Bir cihaz, belirtilen zaman aşımı süresi içinde sessiz yeniden başlatmayı başlatamazsa sert yeniden başlatmaya geç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,userdata
belirtilen zaman aşımı içinde silmezse sert 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ı (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, 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 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
'daki CTS testlerini kullanarak yumuşak yeniden başlatmayı doğrulayabilirsiniz.