Android 11, yeniden başlatma gerektiren güncellemeleri (örneğin, APEX paketlerine yönelik güncellemeler) uygulamak için kullanılan kullanıcı alanındaki işlemlerin çalışma zamanında yeniden başlatılması olan geçici yeniden başlatmaları destekler. Şu anda yazılımla yeniden başlatma, userdata
bağlandıktan sonra başlatılan işlemlerle sınırlıdır.
Yazılımla yeniden başlatma aşağıdaki şekillerde istenir:
PowerManager
PowerManager.reboot(PowerManager.REBOOT_USERSPACE)
öğesini çağırarakKabuktan,
adb shell svc power reboot userspace
veyaadb reboot userspace
kullanarak
Yazılımla yeniden başlatmanın ardından kimlik bilgisi şifreli depolamanın kilidi açık kalır.
Bir cihaz geçici yeniden başlatmaları destekliyorsa PowerManager.isRebootingUserspace()
API yöntemi true
döndürür ve init.userspace_reboot.is_supported
sistem özelliğinin değeri 1
eşittir.
Cihaz geçici yeniden başlatmaları desteklemiyorsa PowerManager.reboot(PowerManager.REBOOT_USERSPACE)
, adb reboot userspace
ve adb shell svc power reboot userspace
yapılan çağrılar başarısız olur.
Yumuşak yeniden başlatma yürütme
Yazılımla yeniden başlatma istendikten sonra ( PowerManager
aracılığıyla veya bir kabuktan), init
aşağıdaki adımları gerçekleştirir:
sys.powerctl=reboot,userspace
değerini alır.Yazılımla yeniden başlatmayı izlemek için ayrı bir
UserspaceRebootWatchdogThread()
işlemini çatallar.Yazılımla yeniden başlatmayı etkileyebilecek tüm sistem özelliklerini sıfırlayan,
userspace-reboot-requested
bir eylemi tetikler. Etkilenen mülkler:-
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
dosyasındakion userspace-reboot-requested
eyleme bakın.-
Aşağıdaki eylemleri gerçekleştiren
DoUserspaceReboot
işlevini çalıştırır:-
userdata
bağlandıktan sonra başlatılan işlemlereSIGTERM
gönderir ve durmalarını bekler. - Zaman aşımına ulaşıldığında, çalışan tüm işlemleri sonlandırması için
SIGKILL
gönderir. -
/system/bin/vdc volume reset
çağırır. - ZRAM yedekleme cihazının bağlantısını keser.
- Aktif APEX paketlerinin bağlantısını keser.
- Önyükleme montajı ad alanına geri döner.
-
userspace-reboot-resume
eylemini tetikler.
-
Yazılımla yeniden başlatmadan önce dosya sistemi denetim noktası oluşturma istendiyse, userspace-reboot-fs-remount
eylemi sırasında userdata
denetim noktası oluşturma moduna yeniden bağlanır (ayrıntılar için aşağıdaki bölüme bakın). sys.boot_completed property
1
olarak ayarlandıktan sonra yazılımla yeniden başlatma dikkate alınır. Yazılımla yeniden başlatmanın sonunda ekran kapalı tutulur ve onu uyandırmak için açık kullanıcı etkileşimi gerekir.
Dosya sistemi kontrol noktası oluşturma
Yazılımlı yeniden başlatmadan önce bir dosya sistemi denetim noktası istendiyse, yazılımlı yeniden başlatma sırasında userdata
denetim noktası modunda yeniden bağlanır. Yeniden bağlama mantığı fs_mgr_remount_userdata_into_checkpointing
işlevinde uygulanır ve denetim noktası oluşturma yöntemleri arasında farklılık gösterir. Özellikle userdata
desteklediğinde:
Dosya sistemi düzeyinde denetim noktası oluşturma (örneğin,
f2fs
),userdata
checkpoint=disable
seçeneğiyle yeniden bağlanır.Blok düzeyinde kontrol noktası oluşturma (örneğin,
ext4
), ardından/data
bağlantısı kesilir ve üzerine monte edildiği tüm ana cihaz eşleyici cihazları yok edilir. Daha sonrauserdata
, normal kontrol noktası oluşturma önyüklemesinde kullanılanla aynı kod yolu kullanılarak bağlanır.
Kimlik bilgisi şifreli (CE) ve cihaz şifreli (DE) anahtarları yönetmek için dosya sistemi düzeyinde bir anahtarlık kullanılıyorsa, userdata
kesildikten sonra anahtarlar kaybolur. Anahtar geri yüklemesine izin vermek için, bir dosya sistemi anahtarlığına bir anahtar yüklerken vold
aynı zamanda fscrypt-provisioning
türündeki anahtarı oturum düzeyindeki anahtarlığa da yükler. init_user0
çağrıldığında vold
, anahtarları dosya sistemi anahtarlığına yeniden yükler.
Sert yeniden başlatmaya geri dönüş
Yazılımla yeniden başlatmanın cihazı kullanılamaz durumda bırakmamasını sağlamak için Android 11, aşağıdaki koşullardan biri karşılandığında tetiklenen donanımla yeniden başlatmaya geri dönüş içerir:
- Bir aygıt, belirli bir zaman aşımı süresi içinde yazılımla yeniden başlatmayı (yani
sys.init.userspace_reboot.in_progress=1
) başlatamıyor. - Belirli bir zaman aşımı süresinde bir işlem durdurulamaz.
-
/system/bin/vdc volume reset
işlemi başarısız oluyor. - zRAM cihazının bağlantısının kesilmesi başarısız olur.
- Etkin bir APEX paketinin bağlantısı hatalı şekilde kesiliyor.
-
userdata
denetim noktası moduna yeniden bağlama girişimi başarısız olur. - Bir aygıt belirli bir zaman aşımı süresi içinde başarıyla önyükleme yapamıyor (yani
sys.boot_completed=1
).
Cihaz başına yapılandırma
Bazı yazılımla yeniden başlatma özellikleri, aşağıdaki özelliklerin değerleri değiştirilerek ayarlanabilir:
-
init.userspace_reboot.is_supported
, bir cihazın yazılımla yeniden başlatma işlemini ne zaman 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
SIGKILL
sinyali alan işlemlerin durdurulması için zaman aşımını milisaniye cinsinden kontrol eder. İşlemlerden biri verilen zaman aşımı süresinde durdurulamazsa, donanımdan yeniden başlatmaya geri dönüş tetiklenir. -
init.userspace_reboot.sigterm.timeoutmillis
, sonlandırılacak birSIGTERM
sinyali alan işlemler için zaman aşımını milisaniye cinsinden kontrol eder. Belirtilen zaman aşımı süresinde sonlandırılamayan tüm işlemler birSIGKILL
sinyali alır. -
init.userspace_reboot.started.timeoutmillis
, yazılımla yeniden başlatmanın başlatılması için zaman aşımını milisaniye cinsinden kontrol eder (yani,sys.init.userspace_reboot.in_progress=1
). Bir aygıt verilen zaman aşımı süresi içinde yazılımlı yeniden başlatmayı başlatamazsa, donanımsal yeniden başlatmaya geri dönüş tetiklenir. -
init.userspace_reboot.userdata_remount.timeoutmillis
userdata
kesmek için zaman aşımını milisaniye cinsinden kontrol eder. Bir aygıt verilen zaman aşımı süresi içindeuserdata
bağlantısını kesemezse, donanımdan yeniden başlatmaya geri dönüş tetiklenir. -
init.userspace_reboot.watchdog.timeoutmillis
bir aygıtın başarıyla önyüklenmesi için zaman aşımını kontrol eder (yani,sys.boot_completed=1
). Bir aygıtın belirtilen zaman aşımı süresi içinde önyüklemesi başarısız olursa, donanımdan yeniden başlatmaya geri dönüş tetiklenir.
Yazılımla yeniden başlatma sırasında animasyonu özelleştirin
Yazılımla yeniden başlatmanın referans uygulaması, yazılımla yeniden başlatma sırasında gösterilen animasyonu özelleştirme yeteneğini içerir.
userspace-reboot-fs-remount
eyleminin 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
Yazılımla yeniden başlatmaya özel bir animasyon dosyası belirtilmezse, bootanim
varsayılan bir android
animasyonu gösterir.
Test yapmak
Android 11, yazılımla yeniden başlatmanın referans uygulamasını içerir. Ayrıca UserspaceRebootHostTest
CTS testlerini kullanarak yazılımdan yeniden başlatmayı doğrulayabilirsiniz.