Google is committed to advancing racial equity for Black communities. See how.
Questa pagina è stata tradotta dall'API Cloud Translation.
Switch to English

Spostamento di Fastboot nello spazio utente

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
  • Riavvia in fastbootd (sistema).
  • Entra in fastbootd direttamente senza un riavvio (ripristino).

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
  • Riavvia in ripristino (bootloader).
  • Entra nel ripristino direttamente senza un riavvio ( fastbootd ).
reboot fastboot Riavvia in fastbootd .
getvar is-userspace
  • Restituisce yes ( fastbootd ).
  • Restituisce no (bootloader).
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 active . Al successivo tentativo di avvio, il sistema si avvia dallo slot specificato.

Per il supporto A / B, gli slot sono set duplicati di partizioni che possono essere avviati indipendentemente. Gli slot sono denominati a , b , ecc. E differenziati aggiungendo i suffissi _a , _b , ecc. Al nome della partizione.

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:

  1. Aggiungi fastbootd a PRODUCT_PACKAGES in device.mk : PRODUCT_PACKAGES += fastbootd .

  2. 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.

  3. 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) .