Fastboot'u Kullanıcı Alanına Taşıma

Android 10 ve üstü, fastboot uygulamasını önyükleyiciden kullanıcı alanına taşıyarak yeniden boyutlandırılabilir bölümleri destekler. Bu yer değiştirme, yanıp sönen kodun, bir donanım soyutlama katmanı (HAL) tarafından uygulanan fastboot'un yalnızca satıcıya özel bölümleriyle, bakımı yapılabilir ve test edilebilir bir ortak konuma taşınmasını sağlar. Ek olarak, Android 12 ve sonraki sürümler, eklenen bir fastboot komutu aracılığıyla ramdisklerin yanıp sönmesini destekler.

Fastboot ve kurtarmayı birleştirme

Kullanıcı alanı hızlı başlatma ve kurtarma benzer olduğundan, bunları bir bölüm veya ikili dosyada birleştirebilirsiniz. Bu, daha az alan kullanma, genel olarak daha az bölüme sahip olma ve hızlı başlatma ve kurtarma işleminin çekirdeklerini ve kitaplıklarını paylaşması gibi avantajlar sağlar.

Destek için fastbootd , bootloader yeni önyükleme denetim bloğu (BCB) komutunu uygulamalıdır boot-fastboot . Girmek için fastbootd modu, bootloader yazıyor boot-fastboot BCB mesajının komut alanına ve yaprakları recovery değişmeden BCB (herhangi bir kesintiye kurtarma görevlerini yeniden başlatmayı etkinleştirmek için) alanında. status , stage ve reserved alanlar yanı değişmeden kalır. Görünce kurtarma görüntüsünü içine bootloader yükler ve botlar boot-fastboot BCB komut alanında. Kurtarma sonra BCB mesajı ayrıştırır ve geçer fastbootd mod.

ADB komutları

Bu bölümde adb entegre etmek için komutu fastbootd . Komutun sistem tarafından mı yoksa kurtarma tarafından mı yürütüldüğüne bağlı olarak farklı sonuçları vardır.

Emretmek Açıklama
reboot fastboot
  • İçine yeniden başlatır fastbootd (sistem).
  • Girer fastbootd doğrudan yeniden başlatma (recovery) olmadan.

Hızlı başlatma komutları

Bu bölüm entegre etmek için hızlı önyükleme komutlarını açıklar fastbootd yanıp sönen ve mantıksal bölümleri yönetmek için yeni komutları dahil. Bazı komutlar bunlar bootloader veya tarafından yürütülen oldum bağlı olarak farklı sonuçlar var fastbootd .

Emretmek Açıklama
reboot recovery
  • Kurtarmaya yeniden başlar (önyükleyici).
  • Doğrudan bir yeniden başlatma (olmadan kurtarma girer fastbootd ).
reboot fastboot İçine yeniden başlatır fastbootd .
getvar is-userspace
  • İade yes ( fastbootd ).
  • İade no (bootloader).
getvar is-logical: <partition> İade yes verilen bölüm, mantıksal bölüm ise no aksi. Mantıksal bölümler, aşağıda listelenen tüm komutları destekler.
getvar super-partition-name Süper bölümün adını döndürür. Süper bölüm bir A/B bölümü ise (genellikle değildir) ad, geçerli yuva son ekini içerir.
create-logical-partition <partition> <size> Verilen ad ve boyutta mantıksal bir bölüm oluşturur. Ad, mantıksal bölüm olarak zaten mevcut olmamalıdır.
delete-logical-partition <partition> Verilen mantıksal bölümü siler (bölümü etkin bir şekilde siler).
resize-logical-partition <partition> <size> İçeriğini değiştirmeden mantıksal bölümü yeni boyuta yeniden boyutlandırır. Yeniden boyutlandırmayı gerçekleştirmek için yeterli alan yoksa başarısız olur.
update-super <partition> Süper bölüm meta verilerindeki değişiklikleri birleştirir. Birleştirme mümkün değilse (örneğin, cihazdaki biçim desteklenmeyen bir sürümse), bu komut başarısız olur. Bir isteğe bağlı wipe yerine bir birleştirme gerçekleştirmek daha parametre üzerine yazar aygıtın meta.
flash <partition> [ <filename> ] Flash bölümüne bir dosya yazar. Cihaz kilidi açık durumda olmalıdır.
erase <partition> Bir bölümü siler (güvenli silme için gerekli değildir). Cihaz kilidi açık durumda olmalıdır.
getvar <variable> | all Bir önyükleyici değişkenini veya tüm değişkenleri görüntüler. Değişken yoksa, bir hata döndürür.
set_active <slot>

