Geçici yeniden başlatmalar

Android 11, yumuşak yeniden başlatmaları destekler. yeniden başlatma işlemini gerçekleştirmek için kullanıcı alanındaki işlemlerin, yeniden başlatma gerektirmesi (örneğin, APEX paketlerinin güncellenmesi). Şu anda düşük Yeniden başlatma işlemi, userdata eklendikten sonra başlatılan işlemlerle sınırlıdır.

Kontrollü yeniden başlatma aşağıdaki şekillerde istenir:

  • PowerManager adlı satıcıdan telefonla arama PowerManager.reboot(PowerManager.REBOOT_USERSPACE)

  • Kabuktan, adb shell svc power reboot userspace veya adb reboot userspace kullanılarak

Kolay bir yeniden başlatma sonrasında, kimlik bilgileri ile şifrelenmiş depolama alanının kilidi açık kalır.

Cihaz, kolay şekilde yeniden başlatma işlemini destekliyorsa PowerManager.isRebootingUserspace() API yöntemi, true ve şu değeri döndürür: init.userspace_reboot.is_supported sistem özelliğinin değeri 1 değerine eşit.

Cihaz kolay şekilde yeniden başlatmayı desteklemiyorsa PowerManager.reboot(PowerManager.REBOOT_USERSPACE), adb reboot userspace ve adb shell svc power reboot userspace başarısız.

Geçici yeniden başlatma yürütme

Yavaş bir yeniden başlatma isteğinde bulunduktan sonra (PowerManager aracılığıyla veya bir kabuk üzerinden), init şu adımları gerçekleştirir:

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

  2. Ayrı bir UserspaceRebootWatchdogThread() rahatça yeniden başlatma işlemini izlemek için gerçekleştirilir.

  3. Tüm sistemi sıfırlayan bir userspace-reboot-requested işlemini tetikler çalışmaya devam edebilir. 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ırlayabilir. Örnekler için on userspace-reboot-requested işlem rootdir/init.rc

  4. Şunu çalıştırır: DoUserspaceReboot işlevini sağlayan işlevi devreye sokmaktır:

    1. userdata eklendikten sonra başlatılan işlemlere SIGTERM gönderir ve durmasını bekler.
    2. Zaman aşımına ulaşıldığında, çalışan tüm işlemleri sonlandırmak için SIGKILL gönderir. daha fazla bilgi edineceksiniz.
    3. /system/bin/vdc volume reset numaralı telefonu arar.
    4. zRAM yedekleme cihazının bağlantısını keser.
    5. Etkin APEX paketlerinin bağlantısını keser.
    6. Önyükleme eklemesi ad alanına geri döner.
    7. userspace-reboot-resume tetikleyicisi eyleme dökülebilir.

Kolay yeniden başlatmadan önce dosya sistemi kontrol noktası istendiyse userdata, userspace-reboot-fs-remount işlemi (ayrıntılar için aşağıdaki bölüme bakın). CEVAP sys.boot_completed property ayarlandıktan sonra kolay yeniden başlatma dikkate alınır Hedef: 1. Kolay 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ı

Kolay erişilen yeniden başlatmadan önce bir dosya sistemi kontrol noktası istendiyse userdata, kolay yeniden başlatma sırasında kontrol noktası modunda yeniden eklendi. Yeniden ekleme mantığı fs_mgr_remount_userdata_into_checkpointing işlevinden ve kontrol noktası yöntemlerinden farklıdır. Özellikle, userdata aşağıdakileri destekler:

  • Dosya sistemi düzeyinde kontrol noktası (örneğin, f2fs), userdata checkpoint=disable seçeneğiyle yeniden eklenir.

  • Blok seviyesinde kontrol noktaları (örneğin, ext4), ardından /data kaldırılır ve üzerine monte edildiği tüm üst cihaz eşleyici cihazları yok. Daha sonra userdata, normal kontrol noktası başlatması.

Kimlik bilgisi ile şifrelenmiş (CE) ve şifreli (DE) anahtarlar, ardından userdata bağlantısı kesildikten sonra anahtarlar kaybolur. Alıcı: anahtarın geri yüklenmesine izin ver, dosya sistemi anahtarlığına anahtar yüklerken vold oturum düzeyinde, aynı fscrypt-provisioning türündeki anahtarı da yükler anahtarlık. init_user0 çağrıldığında, vold dosyadaki anahtarları yeniden yükler sistem anahtarlığı.

