Análisis del proceso de inicio de Exynos 4412

  

Cuando hicimos el experimento, grabamos el archivo bin en la tarjeta SD, como el experimento de la lámpara de flujo del ensamblaje anterior.

P: ¿Quién está leyendo estas instrucciones de la tarjeta SD para ejecutar?

A: Es el código que se solidifica en la ROM interna del chip --- se llama iROM, iROM es el preprogramado del fabricante en el chip, sin código fuente.

iROM lee el programa en una ubicación específica en el dispositivo de arranque en la memoria en chip (iRAM) y lo ejecuta. Este programa se llama y lo ejecuta. Este programa se llama BL1 (Bootloader 1), BL1 es proporcionado por Samsung, sin código fuente.

BL1 lee el programa en otra ubicación específica del dispositivo de arranque en la memoria en chip y lo ejecuta. Esto se llama BL2 (Bootloader 2) y es el código fuente que escribimos.

En el programa de flujo de luz de ensamblaje, hicimos el BL2 a través de la herramienta mkbl2. En ese momento, también dimos una explicación detallada. Ejecute el siguiente comando:
./mkbl2 leds_on.bin bl2.bin 14336

< Br>

El proceso de inicio más detallado de iROM y BL1 se muestra en la siguiente figura (extraído de Android_Exynos4412_iROM_Secure_Booting_Guide_Ver.1.00.00.pdf):

(1) iROM: la siguiente figura es el diagrama de flujo de inicio de iROM
iRom Arranque

Como puede verse en la figura anterior, primero cierre el guardián, cierre la interrupción y la MMU, cierre la caché de datos, abra la caché de instrucciones, borre el TLB y luego ingrese el otro núcleo en el modo IDLE, dejando solo CPU0, hay La primera rama de salto, IROM juzga el modo de inicio actual, ya sea arranque en frío o reactivación, si está en modo despierto, luego saltará directamente a BL1, en BL1 juzgaremos si está en modo despierto, si es, saltará directamente Vaya a la función de activación, que generalmente es el controlador de activación del kernel de Linux. Por supuesto, en el modo "bare metal" hay un inicio en frío, la activación del sueño generalmente no es para prestar atención, por supuesto, si su programa "bare metal" necesita respaldar la activación del sueño, debe agregar el código correspondiente.

Continúe el análisis y establezca el espacio de pila de IRQ y modo SVC. En este momento, la dirección de pila es un IRAM interno. Esta pequeña pieza de RAM es la memoria de acceso aleatorio externa de IROM. Sin esta pequeña memoria, IROM no puede. Corriendo El siguiente paso es inicializar las diversas variables utilizadas en IROM, inicializar el segmento de datos de solo lectura, borrar el segmento de datos sin inicializar y exportar algunas funciones principales. Esta función se puede usar en BL1 para obtener el estado actual de reinicio y configurar el reloj del sistema. Frecuencia, obtenga el modo de configuración de pines OM, aquí puede arrancar desde una variedad de periféricos, el modo de arranque específico es el siguiente:
OM seleccione el dispositivo de arranque

Nuestro tutorial completo de todo de metal es de Se inicia la tarjeta SD externa. De acuerdo con el modo de arranque OM, el primer código 8K se copia de la tarjeta SD. Si la copia se realiza correctamente, se verifica la suma de comprobación. Los primeros 16 bytes de BL1 se proporcionan al IROM para identificar la información relacionada con BL1. La información específica es la siguiente: (Este último tutorial
escribiremos un BL1 nosotros mismos, primero disponible con Samsung):
/** bl1 información de encabezado para irom ** 0x0 - bl1 tamaño * 0x4 - reservado (debe ser 0) * 0x8 - verifique la suma * 0xc - reservado (debería ser 0) * /. Word 0x2000.word 0x0.word 0x0.word 0x0

describe primero el tamaño de BL1, luego hay una suma de comprobación de BL1, Entonces, ¿cómo sabemos la suma de comprobación de BL1, este es el compilador Después del archivo binario final, el

creado por el programa mk4412 es simplemente para decir que iROM debe configurar primero el entorno de ejecución del programa (como cerrar el watchdog, apagar la interrupción, cerrar la MMU, configurar la pila, configurar la pila, iniciar el PLL, etc. Luego, de acuerdo con el pin OM para determinar el dispositivo de arranque (NAND Flash /tarjeta SD /otro), lea BL1 desde adentro hacia el iRAM; finalmente, inicie BL1.

(2) BL1: La siguiente figura muestra el proceso de inicio de BL1
B1 Booting

En pocas palabras, también está configurando el entorno de ejecución del programa (interrupción de inicialización, configuración de la pila, etc.); Lea BL2 en iRAM en el dispositivo; finalmente, enciéndalo.


Hay varios problemas que deben resolverse:

1 ¿Dónde puedo almacenar BL1 y BL2 en el dispositivo de arranque?

2¿Cuál es la posición para leer BL1 BL2 a iRAM?

3 ¿Cuál es el tamaño de BL1 y BL2?

4 ¿Cómo garantizar la integridad de los programas BL1 y BL2 (es decir, no hay ningún error al leer el programa)?

Suponiendo que el inicio es una tarjeta SD, como se muestra a continuación (aquí solo se inicia la tarjeta SD): la ubicación de almacenamiento de BL1, BL2 en la tarjeta SD
el almacenamiento de BL1, BL2 en iRam Ubicación

BL1 se encuentra a 512 bytes de la dirección de desplazamiento de la tarjeta SD (es decir, a partir del primer sector, hay un sector reservado al frente, 512 bytes por sector, por qué mantener el primer sector Si un compañero de clase ha estudiado la tabla de particiones de DOS, puede comprender la verdad. El primer sector es el área de configuración de la tabla de particiones. El iROM lee 8K bytes de datos desde esta ubicación y la dirección de iRAM es 0x02021400. En la oficina Entonces BL1 no puede ser más grande que 8K.

IROM calcula la suma de comprobación y, después de verificar el paso y descifra BL1 con éxito, puede saltar a BL1. En este punto, IROM se ha ejecutado por completo y la autoridad se ha entregado a BL1. Explicación complementaria, descifrado BL1 es el modo de cifrado. Requerido solo en el inicio, el inicio en modo no cifrado no requiere descifrado de BL1.

BL2 se encuentra en la dirección de desplazamiento de la tarjeta SD (512 + 8K) bytes. BL1 lee 14K bytes de datos desde esta ubicación y existe en la dirección iRAM 0x02023400. BL2 no puede tener más de (14K – 4) bytes, y los últimos 4 bytes se utilizan para almacenar el código de comparación.
(En la prueba de la lámpara de flujo de ensamblaje, usamos la herramienta mkbl2 para hacer BL2. La función principal de la herramienta mkbl2 es calcular el código de verificación. ).

Si nuestro programa es más grande que (14K – 4) bytes, entonces necesitamos interceptar los bytes (14K – 4) anteriores para hacer BL2 y grabar las palabras de dirección de desplazamiento de la tarjeta SD (512 + 8K). Festival Cuando se inicie el BL2, leerá en la memoria el programa completo almacenado en otra ubicación de la tarjeta SD.

Copyright © Conocimiento de Windows All Rights Reserved