Android 10 i nowsze wersje obsługują partycje z możliwością zmiany rozmiaru partycji przeniesienie implementacji szybkiego rozruchu z programu rozruchowego do przestrzeni użytkownika. Ten relokacja umożliwia przeniesienie kodu Flash do kodu, który można utrzymywać i testować. w wspólnej lokalizacji, z elementami szybkiego rozruchu specyficznymi dla dostawcy zaimplementowanymi 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
Szybki rozruch i przywracanie w przestrzeni użytkownika są podobne, więc można je połączyć w jeden partycji lub pliku binarnego. Zapewnia to takie korzyści, jak mniejsze miejsce, i mniejsza liczba partycji, a szybki rozruch i regeneracja jądro i biblioteki.
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
także pozostają niezmienione.
Program rozruchowy wczytuje się i uruchamia obraz przywracania po sprawdzeniu,
boot-fastboot
w polu polecenia BCB. Przywracanie analizuje komunikat BCB.
i przełączy się w tryb fastbootd
.
Polecenia ADB
W tej sekcji opisano polecenie adb
służące 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 Mode
W tej sekcji opisano polecenia szybkiego rozruchu służące do integracji fastbootd
,
w tym nowe polecenia do flashowania i zarządzania partycjami logicznymi. Niektóre
dają różne rezultaty w zależności od tego, czy zostały wykonane przez
programu rozruchowego lub programu fastbootd
.
Polecenie | Opis |
---|---|
reboot recovery |
|
reboot fastboot |
Uruchamia się ponownie w: fastbootd . |
getvar is-userspace |
|
getvar is-logical:<partition> |
Zwraca yes , jeśli dana partycja jest partycją logiczną,
W przeciwnym razie: no .
Partycje logiczne obsługują wszystkie polecenia wymienione poniżej. |
getvar super-partition-name |
Zwraca nazwę superpartycji. Nazwa zawiera bieżący boks jeśli superpartycja jest partycją A/B (zwykle nie jest). |
create-logical-partition <partition> <size> |
Tworzy partycję logiczną o podanej nazwie i rozmiarze. Nazwa nie może już istnieje jako partycja logiczna. |
delete-logical-partition <partition> |
Usuwa daną partycję logiczną (efektywnie ją czyści). |
resize-logical-partition <partition> <size> |
Zmienia rozmiar partycji logicznej do nowego rozmiaru bez zmiany jej zawartości. Błąd, jeśli nie ma wystarczającej ilości miejsca na zmianę rozmiaru. |
update-super <partition> |
Scala zmiany w metadanych partycji nadrzędnej. Jeśli scalenie jest niemożliwe
(na przykład format na urządzeniu to nieobsługiwana wersja), to
nie udało się wykonać polecenia. Opcjonalny parametr wipe zastępuje
metadanych, a nie przez ich scalanie. |
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 znajdować się w bez blokady. |
getvar <variable> | all |
Wyświetla zmienną programu rozruchowego lub wszystkie zmienne. Jeśli zmienna nie istnieją, zwraca błąd. |
set_active <slot> |
Ustawia dane gniazdo rozruchowe A/B na 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 |
Urządzenie uruchamia się ponownie w zwykły sposób. |
reboot-bootloader (lub reboot bootloader ) |
Uruchamia urządzenie ponownie w programie rozruchowym. |
fastboot fetch vendor_boot <out.img> |
Używaj w Androidzie 12 i nowszych, aby: i obsługują flashowanie dysków ramdystów 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:
|
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. Program rozruchowy powinien obsługiwać poniższe polecenia.
Polecenie | Opis |
---|---|
download |
Pobiera obraz do Flasha. |
flash recovery <image>/ flash boot <image>/ flash
bootloader <image>/ |
Miga partycję i program rozruchowy recovery/boot . |
reboot |
Ponownie uruchamia urządzenie. |
reboot fastboot |
Uruchamia się ponownie w trybie fastboot. |
reboot recovery |
Uruchamia się ponownie w celu przywracania. |
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. Do modernizacji
dynamicznych urządzeniach partycji, narzędzie do szybkiego rozruchu (oraz program rozruchowy) obsługuje
w celu bezpośredniego flashowania partycji dynamicznej w trybie programu rozruchowego. Dla:
na przykład jeśli system
jest dynamiczną partycją na modernizowanym urządzeniu,
użycie polecenia fastboot --force flash system
włącza program rozruchowy
(zamiast fastbootd
), aby uruchomić 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.
Fastbootowy kod HAL OEM
Aby całkowicie zastąpić szybki rozruch programu rozruchowego, musi on obsłużyć wszystkie istniejące polecenia szybkiego rozruchu. Wiele z tych poleceń pochodzi od producenta OEM i jest udokumentowane, ale wymagają niestandardowej implementacji. Wiele poleceń specyficznych dla OEM nie występuje udokumentowane. Aby obsługiwać takie polecenia, HAL fastboot określa wymagane Polecenia OEM. OEM może też wdrażać własne polecenia.
Definicja interfejsu HAL szybkiego rozruchu jest taka:
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łącz szybki rozruch
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 wszelkie uprawnienia SEPolicy właściwe dla urządzenia wymagane przez system
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 dysków RAM przy użyciu dodanego polecenia szybkiego rozruchu, które pobiera pełny
vendor_boot
obraz z urządzenia. Polecenie powoduje uruchomienie szybkiego rozruchu po stronie hosta
odczytuje nagłówek rozruchowy dostawcy, reinstaluj i flashuje 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 nie
będzie działać, ale nie sam program rozruchowy. OEM może dodawać
fetch:vendor_boot
do implementacji programu rozruchowego
protokołu. Jeśli jednak polecenie nie zostanie rozpoznane w trybie programu rozruchowego,
flashowanie dysków RAM poszczególnych dostawców w trybie programu rozruchowego nie jest obsługiwane przez dostawcę.
.
Zmiany programu rozruchowego
Polecenia getvar:max-fetch-size
i fetch:name
są zaimplementowane 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
. Wskazuje on
maksymalny rozmiar, jaki urządzenie może wysłać w ramach jednej odpowiedzi DATA. Kierowca nie może
pobierze rozmiar większy od tej wartości.
fetch:name[:offset[:size]]
wykonuje serię testów na urządzeniu. Jeśli wszystkie
z tych warunków jest spełniony, polecenie fetch:name[:offset[:size]]
zwraca dane:
- Na urządzeniu działa kompilacja możliwa do debugowania.
- Urządzenie jest odblokowane (stan rozruchu pomarańczowy).
- Nazwa pobranej 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
jest odpowiednikiem funkcjifetch: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
.
- Określono przesunięcie, rozmiar nieokreślony:
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, aby wdrożyć zmiany sterowników. 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. - Wywołania
fastboot fetch vendor_boot[_a]:offset:size
za każdą 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 rozruch dostawcy to wersja nagłówka
3,
wykona te działania:
- Zastępuje dysk Ramdisk dostawcy danym obrazem.
- Wyświetla nowy obraz
vendor_boot
.
- Jeśli nagłówek rozruchowy dostawcy to version
4,
wykona te działania:
- Zastępuje cały RAMdysk dostawcy danym obrazem, tak aby
staje się jedynym fragmentem pamięci RAM dostawcy w
Obraz:
vendor_boot
. - Ponownie oblicza rozmiar i odsunięcie w tabeli pamięci RAM dostawcy.
- Wyświetla nowy obraz
vendor_boot
.
- Zastępuje cały RAMdysk dostawcy danym obrazem, tak aby
staje się jedynym fragmentem pamięci RAM dostawcy w
Obraz:
- Jeśli rozruch dostawcy to wersja nagłówka
3,
wykona te działania:
fastboot flash vendor_boot:foo vendor-ramdisk.img
Pobiera element
vendor_boot image
, tak jakby został wywołanyfastboot fetch
.- Jeśli nagłówek rozruchowy dostawcy to wersja 3, zwraca błąd.
Jeśli nagłówek rozruchowy dostawcy to wersja 4, wykonuje on te działania:
- Znajduje fragment pamięci RAM dostawcy o nazwie
foo
. Jeśli nie zostanie znaleziona lub w przypadku kilku dopasowań zwraca błąd. - Zastępuje fragment RAMdysku dostawcy danym obrazem.
- Ponownie oblicza każdy rozmiar i odsunięcie w tabeli pamięci RAM dostawcy.
- Wyświetla nowy obraz
vendor_boot
.
- Znajduje fragment pamięci RAM dostawcy o nazwie
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.