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ı 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 arayarak

  • Kabuktan, adb shell svc power reboot userspace veya adb 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:

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

  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, 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ündeki 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. SIGTERM, userdata bağlandıktan sonra başlatılan işlemlere gönderilir ve bu işlemlerin durması beklenir.
    2. Zaman aşımı süresi dolduktan sonra, çalışan tüm işlemleri sonlandırmak için SIGKILL sinyali gönderilir.
    3. Aramalar /system/bin/vdc volume reset.
    4. zRAM destek cihazını kaldırır.
    5. Etkin APEX paketlerini çıkarır.
    6. Bootstrap bağlama ad alanına geri döner.
    7. 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ğeri false, 0 ise veya belirtilmemişse yeniden başlatma girişimleri reddedilir.
  • init.userspace_reboot.sigkill.timeoutmillis, durdurma SIGKILL 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 üzere SIGTERM sinyali alan işlemlerin zaman aşımını milisaniye cinsinden kontrol eder. Belirtilen zaman aşımı süresinde sonlandırılamayan tüm işlemler SIGKILL 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 (yani sys.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çinde userdata çı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 (yani sys.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.