Geçici yeniden başlatmalar (<= AOSP 14)

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

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

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

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

  3. 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ç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ı telefonu arar.
    4. zRAM yedekleme cihazını kaldırır.
    5. Etkin APEX paketlerinin bağlantısını keser.
    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 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 sonra userdata, 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ğ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, sona erdirilmesi için 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, kolay yeniden başlatmanın (yani sys.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çinde userdata 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ı (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, 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.