Un cargador de arranque es una imagen propiedad del proveedor responsable de abrir el kernel en un dispositivo. Protege el estado del dispositivo y es responsable de inicializar el entorno de ejecución de confianza y vincular su raíz de confianza. El gestor de arranque también verifica la integridad de las particiones de boot
y recovery
antes de mover la ejecución al kernel y muestra advertencias de estado de arranque .
Operaciones de arranque
Para iniciar el arranque, el gestor de arranque puede mostrar directamente una nueva imagen en una partición adecuada o usar la recovery
para iniciar el proceso de actualización utilizado para una actualización inalámbrica (OTA). Algunos fabricantes de dispositivos crean cargadores de arranque de varias partes y luego los combinan en un solo archivo bootloader.img
; en tiempo de flash, el gestor de arranque extrae y actualiza todos los gestores de arranque individuales.
Ejemplo de flujo de cargador de arranque:
El cargador de arranque se carga primero e inicializa la memoria.
Si se utilizan actualizaciones A/B , el cargador de arranque determina la ranura actual para arrancar.
El gestor de arranque determina si se debe iniciar el modo de recuperación (consulte Actualizaciones compatibles ).
El gestor de arranque carga la imagen de arranque, que contiene las imágenes del kernel y ramdisk.
El gestor de arranque carga el kernel en la memoria como un binario comprimido autoejecutable. Luego, el kernel se descomprime y comienza a ejecutarse en la memoria.
El cargador de arranque carga
init
, ya sea desde la particiónramdisk
(en dispositivos más antiguos) o desde la partición del sistema (en dispositivos más nuevos).Desde la partición del sistema,
init
inicia y monta todas las demás particiones (comovendor
,oem
yodm
) y luego comienza a ejecutar el código para iniciar el dispositivo.
Línea de comando del núcleo
Concatene la línea de comando del kernel desde las siguientes ubicaciones:
Línea de comando del cargador de arranque: conjunto de parámetros estáticos y dinámicos determinados por el cargador de arranque
Árbol de dispositivos: desde el nodo elegido/bootargs
defconfig
: desdeCONFIG_CMDLINE
boot.img
: de cmdline (para compensaciones y tamaños, consultesystem/core/mkbootimg/bootimg.h
Un motivo de reinicio o apagado canónico que cumpla con el Documento de definición de compatibilidad de Android según lo determinado por el circuito integrado de administración de energía (PMIC), otros recursos de hardware y los mensajes de argumentos mágicos de reinicio (
LINUX_REBOOT_CMD_RESTART2
). La sintaxis es:androidboot.bootreason=reason
Compatibilidad con árboles de dispositivos y superposiciones de árboles de dispositivos
El cargador de arranque puede admitir diferentes configuraciones identificando la revisión del producto/hardware del dispositivo y luego cargando el conjunto correcto de superposiciones del árbol de dispositivos.
Compatibilidad con la aleatorización del diseño del espacio de direcciones del kernel
Para admitir la aleatorización de la dirección virtual en la que se carga la imagen del kernel (habilitada por la configuración del kernel RANDOMIZE_BASE
), el cargador de arranque debe proporcionar entropía al pasar un valor u64 aleatorio en el nodo del árbol de dispositivos /chosen/kaslr-seed
.
Soporte para arranque verificado
Para obtener detalles sobre el uso del gestor de arranque para implementar el arranque verificado, consulte Verificación del arranque .