Donanımdan yeniden başlatmaya dön

Sorunsuz yeniden başlatmanın cihazı kullanılamaz durumda bırakmasını önlemek için Android 11'de tam yeniden başlatma için aşağıdaki koşullardan biri karşılandığında tetiklenir:

  • Cihazın kolay şekilde yeniden başlatma işlemini başlatamaması (yani sys.init.userspace_reboot.in_progress=1) belirli bir zaman aşımı süresi içindedir.
  • İşlem, belirtilen bir zaman aşımı süresi içinde durdurulamaz.
  • /system/bin/vdc volume reset işlemi başarısız oldu.
  • ZRAM cihazının bağlantısı kesilemiyor.
  • Etkin bir APEX paketinin bağlantısı yanlış şekilde kesiliyor.
  • userdata öğesini kontrol noktası moduna yeniden ekleme girişimi başarısız oldu.
  • Bir cihazın (sys.boot_completed=1), belirtilen zaman aşımına uğradı.

Cihaz başına yapılandırma

Kontrollü yeniden başlatmayla ilgili bazı özellikler, aşağıdaki değerler değiştirilerek ayarlanabilir özellikler:

  • init.userspace_reboot.is_supported, bir cihazın ne zaman şunları gerçekleştirebileceğini kontrol eder: kolay bir şekilde yeniden başlatın. Bu özelliğin değeri false veya 0 ise veya belirtilmemişse yeniden başlatma denemeleri reddedilir.
  • init.userspace_reboot.sigkill.timeoutmillis zaman aşımını şu süre içinde kontrol ediyor: milisaniye cinsinden SIGKILL sinyali alan işlemlerin durmasına neden olur. Aşağıdakilerden biri işlemlerin belirtilen zaman aşımı süresinde duramadığı durumlarda, ve yeniden başlatma tetiklenir.
  • init.userspace_reboot.sigterm.timeoutmillis zaman aşımını şu süre içinde kontrol ediyor: SIGTERM sinyali alan işlemlerin sona ermesi için milisaniye cinsinden süre. Tümü belirtilen zaman aşımı süresinde sonlandırılamayan işlemler, SIGKILL sinyali.
  • init.userspace_reboot.started.timeoutmillis zaman aşımını şu süre içinde kontrol ediyor: yavaş şekilde yeniden başlatmanın milisaniye cinsinden (yani sys.init.userspace_reboot.in_progress=1) tıklayın. Cihaz yavaş şekilde başlatılamazsa belirtilen zaman aşımı süresi içinde yeniden başlatılırsa tam yeniden başlatma yedeği tetiklenir.
  • init.userspace_reboot.userdata_remount.timeoutmillis zaman aşımını şu süre içinde kontrol ediyor: userdata bağlantısını kesmek için milisaniye. Bir cihaz userdata bağlantısını kesemezse belirtilen zaman aşımı süresi içinde bir donanım yeniden başlatma işlemi tetiklenir.
  • init.userspace_reboot.watchdog.timeoutmillis, şunun için zaman aşımını kontrol ediyor: cihazın başarıyla başlatılmasına (yani sys.boot_completed=1) izin verin. Bir cihaz belirtilen zaman aşımı süresi içinde başlatılamazsa, donanım yeniden başlatma yedeği tetiklendi.

Yavaş yeniden başlatma sırasında animasyonu özelleştir

Geçici yeniden başlatmanın referans uygulaması, kullanıcı davranışını özelleştirme rahatça yeniden başlatma sırasında gösterilen animasyon.

userspace-reboot-fs-remount işleminin sonunda, init bootanim hizmeti. Bu hizmet, aşağıdaki öğelerin mevcut olup olmadığını kontrol eder: animasyon dosyalarını listelenen sırada düzenler 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ı belirtilmemişse bootanim, bir komut dosyası olarak varsayılan android animasyonu.

Test

Android 11, bir kolay bir şekilde yeniden başlatın. Ayrıca, CTS'yi kullanarak kolay şekilde yeniden başlatma işlemini doğrulayabilirsiniz. için yapılan testler UserspaceRebootHostTest.