Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.
Se usó la API de Cloud Translation para traducir esta página.
Switch to English

Mover Fastboot al espacio de usuario

Android 10 y versiones posteriores admiten particiones de tamaño variable al reubicar la implementación de fastboot del cargador de arranque al espacio de usuario. Esta reubicación permite mover el código de actualización a una ubicación común comprobable y mantenible con solo las partes específicas del proveedor de fastboot implementadas por una capa de abstracción de hardware (HAL).

Unificando el arranque rápido y la recuperación

Debido a que el inicio rápido y la recuperación del espacio de usuario son similares, puede fusionarlos en una partición / binario. Las ventajas incluyen menos uso de espacio y menos particiones en general, así como la capacidad de arranque rápido y recuperación para compartir su kernel y bibliotecas.

Para admitir fastbootd , el cargador de arranque debe implementar un nuevo comando de bloque de control de arranque (BCB) de boot-fastboot . Para ingresar fastbootd modo fastbootd , el cargador de arranque debe escribir boot-fastboot en el campo de comando del mensaje de BCB y dejar el campo de recovery de BCB sin cambios (para permitir el reinicio de las tareas de recuperación interrumpidas). Los campos de status , stage y reserved tampoco se modifican. Se espera que el cargador de arranque se cargue y arranque en la imagen de recuperación al ver boot-fastboot en el comando BCB. La recuperación luego analiza el mensaje BCB y cambia al modo fastbootd .

Comandos ADB

Esta sección describe el comando adb para integrar fastbootd . El comando tiene un comportamiento diferente dependiendo de si el sistema o la recuperación ejecutan el comando.

Mando Descripción
reboot fastboot
  • Reinicia en fastbootd (sistema).
  • Ingresa a fastbootd directamente sin reiniciar (recuperación).

Comandos de Fastboot

Esta sección describe los comandos fastboot para integrar fastbootd , incluidos los nuevos comandos para flashear y administrar particiones lógicas. Algunos comandos tienen un comportamiento diferente dependiendo de si el cargador de arranque o fastbootd ejecuta el comando.

Mando Descripción
reboot recovery
  • Reinicia en recuperación (gestor de arranque).
  • Ingresa a la recuperación directamente sin reiniciar ( fastbootd ).
reboot fastboot Reinicia en fastbootd .
getvar is-userspace
  • Devuelve yes ( fastbootd ).
  • Devuelve no (gestor de arranque).
getvar is-logical:<partition> Devuelve yes si la partición dada es una partición lógica, no caso contrario. Las particiones lógicas admiten todos los comandos que se enumeran a continuación.
getvar super-partition-name Devuelve el nombre de la superpartición. El nombre incluye el sufijo de la ranura actual si la superpartición es una partición A / B (normalmente no lo es).
create-logical-partition <partition> <size> Crea una partición lógica con el nombre y tamaño dados. El nombre no debe existir como partición lógica.
delete-logical-partition <partition> Elimina la partición lógica dada (limpiando efectivamente la partición).
resize-logical-partition <partition> <size> Cambia el tamaño de la partición lógica al nuevo tamaño sin cambiar su contenido. Falla si no hay suficiente espacio disponible para realizar el cambio de tamaño.
update-super <partition> Fusiona cambios en los metadatos de la superpartición. Si no es posible una combinación (por ejemplo, el formato del dispositivo es una versión no compatible), este comando falla. Un parámetro de wipe opcional sobrescribe los metadatos del dispositivo en lugar de realizar una combinación.
flash <partition> [ <filename> ] Escribe un archivo en una partición flash. El dispositivo debe estar en estado desbloqueado.
erase <partition> Borra una partición (no es necesario para borrar de forma segura). El dispositivo debe estar en estado desbloqueado.
getvar <variable> | all Muestra una variable del cargador de arranque o todas las variables. Si la variable no existe, devuelve un error.
set_active <slot>

Establece la ranura de arranque A / B dada como active . En el siguiente intento de arranque, el sistema arranca desde la ranura especificada.

Para la compatibilidad con A / B, las ranuras son conjuntos duplicados de particiones que se pueden iniciar de forma independiente. Las ranuras se denominan a , b , etc. y se diferencian agregando los sufijos _a , _b , etc. al nombre de la partición.

reboot Reinicia el dispositivo normalmente.
reboot-bootloader (o reboot bootloader ) Reinicia el dispositivo en el cargador de arranque.

Fastboot y cargador de arranque

El cargador de arranque muestra el bootloader , la radio y boot/recovery particiones de boot/recovery , después de lo cual el dispositivo arranca en fastboot (espacio de usuario) y muestra todas las demás particiones. El cargador de arranque debe admitir los siguientes comandos.

Mando Descripción
download Descarga la imagen a flash.
flash recovery <image>/ flash boot <image>/ flash bootloader <image>/ Parpadea la partición de recovery/boot y el cargador de arranque.
reboot Reinicia el dispositivo.
reboot fastboot Reinicia para fastboot.
reboot recovery Reinicia para recuperarse.
getvar Obtiene una variable del cargador de arranque que se requiere para flashear la imagen de recuperación / arranque (por ejemplo, current-slot y max-download-size ).
oem <command> Comando definido por OEM.

Particiones dinámicas

El cargador de arranque no debe permitir el flasheo o el borrado de particiones dinámicas y debe devolver un error si se intentan estas operaciones. Para los dispositivos de partición dinámica modernizados, la herramienta fastboot (y el cargador de arranque) admite un modo forzado para actualizar directamente una partición dinámica mientras está en el modo de cargador de arranque. Por ejemplo, si el system es una partición dinámica en el dispositivo fastboot --force flash system , usar fastboot --force flash system permite que el cargador de arranque fastbootd la partición en lugar de fastbootd .

Carga en modo apagado

Si un dispositivo admite la carga en modo apagado o se inicia automáticamente en un modo especial cuando se aplica energía, el fastboot oem off-mode-charge 0 debe omitir estos modos especiales y el dispositivo debe iniciarse como si el usuario hubiera presionado el botón de encendido.

Fastboot OEM HAL

Para reemplazar completamente el fastboot del cargador de arranque, fastboot debe manejar todos los comandos fastboot existentes. Muchos de estos comandos son de OEM y están documentados, pero requieren una implementación personalizada (muchos comandos también son específicos de OEM y no están documentados). Para manejar dichos comandos, fastboot HAL especifica los comandos OEM requeridos y permite que los OEM implementen sus propios comandos.

La definición de fastboot HAL es la siguiente:

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);

};

Habilitando fastbootd

Para habilitar fastbootd en un dispositivo:

  1. Agregue fastbootd a PRODUCT_PACKAGES en device.mk : PRODUCT_PACKAGES += fastbootd .

  2. Asegúrese de que fastboot HAL, boot control HAL y health HAL estén empaquetados como parte de la imagen de recuperación.

  3. Agregue cualquier permiso SEPolicy específico del dispositivo requerido por fastbootd . Por ejemplo, fastbootd requiere acceso de escritura a una partición específica del dispositivo para fastbootd esa partición. Además, la implementación de fastboot HAL también puede requerir permisos específicos del dispositivo.

Para validar el inicio rápido del espacio de usuario, ejecute Vendor Test Suite (VTS) .