Set verilen A / B önyükleme yuvası active . Bir sonraki önyükleme denemesinde, sistem belirtilen yuvadan önyüklenir.

A/B desteği için yuvalar, bağımsız olarak önyüklenebilen yinelenen bölüm kümeleridir. Yuvaları adlandırılır a , b , ve benzeri, ve ekleri ekleyerek ayırt _a , _b ve böylece bölüm adının üzerine.

reboot Cihazı normal şekilde yeniden başlatır.
reboot-bootloader (ya da reboot bootloader ) Aygıtı önyükleyiciye yeniden başlatır.
fastboot fetch vendor_boot <out.img>

Desteklemek için Android 12 ve üstü kullanın yanıp sönen satıcı ramdiskleri.

Tüm bölüm boyutunu ve yığın boyutunu alır. Her yığın için verileri alır, daha sonra verileri bir araya birleştirir <out.img>

Ayrıntılar için bkz fastboot fetch vendor_boot <out.img> .

fastboot flash vendor_boot:default <vendor-ramdisk.img>

Yanıp sönen satıcı ramdiskleri desteklemek için Android 12 ve üzeri kullanın.

Bu, flash komutunun özel bir çeşididir. Bu bir gerçekleştirir fetch vendor_boot sanki görüntü fonksiyonu fastboot fetch denirdi. Yeni vendor_boot yanıp görüntü çizme başlık sürümü sürüm 3 veya sürüm 4 olup olmadığına bağlıdır.

Ayrıntılar için bkz fastboot flash vendor_boot:default <vendor-ramdisk.img> .

fastboot flash vendor_boot: <foo> <vendor-ramdisk.img> Yanıp sönen satıcı ramdiskleri desteklemek için Android 12 ve üzeri kullanın.

Getirir vendor_boot görüntü. Satıcı önyükleme başlığı sürüm 3 ise bir hata döndürür. Bu sürüm 4 ise, doğru satıcı ramdisk parçasını (varsa) bulur. Bu verilen görüntü ile, boyut ve uzaklıklar yeniden hesaplar ve yeni yanıp sönen olduğunu değiştirir vendor_boot image .

Ayrıntılar için bkz fastboot flash vendor_boot: <foo> <vendor-ramdisk.img>

Fastboot ve önyükleyici

Bootloader yanıp sönen bootloader , radio ve boot/recovery bölümleri, hangi fastboot içine cihaz botları (userspace) ve diğer tüm bölümleri yanıp sonra. Önyükleyici aşağıdaki komutları desteklemelidir.

Emretmek Açıklama
download Görüntüyü flaşa indirir.
flash recovery <image> / flash boot <image> / flash bootloader <image> / Yanıp söner recovery/boot bölümü ve bootloader.
reboot Cihazı yeniden başlatır.
reboot fastboot Fastboot için yeniden başlatır.
reboot recovery Kurtarma için yeniden başlatılır.
getvar (Örneğin, kurtarma / önyükleme görüntü yanıp için gerekli olan bir bootloader değişkeni alır current-slot ve max-download-size ).
oem <command> OEM tarafından tanımlanan komut.

Dinamik bölümler

Bootloader yanıp sönen veya dinamik bölümleri silme ve bu işlemler denenirse bir hata döndürmesi gerekir izin vermemelidir. Güçlendirilmiş dinamik bölüm aygıtları için, fastboot aracı (ve önyükleyici), önyükleyici modundayken dinamik bölümü doğrudan flaşlamak için bir zorlama modunu destekler. Örneğin, system kullanılarak Sonradan takılan cihazda dinamik bölme, fastboot --force flash system komutu (yerine bootloader sağlayan fastbootd bölümü flaş).

Kapalı modda şarj

Güç, bir uygulamasını uygulandığında bir cihaz destekleri dışı modunda özel moduna otomatik olarak başlarsa şarj veya yine fastboot oem off-mode-charge 0 cihaz botları kullanıcı basılı sanki böylece, bu özel modlar baypas komut şırası güç düğmesi.

Hızlı önyükleme OEM HAL'ı

