Sessiz yeniden başlatmalar (<= AOSP 14)

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'ten PowerManager.reboot(PowerManager.REBOOT_USERSPACE) numaralı telefonu arayarak

  • Kabuk üzerinden adb shell svc power reboot userspace veya adb 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:

  1. sys.powerctl=reboot,userspace alır.

  2. Yumuşak yeniden başlatmayı izlemek için ayrı bir UserspaceRebootWatchdogThread() işlemi oluşturur.

  3. 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çindeki on userspace-reboot-requested işlemine bakın.

  4. Aşağıdaki işlemleri gerçekleştiren DoUserspaceReboot işlevini çalıştırır:

    1. userdata monte edildikten sonra başlatılan işlemlere SIGTERM gönderir ve bu işlemlerin durmasını bekler.
    2. Zaman aşımına ulaşıldığında, çalışan tüm işlemleri sonlandırmak için SIGKILL gönderir.
    3. /system/bin/vdc volume reset numaralı telefondan arama.
    4. zRAM yedekleme cihazını kaldırır.
    5. Etkin APEX paketlerinin bağlantısını kaldırır.
    6. Önyükleme bağlama ad alanına geri döner.
    7. 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ğeri false, 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ırma SIGTERM 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 bir SIGKILL 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 (yani sys.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ı (yani sys.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.