Fastboot, bir önyükleyici modülünün ve modunun adıdır. Android 10 ve sonraki sürümlerde, fastboot uygulaması bootloader'dan kullanıcı alanına taşınarak yeniden boyutlandırılabilir bölümler desteklenir. Bu taşıma işlemi, yanıp sönen kodu, yalnızca donanım soyutlama katmanı (HAL) tarafından uygulanan satıcıya özel fastboot bölümleriyle birlikte, bakımı ve testi yapılabilir ortak bir konuma taşımayı sağlar. Ayrıca Android 12 ve sonraki sürümlerde, eklenen bir fastboot komutu aracılığıyla ramdisk'lerin yüklenmesi desteklenir.
Fastboot ve kurtarma modunu birleştirme
Kullanıcı alanı hızlı başlatma ve kurtarma benzer olduğundan bunları tek bir bölüme veya ikiliye birleştirebilirsiniz. Bu, daha az alan kullanma, daha az bölüm oluşturma ve fastboot ile kurtarmanın çekirdeklerini ve kitaplıklarını paylaşma gibi avantajlar sağlar.
Fastbootd, kullanıcı alanı daemon'unun ve modunun adıdır.
fastbootd
'yı desteklemek için önyükleyicinin boot-fastboot
yeni bir önyükleme kontrol bloğu (BCB) komutunu uygulaması gerekir. fastbootd
moduna girmek için önyükleyici, BCB iletisinin komut alanına boot-fastboot
yazar ve BCB'nin recovery
alanını değiştirmez (kesintiye uğrayan kurtarma görevlerinin yeniden başlatılmasını sağlamak için). status
, stage
ve reserved
alanları da değişmeden kalır.
Önyükleyici, BCB komut alanında boot-fastboot
işaretini gördüğünde kurtarma görüntüsünü yükler ve başlatır. Kurtarma daha sonra BCB mesajını ayrıştırır ve fastbootd
moduna geçer.
ADB komutları
Bu bölümde, fastbootd
'yi entegre etmek için kullanılan adb
komutu açıklanmaktadır. Komut, sistem veya kurtarma tarafından yürütülmesine bağlı olarak farklı sonuçlar verir.
Komut | Açıklama |
---|---|
reboot fastboot |
|
Fastboot komutları
Bu bölümde, fastbootd
'ı entegre etmeye yönelik fastboot komutları (mantıksal bölümleri flash'leme ve yönetmeye yönelik yeni komutlar dahil) açıklanmaktadır. Bazı komutlar, önyükleyici veya fastbootd
tarafından yürütülmelerine bağlı olarak farklı sonuçlar verir.
Komut | Açıklama |
---|---|
reboot recovery |
|
reboot fastboot |
fastbootd içine yeniden başlatılır. |
getvar is-userspace |
|
getvar is-logical:<partition> |
Belirtilen bölüm mantıksal bir bölümse yes , aksi takdirde no değerini döndürür.
Mantıksal bölümler, aşağıda listelenen tüm komutları destekler. |
getvar super-partition-name |
Üst bölümün adını döndürür. Süper bölüm bir A/B bölümüyse (genellikle böyle değildir) ad, geçerli yuva sonekini içerir. |
create-logical-partition <partition> <size> |
Belirtilen ad ve boyutta mantıksal bir bölüm oluşturur. Ad, mantıksal bölüm olarak mevcut olmamalıdır. |
delete-logical-partition <partition> |
Belirtilen mantıksal bölümü siler (bölümü etkili bir şekilde temizler). |
resize-logical-partition <partition> <size> |
İçeriğini değiştirmeden mantıksal bölümü yeni boyuta yeniden boyutlandırır. Yeniden boyutlandırma işlemini gerçekleştirmek için yeterli alan yoksa işlem başarısız olur. |
flash <partition> [ <filename> ] |
Bir dosyayı flash bölümüne yazar. Cihazın kilidi açık olmalıdır. |
erase <partition> |
Bir bölümü siler (güvenli silme gerekli değildir). Cihazın kilidi açık 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 hata döndürülür. |
set_active <slot> |
Belirtilen A/B önyükleme yuvasını A/B desteği için yuvalar, birbirinden bağımsız olarak başlatılabilen, yinelenen bölüm kümeleridir. Yuvalar |
reboot |
Cihazı normal şekilde yeniden başlatır. |
reboot-bootloader (veya reboot bootloader ) |
Cihazı bootloader'da yeniden başlatır. |
fastboot fetch vendor_boot <out.img> |
Tedarikçi ramdisk'lerinin yüklenmesini desteklemek için Android 12 ve sonraki sürümlerde kullanın.
Bölümün tamamının boyutunu ve parça boyutunu alır. Her parça için verileri alır, ardından verileri birleştirerek
Ayrıntılı bilgi için |
fastboot flash vendor_boot:default <vendor-ramdisk.img> |
Satıcı ramdisklerinin yanıp sönmesini desteklemek için Android 12 ve sonraki sürümlerde kullanılır. Bu, flash komutunun özel bir varyantıdır.
Ayrıntılı bilgi için |
fastboot flash vendor_boot:<foo> <vendor-ramdisk.img> |
Android 12 ve sonraki sürümlerde, satıcı ramdisk'lerinin yüklenmesini desteklemek için kullanılır.
Ayrıntılı bilgi için |
Fastboot ve bootloader
Bootloader, bootloader
, radio
ve boot/recovery
bölümlerini yükler. Ardından cihaz, fastboot (kullanıcı alanı) modunda başlatılır ve diğer tüm bölümler yüklenir. Önyükleyici aşağıdaki komutları desteklemelidir.
Komut | Açıklama |
---|---|
download |
Resmi flaşa indirir. |
flash recovery <image>/ flash boot <image>/ flash
bootloader <image>/ |
recovery/boot bölümünü ve bootloader'ı flaşlar. |
reboot |
Cihazı yeniden başlatır. |
reboot fastboot |
Fastboot modunda yeniden başlatılır. |
reboot recovery |
Kurtarma modunda yeniden başlatılır. |
getvar |
Kurtarma/önyükleme görüntüsünün yanıp sönmesi için gereken bir bootloader değişkenini alır (örneğin, current-slot ve max-download-size ). |
oem <command> |
OEM tarafından tanımlanan komut. |
Dinamik bölümler
Önyükleyici, dinamik bölümlerin yanıp sönmesine veya silinmesine izin vermemelidir ve bu işlemler denenirse hata döndürmelidir. Sonradan eklenen dinamik bölüm cihazlarında, fastboot aracı (ve önyükleyici), önyükleyici modundayken dinamik bir bölümü doğrudan flaşlamak için zorlama modunu destekler. Örneğin, system
, sonradan eklenen cihazdaki dinamik bir bölümse fastboot --force flash system
komutunun kullanılması, önyükleyicinin (fastbootd
yerine) bölümü flash etmesini sağlar.
Kapalıyken şarj etme
Bir cihaz, kapalı modda şarjı destekliyorsa veya güç uygulandığında otomatik olarak özel bir moda geçiyorsa fastboot oem off-mode-charge 0
komutunun uygulanması bu özel modları atlamalıdır. Böylece cihaz, kullanıcı güç düğmesine basmış gibi başlatılır.
Fastboot 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'lerden gelir ve belgelenmiştir ancak özel bir uygulama gerektirir. OEM'e özgü birçok komut belgelenmemiştir. Fastboot HAL, bu tür komutları işlemek için gerekli OEM komutlarını belirtir. OEM'ler kendi komutlarını da uygulayabilir.
Fastboot HAL'ın tanımı şöyledir:
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
Bir cihazda fastbootd
özelliğini etkinleştirmek için:
fastbootd
öğesinidevice.mk
konumundakiPRODUCT_PACKAGES
öğesine ekleyin:PRODUCT_PACKAGES += fastbootd
.Fastboot HAL, boot control HAL ve health HAL'in kurtarma görüntüsünün bir parçası olarak paketlendiğinden emin olun.
fastbootd
tarafından gerekli olan cihaza özel SEPolicy izinlerini ekleyin. Örneğin,fastbootd
, bölümü flashlamak için cihaza özgü bir bölüme yazma erişimi gerektirir. Ayrıca, fastboot HAL uygulaması için cihaza özel izinler de gerekebilir.
Kullanıcı alanı hızlı başlatma özelliğini doğrulamak için Vendor Test Suite (VTS)'yi çalıştırın.
Flash sağlayıcı ramdiskleri
Android 12 ve sonraki sürümlerde, cihazdan tam vendor_boot
görüntüsünü çeken ek bir fastboot komutuyla ramdisk'lerin yanıp sönmesi desteklenir. Bu komut, ana makine tarafındaki fastboot aracının satıcı önyükleme başlığını okumasını, yeniden görüntü oluşturmasını ve yeni görüntüyü flash'lemesini ister.
Tam vendor_boot
görüntüsünü çekmek için fetch:vendor_boot
komutu, Android 12'de hem fastboot protokolüne hem de protokolün fastbootd uygulamasına eklendi. Fastbootd'nin bunu uyguladığını ancak önyükleyicinin kendisinin uygulamayabileceğini unutmayın. OEM'ler, protokolün önyükleyici uygulamalarına fetch:vendor_boot
komutunu ekleyebilir. Ancak komut, önyükleyici modunda tanınmıyorsa önyükleyici modunda tek tek tedarikçi ramdisk'lerinin yüklenmesi, tedarikçi tarafından desteklenen bir seçenek değildir.
Bootloader değişiklikleri
getvar:max-fetch-size
ve fetch:name
komutları fastbootd
içinde uygulanır. Önyükleyicide satıcı ramdisk'lerinin yanıp sönmesini desteklemek için bu iki komutu uygulamanız gerekir.
Fastbootd değişiklikleri
getvar:max-fetch-size
, max-download-size
ile benzer. Cihazın tek bir DATA yanıtında gönderebileceği maksimum boyutu belirtir. Sürücü, bu değerden büyük bir boyut getirmemelidir.
fetch:name[:offset[:size]]
, cihazda bir dizi kontrol gerçekleştirir. Aşağıdakilerin tümü doğruysa fetch:name[:offset[:size]]
komutu veri döndürür:
- Cihazda hata ayıklanabilir bir derleme çalıştırılıyor.
- Cihazın kilidi açık (başlatma durumu turuncu).
- Getirilen bölüm adı
vendor_boot
. size
değeri 0 <size
<=max-fetch-size
aralığında olmalıdır.
Bunlar doğrulandığında fetch:name[:offset[:size]]
, bölüm boyutunu ve uzaklığını döndürür.
Aşağıdakileri göz önünde bulundurun:
fetch:name
,fetch:name:0
vefetch:name:0:partition_size
değerlerine eş değerdir.fetch:name:offset
,fetch:name:offset:(partition_size - offset)
değerine eş değerdir.
Bu nedenle fetch:name[:offset[:size]]
=
fetch:name:offset:(partition_size - offset)
.
offset
veya partition_size
(ya da her ikisi) belirtilmediğinde varsayılan değerler kullanılır. offset
için bu değer 0, size
için ise partition_size - offset
'ün hesaplanan değeridir.
- Ofset belirtilmiş, boyut belirtilmemiş:
size = partition_size - offset
- İkisi de belirtilmemiş: Her ikisi için de varsayılan değerler kullanılır,
size = partition_size
- 0.
Örneğin, fetch:foo
, 0 ofsetinde foo
bölümünün tamamını getirir.
Sürücü değişiklikleri
Sürücü değişikliklerini uygulamak için fastboot aracına komutlar eklendi. Her biri, Fastboot komutları tablosundaki tam tanımına bağlıdır.
fastboot fetch vendor_boot out.img
- Parça boyutunu belirlemek için yapılan çağrılar
getvar max-fetch-size
. - Tüm bölümün boyutunu belirlemek için
getvar partition-size:vendor_boot[_a]
çağrıları. - Her bir parça için
fastboot fetch vendor_boot[_a]:offset:size
arama. (Parça boyutuvendor_boot
boyutundan büyük olduğundan normalde yalnızca bir parça bulunur.) - Verileri birleştirerek
out.img
.
- Parça boyutunu belirlemek için yapılan çağrılar
fastboot flash vendor_boot:default vendor-ramdisk.img
Bu, flash komutunun özel bir varyantıdır.
vendor_boot
resmi,fastboot fetch
çağrılmış gibi getirir.- Sağlayıcı önyüklemesi, sürüm
3 ise:
- Tedarikçi ramdisk'ini belirtilen resimle değiştirir.
- Yeni
vendor_boot
resmini gösterir.
- Tedarikçi önyükleme başlığı sürüm
4 ise:
- Belirtilen resmi,
vendor_boot
resmindeki tek satıcı ramdisk parçası olacak şekilde tüm satıcı ramdisk'iyle değiştirir. - Tedarikçi ramdisk tablosundaki boyutu ve dengelemeyi yeniden hesaplar.
- Yeni
vendor_boot
resmini gösterir.
- Belirtilen resmi,
- Sağlayıcı önyüklemesi, sürüm
3 ise:
fastboot flash vendor_boot:foo vendor-ramdisk.img
fastboot fetch
çağrılmış gibivendor_boot image
getirilir.- Tedarikçi önyükleme başlığı sürüm 3 ise hata döndürülür.
Satıcı önyükleme başlığı sürüm 4 ise aşağıdakileri yapar:
- Adı
ramdisk_<var><foo></var>
olan satıcı ramdisk parçasını bulur. Bulunamazsa veya birden fazla eşleşme varsa hata döndürür. - Tedarikçi ramdisk parçasını belirtilen resimle değiştirir.
- Tedarikçi ramdisk tablosundaki her boyutu ve dengelemeyi yeniden hesaplar.
- Yeni
vendor_boot
resmini gösterir.
- Adı
<foo> belirtilmezse
ramdisk_
aranır.
mkbootimg
default
adı, Android 12 ve sonraki sürümlerde satıcı ramdisk parçalarını adlandırmak için ayrılmıştır. Fastboot flash vendor_boot:default
semantiği aynı kalsa da ramdisk parçalarınızı adlandırmamalısınız.
default
SELinux değişiklikleri
fastbootd.te
'da, tedarikçi ramdisklerinin yanıp sönmesini desteklemek için değişiklik yapıldı.