Bootloader fastboot'u tamamen değiştirmek için fastboot, mevcut tüm fastboot komutlarını işlemelidir. Bu komutların çoğu OEM'lerdendir ve belgelenmiştir ancak özel bir uygulama gerektirir. Birçok OEM özgü komutları belgelenmiştir. Bu tür komutları işlemek için fastboot HAL, gerekli OEM komutlarını belirtir. OEM'ler kendi komutlarını da uygulayabilir.

fastboot HAL'nin tanımı aşağıdaki gibidir:

import IFastbootLogger;

/**
 * IFastboot interface implements vendor specific fastboot commands.
 */
interface IFastboot {
    /**
     * Returns a bool indicating whether the bootloader is enforcing verified
     * boot.
     *
     * @return verifiedBootState True if the bootloader is enforcing verified
     * boot and False otherwise.
     */
    isVerifiedBootEnabled() generates (bool verifiedBootState);

    /**
     * Returns a bool indicating the off-mode-charge setting. If off-mode
     * charging is enabled, the device autoboots into a special mode when
     * power is applied.
     *
     * @return offModeChargeState True if the setting is enabled and False if
     * not.
     */
    isOffModeChargeEnabled() generates (bool offModeChargeState);

    /**
     * Returns the minimum battery voltage required for flashing in mV.
     *
     * @return batteryVoltage Minimum battery voltage (in mV) required for
     * flashing to be successful.
     */
    getBatteryVoltageFlashingThreshold() generates (int32_t batteryVoltage);

    /**
     * Returns the file system type of the partition. This is only required for
     * physical partitions that need to be wiped and reformatted.
     *
     * @return type Can be ext4, f2fs or raw.
     * @return result SUCCESS if the operation is successful,
     * FAILURE_UNKNOWN if the partition is invalid or does not require
     * reformatting.
     */
    getPartitionType(string partitionName) generates (FileSystemType type, Result result);

    /**
     * Executes a fastboot OEM command.
     *
     * @param oemCmd The oem command that is passed to the fastboot HAL.
     * @response result Returns the status SUCCESS if the operation is
     * successful,
     * INVALID_ARGUMENT for bad arguments,
     * FAILURE_UNKNOWN for an invalid/unsupported command.
     */
    doOemCommand(string oemCmd) generates (Result result);

};

fastbootd'yi etkinleştirme

Etkinleştirmek için fastbootd bir cihazda:

  1. Ekle fastbootd için PRODUCT_PACKAGES içinde device.mk : PRODUCT_PACKAGES += fastbootd .

  2. Fastboot HAL, önyükleme denetimi HAL ve sistem durumu HAL'nin kurtarma görüntüsünün parçası olarak paketlendiğinden emin olun.

  3. Gerektirdiği tüm aygıta özgü SEPolicy izinleri ekleyin fastbootd . Örneğin, fastbootd o bölümü yanıp cihaza özel bir bölüm yazma erişimi gerektirir. Ek olarak, fastboot HAL uygulaması ayrıca cihaza özel izinler gerektirebilir.

Validate userspace fastboot için koşmak Satıcı Testi Suite (VTS) .

Yanıp sönen satıcı ramdiskleri

Robot 12 ve daha yüksek dolu çeker bir ilave hızlı önyükleme komutuyla ramdiskleri yanıp için destek sağlar vendor_boot bir aygıttan bir görüntü. Komut, ana bilgisayar tarafındaki hızlı önyükleme aracından satıcı önyükleme üstbilgisini okumasını, yeniden görüntülenmesini ve yeni görüntüyü flaş etmesini ister.

Tam çekin vendor_boot resim, komut fetch:vendor_boot fastboot protokolü ve fastbootd bu uygulamaya olmadığını Android 12. Not protokolün fastbootd uygulanması hem eklendi ama bootloader kendisi olmayabilir. OEM ekleyebilir fetch:vendor_boot protokolün kendi bootloader uygulanmasına komutu. Ancak, komut önyükleyici modunda tanınmıyorsa, o zaman tek tek satıcı ram disklerinin önyükleyici modunda yanıp sönmesi satıcı tarafından desteklenen bir seçenek değildir.

Önyükleyici değişiklikleri

Komutlar getvar:max-fetch-size ve fetch:name uygulanır fastbootd . Önyükleyicide yanıp sönen satıcı ramdisklerini desteklemek için bu iki komutu uygulamanız gerekir.

Fastbootd değişiklikleri

