Android 10 e versioni successive supportano le partizioni ridimensionabili spostando l'implementazione di avvio rapido dal bootloader allo spazio utente. Questo riposizionamento consente di spostare il codice lampeggiante in una posizione comune gestibile e verificabile con solo le parti di fastboot specifiche del fornitore implementate da un livello di astrazione hardware (HAL).
Unificazione di avvio rapido e ripristino
Poiché l'avvio rapido e il ripristino dello spazio utente sono simili, è possibile unirli in un'unica partizione / binario. I vantaggi includono meno utilizzo di spazio e meno partizioni in generale, nonché la possibilità di avvio rapido e ripristino per condividere il kernel e le librerie.
Per supportare fastbootd
, il bootloader deve implementare un nuovo comando BCB (boot control block) di boot-fastboot
. Per entrare in modalità fastbootd
, bootloader dovrebbe scrivere boot-fastboot
nel campo di comando del messaggio BCB e lasciare invariato il campo di recovery
di BCB (per abilitare il riavvio delle attività di ripristino interrotte). Anche lo status
, la stage
e i campi reserved
rimangono invariati. Il bootloader dovrebbe caricare e avviarsi nell'immagine di ripristino dopo aver visto boot-fastboot
nel comando BCB. Il ripristino quindi analizza il messaggio BCB e passa alla modalità fastbootd
.
Comandi ADB
Questa sezione descrive il comando adb
per l'integrazione di fastbootd
. Il comando ha un comportamento diverso a seconda che il sistema o il ripristino eseguano il comando.
Comando | Descrizione |
---|---|
reboot fastboot |
|
Comandi Fastboot
Questa sezione descrive i comandi fastboot per l'integrazione di fastbootd
, inclusi nuovi comandi per il flashing e la gestione delle partizioni logiche. Alcuni comandi hanno un comportamento diverso a seconda che bootloader o fastbootd
eseguano il comando.
Comando | Descrizione |
---|---|
reboot recovery |
|
reboot fastboot | Riavvia in fastbootd . |
getvar is-userspace |
|
getvar is-logical:<partition> | Restituisce yes se la partizione data è una partizione logica, no altrimenti. Le partizioni logiche supportano tutti i comandi elencati di seguito. |
getvar super-partition-name | Restituisce il nome della super partizione. Il nome include il suffisso dello slot corrente se la super partizione è una partizione A / B (di solito non lo è). |
create-logical-partition <partition> <size> | Crea una partizione logica con il nome e la dimensione specificati. Il nome non deve esistere già come partizione logica. |
delete-logical-partition <partition> | Elimina la partizione logica data (cancellando efficacemente la partizione). |
resize-logical-partition <partition> <size> | Ridimensiona la partizione logica alla nuova dimensione senza modificarne il contenuto. Non riesce se non è disponibile spazio sufficiente per eseguire il ridimensionamento. |
update-super <partition> | Unisce le modifiche ai metadati della super partizione. Se un'unione non è possibile (ad esempio, il formato sul dispositivo è una versione non supportata), questo comando non riesce. Un parametro di wipe opzionale sovrascrive i metadati del dispositivo anziché eseguire un'unione. |
flash <partition> [ <filename> ] | Scrive un file su una partizione flash. Il dispositivo deve essere in stato sbloccato. |
erase <partition> | Cancella una partizione (non è richiesta la cancellazione sicura). Il dispositivo deve essere in stato sbloccato. |
getvar <variable> | all | Visualizza una variabile del bootloader o tutte le variabili. Se la variabile non esiste, restituisce un errore. |
set_active <slot> | Imposta lo slot di avvio A / B specificato come Per il supporto A / B, gli slot sono set duplicati di partizioni che possono essere avviati indipendentemente. Gli slot sono denominati |
reboot | Riavvia normalmente il dispositivo. |
reboot-bootloader (o reboot bootloader ) | Riavvia il dispositivo nel bootloader. |
Fastboot e bootloader
Il bootloader esegue il bootloader
del bootloader
, della radio
e delle partizioni di boot/recovery
, dopodiché il dispositivo si avvia in fastboot (spazio utente) e lampeggia tutte le altre partizioni. Il bootloader dovrebbe supportare i seguenti comandi.
Comando | Descrizione |
---|---|
download | Scarica l'immagine in flash. |
flash recovery <image>/ flash boot <image>/ flash bootloader <image>/ | Lampeggia la partizione di recovery/boot e il bootloader. |
reboot | Riavvia il dispositivo. |
reboot fastboot | Riavvia per l'avvio rapido. |
reboot recovery | Riavvia per ripristinare. |
getvar | Ottiene una variabile del bootloader necessaria per il flashing dell'immagine di ripristino / avvio (ad esempio, current-slot e dimensione max-download-size ). |
oem <command> | Comando definito dall'OEM. |
Partizioni dinamiche
Il bootloader non deve consentire il flashing o la cancellazione di partizioni dinamiche e deve restituire un errore se si tentano queste operazioni. Per i dispositivi di partizione dinamica adattati, lo strumento fastboot (e bootloader) supporta una modalità forzata per eseguire direttamente il flashing di una partizione dinamica mentre è in modalità bootloader. Ad esempio, se il system
è una partizione dinamica sul dispositivo retrofittato, l'utilizzo di fastboot --force flash system
consente al bootloader di eseguire il flashing della partizione invece di fastbootd
.
Ricarica in modalità off
Se un dispositivo supporta la ricarica in modalità off o altrimenti si avvia automaticamente in una modalità speciale quando viene applicata l'alimentazione, il comando fastboot oem off-mode-charge 0
dovrebbe bypassare queste modalità speciali e il dispositivo dovrebbe avviarsi come se l'utente avesse premuto il pulsante di accensione.
Fastboot OEM HAL
Per sostituire completamente il bootloader fastboot, fastboot deve gestire tutti i comandi fastboot esistenti. Molti di questi comandi provengono da OEM e sono documentati ma richiedono un'implementazione personalizzata (molti comandi sono anche specifici dell'OEM e non documentati). Per gestire tali comandi, l'HAL di avvio rapido specifica i comandi OEM richiesti e consente agli OEM di implementare i propri comandi.
La definizione di fastboot HAL è la seguente:
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 oemCmdArgs 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);
};
Abilitazione di fastbootd
Per abilitare l' fastbootd
rapido su un dispositivo:
Aggiungi
fastbootd
aPRODUCT_PACKAGES
indevice.mk
:PRODUCT_PACKAGES += fastbootd
.Assicurati che l'HAL di avvio rapido, il controllo di avvio HAL e l'HAL di integrità siano inclusi in un pacchetto come parte dell'immagine di ripristino.
Aggiungi eventuali autorizzazioni SEPolicy specifiche del dispositivo richieste da
fastbootd
. Ad esempio,fastbootd
richiede l'accesso in scrittura a una partizione specifica del dispositivo per eseguire il flashing di quella partizione. Inoltre, l'implementazione HAL di avvio rapido potrebbe richiedere autorizzazioni specifiche del dispositivo.
Per convalidare l'avvio rapido dello spazio utente, eseguire Vendor Test Suite (VTS) .