Resumen,Resumen

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:

  1. El cargador de arranque se carga primero e inicializa la memoria.

  2. Si se utilizan actualizaciones A/B , el cargador de arranque determina la ranura actual para arrancar.

  3. El gestor de arranque determina si se debe iniciar el modo de recuperación (consulte Actualizaciones compatibles ).

  4. El gestor de arranque carga la imagen de arranque, que contiene las imágenes del kernel y ramdisk.

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

  6. El cargador de arranque carga init , ya sea desde la partición ramdisk (en dispositivos más antiguos) o desde la partición del sistema (en dispositivos más nuevos).

  7. Desde la partición del sistema, init inicia y monta todas las demás particiones (como vendor , oem y odm ) 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 : desde CONFIG_CMDLINE

  • boot.img : de cmdline (para compensaciones y tamaños, consulte system/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 .