Android 10 ve üzeri, fastboot uygulamasını önyükleyiciden kullanıcı alanına taşıyarak yeniden boyutlandırılabilir bölümleri destekler. Bu yeniden konumlandırma, yanıp sönen kodun, bir donanım soyutlama katmanı (HAL) tarafından uygulanan fastboot'un yalnızca satıcıya özel parçalarıyla bakımı yapılabilir ve test edilebilir ortak bir konuma taşınmasını sağlar. Ayrıca Android 12 ve üzeri, eklenen bir fastboot komutu aracılığıyla ramdisklerin yanıp sönmesini destekler.
Fastboot ve kurtarmanın birleştirilmesi
Kullanıcı alanı fastboot ve kurtarma benzer olduğundan, bunları tek bir bölüm veya ikili dosyada birleştirebilirsiniz. Bu, daha az alan kullanılması, genel olarak daha az bölüme sahip olunması ve hızlı başlatma ile kurtarmanın çekirdek ve kitaplıklarını paylaşması gibi avantajlar sağlar.
fastbootd
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 mesajının komut alanına boot-fastboot
yazar ve BCB'nin recovery
alanını değiştirmeden bırakır (kesilen 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
gördükten sonra kurtarma görüntüsünü yükler ve önyükleme yapar. Recovery daha sonra BCB mesajını ayrıştırır ve fastbootd
moduna geçer.
ADB komutları
Bu bölümde fastbootd
entegrasyonu için adb
komutu açıklanmaktadır. Komutun sistem tarafından mı yoksa kurtarma tarafından mı yürütüldüğüne bağlı olarak farklı sonuçları vardır.
Emretmek | Tanım |
---|---|
reboot fastboot |
|
Hızlı önyükleme komutları
Bu bölümde, mantıksal bölümlerin yanıp sönmesine ve yönetilmesine yönelik yeni komutlar da dahil olmak üzere, fastbootd
entegrasyonuna yönelik fastboot komutları açıklanmaktadır. Bazı komutların bootloader veya fastbootd
tarafından yürütülmesine bağlı olarak farklı sonuçları olur.
Emretmek | Tanım |
---|---|
reboot recovery |
|
reboot fastboot | fastbootd yeniden başlatılır. |
getvar is-userspace |
|
getvar is-logical: <partition> | Belirtilen bölüm mantıksal bir bölümse yes döndürür, no halde hayır değerini döndürür. Mantıksal bölümler aşağıda listelenen komutların tümünü 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 boyuta sahip mantıksal bir bölüm oluşturur. Adın zaten mantıksal bir bölüm olarak mevcut olmaması gerekir. |
delete-logical-partition <partition> | Verilen mantıksal bölümü siler (bölümü etkili bir şekilde siler). |
resize-logical-partition <partition> <size> | Mantıksal bölümü, içeriğini değiştirmeden 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 format desteklenmeyen bir sürümse), bu komut başarısız olur. İsteğe bağlı bir wipe parametresi, birleştirme gerçekleştirmek yerine cihazın meta verilerinin üzerine yazar. |
flash <partition> [ <filename> ] | Bir dosyayı flash bölümüne yazar. Cihaz kilidi açık durumda olmalıdır. |
erase <partition> | Bir bölümü siler (güvenli silme işlemi 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 mevcut değilse bir hata döndürür. |
set_active <slot> | Verilen A/B önyükleme yuvasını A/B desteği için yuvalar, bağımsız olarak önyüklenebilen yinelenen bölüm kümeleridir. Yuvalar |
reboot | Cihazı normal şekilde yeniden başlatır. |
reboot-bootloader (veya reboot bootloader ) | Cihazı önyükleyicide yeniden başlatır. |
fastboot fetch vendor_boot <out.img> | Satıcının ram disklerinin yanıp sönmesini desteklemek için Android 12 ve sonraki sürümlerde kullanın. Tüm bölüm boyutunu ve yığın boyutunu alır. Her parça için veri alır ve ardından verileri Ayrıntılar için bkz. |
fastboot flash vendor_boot:default <vendor-ramdisk.img> | Satıcının ram disklerinin yanıp sönmesini desteklemek için Android 12 ve sonraki sürümlerde kullanın. Bu, flash komutunun özel bir çeşididir. Ayrıntılar için |
fastboot flash vendor_boot: <foo> <vendor-ramdisk.img> | Satıcının ram disklerinin yanıp sönmesini desteklemek için Android 12 ve sonraki sürümlerde kullanın. Ayrıntılar için |
Fastboot ve önyükleyici
Önyükleyici, bootloader
, radio
ve boot/recovery
bölümlerini yanıp söner, ardından aygıt fastboot'a (kullanıcı alanı) önyükleme yapar ve diğer tüm bölümleri yanıp söner. Önyükleyici aşağıdaki komutları desteklemelidir.
Emretmek | Tanım |
---|---|
download | Görüntüyü flash'a indirir. |
flash recovery <image> / flash boot <image> / flash bootloader <image> / | recovery/boot bölümünü ve önyükleyiciyi yanıp söner. |
reboot | Cihazı yeniden başlatır. |
reboot fastboot | Fastboot için yeniden başlatılıyor. |
reboot recovery | Kurtarma için yeniden başlatılır. |
getvar | Kurtarma/önyükleme görüntüsünün yanıp sönmesi için gerekli olan bir önyükleyici 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 vermemeli ve bu işlemler denenirse bir hata döndürmelidir . Sonradan takılan dinamik bölümleme aygıtları için fastboot aracı (ve önyükleyici), önyükleyici modundayken dinamik bir bölümü doğrudan flaşlamak için bir zorlama modunu destekler. Örneğin, system
sonradan takılan aygıtta dinamik bir bölümse, fastboot --force flash system
komutunun kullanılması, önyükleyicinin ( fastbootd
yerine) bölümü flaş etmesini sağlar.
Kapalı mod şarjı
Bir cihaz kapalı mod şarjını destekliyorsa veya güç uygulandığında özel bir modda otomatik olarak başlatılıyorsa, fastboot oem off-mode-charge 0
komutunun uygulanmasının bu özel modları atlaması gerekir; böylece cihaz, kullanıcı düğmeye basmış gibi önyüklenir. Güç düğmesi.
Fastboot OEM HAL
Önyükleyici fastboot'unu tamamen değiştirmek için fastboot'un mevcut tüm fastboot komutlarını işlemesi gerekir. Bu komutların çoğu OEM'lerden gelmektedir ve belgelenmiştir ancak özel bir uygulama gerektirir. OEM'e özgü birçok komut belgelenmemiştir . Bu tür komutları işlemek için fastboot HAL gerekli OEM komutlarını belirtir. OEM'ler ayrıca kendi komutlarını da uygulayabilirler.
Fastboot HAL tanımı şu şekildedir:
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'u etkinleştirme
Bir cihazda fastbootd
etkinleştirmek için:
fastbootd
device.mk
PRODUCT_PACKAGES
dosyasına ekleyin:PRODUCT_PACKAGES += fastbootd
.Fastboot HAL, önyükleme kontrolü HAL ve sistem durumu HAL'nin kurtarma görüntüsünün parçası olarak paketlendiğinden emin olun.
fastbootd
gerektirdiği cihaza özel SEPolicy izinlerini ekleyin. Örneğin,fastbootd
aygıta özel bir bölümün flaşlanması için bu bölüme yazma erişimi gerektirir. Ayrıca fastboot HAL uygulaması cihaza özel izinler de gerektirebilir.
Kullanıcı alanı fastboot'unu doğrulamak için Vendor Test Suite'i (VTS) çalıştırın.
Yanıp sönen satıcı ramdiskleri
Android 12 ve üzeri, bir cihazdan vendor_boot
görüntüsünün tamamını çeken ek bir fastboot komutuyla ramdisklerin yanıp sönmesi için destek sağlar. Komut, ana bilgisayar tarafındaki fastboot aracının satıcının önyükleme başlığını okumasını, yeniden imaj oluşturmasını ve yeni imajı flaşlamasını ister.
vendor_boot
görüntüsünün tamamını çekmek için fetch:vendor_boot
komutu hem fastboot protokolüne hem de Android 12'deki protokolün fastbootd uygulamasına eklendi. Fastbootd'un bunu uyguladığını ancak önyükleyicinin kendisinin bunu yapmayabileceğini unutmayın. OEM'ler, protokolün önyükleyici uygulamasına fetch:vendor_boot
komutunu ekleyebilir. Ancak, komut önyükleyici modunda tanınmazsa, satıcının ramdisklerinin önyükleyici modunda ayrı ayrı yanıp sönmesi, satıcı tarafından desteklenen bir seçenek değildir.
Önyükleyici değişiklikleri
getvar:max-fetch-size
ve fetch:name
fastbootd
uygulanır. Önyükleyicide satıcının ramdisklerinin yanıp sönmesini desteklemek için bu iki komutu uygulamanız gerekir.
Hızlı önyükleme değişiklikleri
getvar:max-fetch-size
max-download-size
benzer. Cihazın bir DATA yanıtında gönderebileceği maksimum boyutu belirtir. Sürücü bu değerden daha büyük bir beden getirmemelidir.
fetch:name[:offset[:size]]
cihazda bir dizi kontrol gerçekleştirir. Aşağıdakilerin tümü doğruysa fetch:name[:offset[:size]]
komutu verileri döndürür:
- Cihaz hata ayıklanabilir bir yapı çalıştırıyor.
- Cihazın kilidi açık (önyükleme durumu turuncu).
- Getirilen bölümün adı
vendor_boot
. -
size
değeri 0 <size
<=max-fetch-size
aralığındadır.
Bunlar doğrulandığında fetch:name[:offset[:size]]
bölümün boyutunu ve uzaklığını döndürür. Aşağıdakilere dikkat et:
-
fetch:name
fetch:name:0
ile eşdeğerdir, bu dafetch:name:0:partition_size
ile eşdeğerdir. -
fetch:name:offset
fetch:name:offset:(partition_size - offset)
ile eşdeğerdir
Bu nedenle fetch:name[:offset[:size]]
= fetch:name:offset:(partition_size - offset)
offset
veya partition_size
(veya her ikisi) belirtilmediğinde varsayılan değerler kullanılır; offset
için 0, size
için ise partition_size - offset
hesaplanan değeridir.
- Uzaklık belirtildi, boyut belirtilmedi:
size = partition_size - offset
- İkisi de belirtilmedi: her ikisi için de kullanılan varsayılan değerler,
size = partition_size
- 0.
Örneğin, fetch:foo
foo
bölümünün tamamını 0 konumunda 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
getvar max-fetch-size
çağırır. - Tüm bölümün boyutunu belirlemek için
getvar partition-size:vendor_boot[_a]
öğesini çağırır. - Her parça için
fastboot fetch vendor_boot[_a]:offset:size
çağırır. (Yığın boyutu,vendor_boot
boyutundan daha büyüktür, dolayısıyla normalde yalnızca bir yığın vardır.) - Verileri
out.img
olarak birleştirir.
- Parça boyutunu belirlemek için
fastboot flash vendor_boot:default vendor-ramdisk.img
Bu, flash komutunun özel bir çeşididir.
fastboot fetch
çağrılmış gibivendor_boot
görüntüsünü getirir.- Satıcı önyüklemesi başlık sürüm 3 ise aşağıdakileri yapar:
- Satıcının ramdiskini verilen görüntüyle değiştirir.
- Yeni
vendor_boot
görüntüsünü yanıp söner.
- Satıcı önyükleme başlığı sürüm 4 ise aşağıdakileri yapar:
- Satıcının ramdisk'inin tamamını verilen görüntüyle değiştirir, böylece verilen görüntü,
vendor_boot
görüntüsündeki tek satıcı ramdisk parçası olur. - Satıcının ramdisk tablosundaki boyutu ve uzaklığı yeniden hesaplar.
- Yeni
vendor_boot
görüntüsünü yanıp söner.
- Satıcının ramdisk'inin tamamını verilen görüntüyle değiştirir, böylece verilen görüntü,
- Satıcı önyüklemesi başlık sürüm 3 ise aşağıdakileri yapar:
fastboot flash vendor_boot:foo vendor-ramdisk.img
fastboot fetch
çağrılmış gibivendor_boot image
getirir.- Satıcının ö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:
-
foo
adındaki satıcının ramdisk parçasını bulur. Bulunamazsa veya birden fazla eşleşme varsa hata döndürür. - Satıcının ramdisk parçasını verilen görüntüyle değiştirir.
- Satıcının ramdisk tablosundaki her boyutu ve uzaklığı yeniden hesaplar.
- Yeni
vendor_boot
görüntüsünü yanıp söner.
-
mkbootimg
default
ad, Android 12 ve sonraki sürümlerde satıcının 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ı default
olarak adlandırmamalısınız .
SELinux değişiklikleri
fastbootd.te
satıcının ramdisklerinin yanıp sönmesini desteklemek için bir değişiklik yapıldı.