Fastboot to nazwa i tryb programu rozruchowego. Android 10 lub nowszy obsługuje partycje z możliwością zmiany rozmiaru, przenosząc implementację fastboot z program rozruchowy do przestrzeni użytkownika. Ten relokacja umożliwia przeniesienie migającego kodu do kodu, który można utrzymywać i testować. w wspólnej lokalizacji, z użyciem wyłącznie określonych przez dostawcę części szybkiego rozruchu zaimplementowanych przez warstwa abstrakcji sprzętowej (HAL). Oprócz tego Android 12 i nowszych obsługują flashowanie dysków RAM przy użyciu dodanego polecenia fastboot.
Połącz tryb szybkiego rozruchu i przywracania
Ponieważ fastboot i odzyskiwanie w przestrzeni użytkownika są podobne, możesz je scalić w jedną partycję lub binarne. Daje to takie korzyści jak mniejsze zużycie miejsca, mniej partycji i wspólne korzystanie przez fastboot i recovery z jądra i bibliotek.
Fastbootd to nazwa demona i trybu w przestrzeni użytkownika.
Aby umożliwić obsługę fastbootd
, program rozruchowy musi wdrożyć nowy blok sterujący rozruchu
(BCB) dowód osobisty boot-fastboot
. Aby włączyć tryb fastbootd
, program rozruchowy
zapisuje boot-fastboot
w polu polecenia wiadomości BCB i pozostawia pole
Nie zmieniono recovery
pola BCB (aby umożliwić ponowne uruchamianie każdego przerwanego przywracania)
zadania). Pola status
, stage
i reserved
również pozostają bez zmian.
Po wykryciu boot-fastboot
w polu polecenia BCB bootloader wczytuje się i uruchamia obraz odzyskiwania. Następnie odzyskiwanie analizuje wiadomość BCB i przełącza się w tryb fastbootd
.
Polecenia ADB
W tej sekcji opisaliśmy komendę adb
służącą do integracji fastbootd
.
daje różne wyniki w zależności od tego, czy zostało wykonane przez system
przez odzyskiwanie konta.
Polecenie | Opis |
---|---|
reboot fastboot |
|
Polecenia Fastboot
W tej sekcji opisano polecenia fastboot służące do integracji fastbootd
, w tym nowe polecenia do flashowania i zarządzania partycjami logicznymi. Niektóre
komendy dają różne wyniki w zależności od tego, czy zostały wykonane przez
bootloadera czy przez fastbootd
.
Polecenie | Opis |
---|---|
reboot recovery |
|
reboot fastboot |
Uruchom ponownie fastbootd . |
getvar is-userspace |
|
getvar is-logical:<partition> |
Zwraca yes , jeśli dana partycja jest partycją logiczną, a w przeciwnym razie zwraca no .
Partycje logiczne obsługują wszystkie polecenia wymienione poniżej. |
getvar super-partition-name |
Zwraca nazwę superpartycji. Nazwa zawiera podwójny sufiks, jeśli superpartycja jest partycją A/B (zazwyczaj tak nie jest). |
create-logical-partition <partition> <size> |
Tworzy partycję logiczną o określonej nazwie i rozmiarze. Nazwa nie może już występować jako partycja logiczna. |
delete-logical-partition <partition> |
Usuwa daną partycję logiczną (efektywnie ją czyści). |
resize-logical-partition <partition> <size> |
Zmienia rozmiar partycji logicznej na nowy, nie zmieniając jej zawartości. Nie powiedzie się, jeśli nie ma wystarczającej ilości miejsca na zmianę rozmiaru. |
update-super <partition> |
Łączy zmiany w metadanych super partycji. Jeśli nie można scalić plików (na przykład format na urządzeniu jest nieobsługiwaną wersją), ta komenda zakończy się niepowodzeniem. Opcjonalny parametr wipe zastępuje metadane urządzenia, a nie wykonuje scalania. |
flash <partition> [ <filename> ] |
Zapisuje plik na partycji Flash. Urządzenie musi być odblokowane. |
erase <partition> |
Wymazuje partycję (nie jest to wymagane w ramach bezpiecznego wymazywania). Urządzenie musi być odblokowane. |
getvar <variable> | all |
Wyświetla zmienną bootloadera lub wszystkie zmienne. Jeśli zmienna nie istnieją, zwraca błąd. |
set_active <slot> |
Ustawia dany slot uruchamiania A/B jako Dla obsługi A/B przedziały to zduplikowane zestawy partycji, które można uruchomić
niezależnie od siebie. Przedziały mają nazwy |
reboot |
Uruchom ponownie urządzenie. |
reboot-bootloader (lub reboot bootloader ) |
Uruchom ponownie urządzenie w trybie bootloadera. |
fastboot fetch vendor_boot <out.img> |
Używaj w Androidzie 12 i nowszych, aby obsługiwać flashowanie z ramdysk dostawcy.
Pobiera cały rozmiar partycji i rozmiar fragmentu. Pobiera dane dla każdego fragmentu,
a następnie łączy dane w
Więcej informacji: |
fastboot flash vendor_boot:default <vendor-ramdisk.img> |
Używaj w Androidzie 12 i nowszych wersjach, aby umożliwić błyskawiczne flashowanie plików ramdystw dostawcy. Jest to specjalny wariant polecenia flash. Wykonuje funkcję obrazu
Więcej informacji:
|
fastboot flash vendor_boot:<foo> <vendor-ramdisk.img> |
Używaj w Androidzie 12 i nowszych do:
zawierają też obsługę flashowania dysków Ramdystów dostawcy. Pobiera obraz Więcej informacji znajdziesz w sekcji |
Fastboot i program rozruchowy
Program rozruchowy miga: bootloader
, radio
i boot/recovery
partycji, po czym urządzenie uruchamia się w trybie fastboot (przestrzeń użytkownika) i miga
wszystkich innych partycji. Bootloader powinien obsługiwać te polecenia.
Polecenie | Opis |
---|---|
download |
Pobiera obraz do flasha. |
flash recovery <image>/ flash boot <image>/ flash
bootloader <image>/ |
Flashes recovery/boot partition and bootloader. |
reboot |
Uruchom ponownie urządzenie. |
reboot fastboot |
Uruchom ponownie w trybie fastboot. |
reboot recovery |
Uruchom ponownie w trybie odzyskiwania. |
getvar |
Pobiera zmienną programu rozruchowego, która jest wymagana do flashowania odtwarzania/uruchamiania
obraz (np. current-slot i
max-download-size ). |
oem <command> |
Polecenie zdefiniowane przez OEM. |
Partycje dynamiczne
Program rozruchowy nie może zezwalać na flashowanie ani usuwanie partycji dynamicznych
i muszą zwrócić błąd, jeśli zostanie podjęta próba tych operacji. W przypadku urządzeń z dynamiczną partycją, które zostały zmodernizowane, narzędzie fastboot (i bootloader) obsługuje tryb wymuszania, aby bezpośrednio zaflashować dynamiczną partycję w trybie bootloadera. Jeśli na przykład system
to dynamiczna partycja na urządzeniu z dodatkowym oprogramowaniem, użycie polecenia fastboot --force flash system
spowoduje, że bootloader (zamiast fastbootd
) sflashuje partycję.
Ładowanie w trybie wyłączonym
Jeśli urządzenie obsługuje ładowanie w trybie wyłączonym lub w inny sposób włącza się automatycznie
po podłączeniu zasilania, implementacja
Polecenie fastboot oem off-mode-charge 0
musi
omijać te tryby specjalne, dzięki czemu urządzenie uruchomi się, jakby użytkownik naciskał
przycisk zasilania.
Fastboot OEM HAL
Aby całkowicie zastąpić fastboot, fastboot musi obsługiwać wszystkie istniejące polecenia fastboot. Wiele z tych poleceń pochodzi od producenta OEM i jest udokumentowane, ale wymagają niestandardowej implementacji. Wiele poleceń dla OEM nie jest zdokumentowanych. Do obsługi takich poleceń interfejs HAL fastboot określa wymagane Polecenia OEM. Producenci OEM mogą też wdrażać własne polecenia.
Definicja interfejsu Fastboot HAL:
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);
};
Włączanie fastbootd
Aby włączyć funkcję fastbootd
na urządzeniu:
Dodaj konto
fastbootd
do grupyPRODUCT_PACKAGES
w:device.mk
:PRODUCT_PACKAGES += fastbootd
.Sprawdź, czy interfejsy HAL do szybkiego rozruchu, HAL kontroli rozruchu i HAL kontroli stanu są spakowane jako część obrazu odzyskiwania.
Dodaj uprawnienia SEPolicy wymagane przez
fastbootd
. Dla: np.fastbootd
wymaga uprawnień do zapisu na partycji określonej dla urządzenia, aby i Flasha partycję. Dodatkowo implementacja technologii HAL szybkiego rozruchu może wymagają uprawnień dla poszczególnych urządzeń.
Aby sprawdzić szybki rozruch przestrzeni użytkownika, uruchom pakiet Vendor Test Suite (VTS).
Dysk twardy dostawcy Flash
Android 12 i nowsze wersje obsługują flashowanie pamięci RAM za pomocą polecenia fastboot, które pobiera pełny obraz vendor_boot
z urządzenia. To polecenie powoduje, że narzędzie fastboot po stronie hosta odczytuje nagłówek rozruchu dostawcy, ponownie utworzy obraz i sflashuje nowy obraz.
Aby pobrać pełny obraz vendor_boot
, dodano polecenie fetch:vendor_boot
z protokołem szybkiego rozruchu i implementacją protokołu
na Androidzie 12. Pamiętaj, że fastbootd implementuje tę funkcję, ale sam bootloader może tego nie robić. OEM może dodawać
fetch:vendor_boot
do implementacji programu rozruchowego
protokołu. Jeśli jednak polecenie nie zostanie rozpoznane w trybie bootloadera, flashowanie poszczególnych dysków RAM dostawcy w trybie bootloadera nie jest obsługiwane przez dostawcę.
Zmiany programu rozruchowego
Polecenia getvar:max-fetch-size
i fetch:name
są wdrażane w fastbootd
. Aby obsługiwać w programie rozruchowym flashowanie plików ramdystw dostawcy, musisz
zaimplementuj te 2 polecenia.
Zmiany w trybie Fastbootd
getvar:max-fetch-size
jest podobny do max-download-size
. Określa maksymalny rozmiar, jaki urządzenie może wysłać w jednej odpowiedzi DATA. Sterownik nie może pobrać rozmiaru większego niż ta wartość.
fetch:name[:offset[:size]]
przeprowadza na urządzeniu serię kontroli. Jeśli wszystkie
z tych warunków jest spełniony, polecenie fetch:name[:offset[:size]]
zwraca dane:
- Urządzenie działa w wersji umożliwiającej debugowanie.
- Urządzenie jest odblokowane (pomarańczowy stan uruchamiania).
- Wybrana nazwa partycji to
vendor_boot
. - Wartość
size
mieści się w zakresie 0 <size
<=max-fetch-size
.
Po zweryfikowaniu fetch:name[:offset[:size]]
zwraca rozmiar partycji.
i przesunięcie.
Uwaga:
fetch:name
jest odpowiednikiem funkcjifetch:name:0
, która jest odpowiednikiem funkcjifetch:name:0:partition_size
fetch:name:offset
to tyle samo cofetch:name:offset:(partition_size - offset)
Dlatego fetch:name[:offset[:size]]
= fetch:name:offset:(partition_size - offset)
.
Jeśli nie określono właściwości offset
lub partition_size
(albo obu), w parametrze
używane są wartości domyślne, które dla offset
to 0, a dla size
to
obliczona wartość partition_size - offset
.
- Podana wartość przesunięcia, nieokreślony rozmiar:
size = partition_size - offset
- Nie określono: wartości domyślne są używane w obu przypadkach (
size = partition_size
– 0).
Na przykład funkcja fetch:foo
pobiera całą partycję foo
z przesunięciem 0.
Zmiany sterowników
Do narzędzia fastboot dodano polecenia, które umożliwiają wprowadzanie zmian w sterownikach. Każdy z nich to znajdziesz w tabeli szybkiego rozruchu. .
fastboot fetch vendor_boot out.img
- Wywołuje funkcję
getvar max-fetch-size
, aby określić rozmiar fragmentu. - Wywołuje funkcję
getvar partition-size:vendor_boot[_a]
, aby określić rozmiar całej partycji. - Połączenia
fastboot fetch vendor_boot[_a]:offset:size
dla każdego fragmentu. (Rozmiar fragmentu jest większy niż rozmiarvendor_boot
, więc zwykle wystarczy tylko jeden fragment). - Łączy dane razem do
out.img
.
- Wywołuje funkcję
fastboot flash vendor_boot:default vendor-ramdisk.img
Jest to specjalny wariant polecenia Flash. Pobiera Obraz
vendor_boot
, tak jakby został wywołanyfastboot fetch
.- Jeśli boot dostawcy jest w wersji 3, wykonuje on te czynności:
- Zastępuje pamięć RAM dostawcy podanym obrazem.
- Wyświetla nowy obraz
vendor_boot
.
- Jeśli nagłówek bootowania dostawcy ma wersję
4, to:
- Zastępuje cały obraz dostawcy w pamięci RAM obrazem, dzięki czemu dany obraz staje się jedynym fragmentem obrazu dostawcy w pamięci RAM.
- Ponownie oblicza rozmiar i przesunięcie w tabeli ramdisk dostawcy.
- Błyska nowy obraz
vendor_boot
.
- Jeśli boot dostawcy jest w wersji 3, wykonuje on te czynności:
fastboot flash vendor_boot:foo vendor-ramdisk.img
Pobiera wartość
vendor_boot image
, tak jakby wywołano funkcjęfastboot fetch
.- Jeśli nagłówek rozruchowy dostawcy to wersja 3, zwraca błąd.
Jeśli nagłówek dostawcy w bootloaderze ma wersję 4, wykonuje te czynności:
- Znajduje fragment pliku ramdisk dostawcy o nazwie
ramdisk_<var><foo></var>
. Jeśli nie ma ich lub wiele dopasowań, zwraca błąd. - Zastępuje fragment RAMdysku dostawcy danym obrazem.
- Ponownie oblicza każdy rozmiar i przesunięcie w tabeli dostawcy ramdisk.
- Błyska nowy obraz
vendor_boot
.
- Znajduje fragment pliku ramdisk dostawcy o nazwie
Jeśli <foo> nie jest określony, próbuje znaleźć
ramdisk_
.
mkbootimg
Nazwa default
jest zarezerwowana do nadawania nazw fragmentom Ramdysków dostawcy w
Androida 12 lub nowszego, Podczas uruchamiania szybkiego uruchamiania flash vendor_boot:default
semantyka jest taka sama, więc nie możesz nazywać fragmentów ramdysk
default
Zmiany w SELinux
Zmiana została wprowadzona w
fastbootd.te
pozwalają na flashowanie
dysków ramdystów dostawcy.