getvar:max-fetch-size benzer max-download-size . Cihazın bir DATA yanıtında gönderebileceği maksimum boyutu belirtir. Sürücü, bu değerden daha büyük bir boyut getirmemelidir.

fetch:name[:offset[:size]] cihazda kontrollerin yerine getirmekte olup bu dizi. Aşağıdakilerden tüm doğruysa, fetch:name[:offset[:size]] komutu verir verileri:

  • Cihaz, hata ayıklanabilir bir yapı çalıştırıyor.
  • Aygıtın kilidi açıldı (önyükleme durumu turuncu).
  • Getirilen bölme adıdır vendor_boot .
  • size değeri 0 <denk düşen size <= max-fetch-size .

Bu doğrulandıktan sonra, fetch:name[:offset[:size]] bölüm boyutunu verir ve ofset. Aşağıdakilere dikkat et:

  • fetch:name eşdeğerdir fetch:name:0 , eşdeğerdir fetch:name:0:partition_size .
  • fetch:name:offset eşdeğerdir fetch:name:offset:(partition_size - offset)

Bu nedenle, fetch:name[:offset[:size]] = fetch:name:offset:(partition_size - offset)

Zaman offset veya partition_size (veya her ikisi) belirtilmemiş olan, varsayılan değerler için kullanılır, ve bunlar offset 0 ve için size hesaplanan değer partition_size - offset .

  • : Belirtilen boyut belirtilmemiş Ofset size = partition_size - offset
  • Ne belirtilen: Varsayılan değerler hem kullanılan size = partition_size - 0.

Örneğin, fetch:foo tüm getirir foo ofset 0'dan bölümü.

Sürücü değişiklikleri

Sürücü değişikliklerini uygulamak için fastboot aracına komutlar eklendi. Her tabloda, tam tanımı ile bağlantılıdır Fastboot komutları .

  • fastboot fetch vendor_boot out.img

    • Aramalar getvar max-fetch-size öbek boyutunu belirlemek için.
    • Aramalar getvar partition-size:vendor_boot[_a] tüm bölümün boyutunu belirlemek için.
    • Aramalar fastboot fetch vendor_boot[_a]:offset:size , her parça için. (Parça boyutu daha büyüktür vendor_boot boyutu, yani, normal olarak tek bir yığın var.)
    • Birlikte Dikişler verileri için out.img .
  • fastboot flash vendor_boot:default vendor-ramdisk.img

    Bu, flash komutunun özel bir çeşididir. Bu getirir vendor_boot olarak eğer görüntüyü fastboot fetch denirdi.

    • Satıcı çizme başlığı ise sürüm 3 , bu aşağıdakileri yapar:
      • Satıcı ramdiskini verilen görüntüyle değiştirir.
      • Yeni yanıp söner vendor_boot görüntü.
    • Satıcı önyükleme başlığı ise sürüm 4 , bu aşağıdakileri yapar:
      • Verilen görüntü tek bir satıcı ramdisk parçası olacak şekilde belirli bir görüntü ile bütün satıcı ramdisk değiştirir vendor_boot görüntü.
      • Satıcı ramdisk tablosundaki boyutu ve ofseti yeniden hesaplar.
      • Yeni yanıp söner vendor_boot görüntü.
  • fastboot flash vendor_boot:foo vendor-ramdisk.img

    Getirir vendor_boot image sanki fastboot fetch denirdi.

    • Satıcı önyükleme başlığı sürüm 3 ise, bir hata döndürür.
    • Satıcı önyükleme başlığı sürüm 4 ise, aşağıdakileri yapar:

      • Adı ile satıcı ramdiskin parçasını bulur foo . Bulunamazsa veya birden fazla eşleşme varsa bir hata döndürür.
      • Satıcı ramdisk parçasını verilen görüntüyle değiştirir.
      • Satıcı ramdisk tablosundaki her boyutu ve ofseti yeniden hesaplar.
      • Yeni yanıp söner vendor_boot görüntü.

mkbootimg

Adı default Android 12 ve üzeri satıcı ramdiskin parçaları adlandırma için ayrılmıştır. Fastboot iken flash vendor_boot:default semantik aynı kalır, sen gibi Ramdiski parçalarını isim olmamalıdır default .

SELinux değişiklikleri

Bir değişiklik yapıldı fastbootd.te yanıp sönen satıcı ramdiskleri destekleyecek.