Imagen dual en familias de productos basadas en ARM diseñadas por EnGenius
I. Introducción
El cargador de arranque realiza una inicialización de hardware de bajo nivel, como procesador, memoria, ethernet, flash, PCI, UART, etc. Después de establecer las configuraciones del sistema, el cargador de arranque carga el kernel y pasa la información de inicio, incluidas las velocidades del puerto serie, las velocidades de reloj, la tabla de particiones y otros datos de configuración del hardware.
Cuando se carga el kernel, configura el hardware, asigna la memoria, carga los controladores, inserta los módulos, monta el sistema de archivos raíz y ejecuta los procesos de preinicio. El paso final es generar el proceso de inicio, el primer proceso de espacio de usuario. Los tres tipos de OpenWRT basado en ARM son solo NOR, solo NAND y NOR más NAND.
II - Procedimiento
I. NOR solo flash
1. Cargador de arranque: cuando se enciende, el cargador de arranque verificará la marca de imagen dual, "active_fw"
1.1. Agregue particiones adicionales a mtdparts: kernel_1 y rootfs_1
1.2. Cargue el kernel de destino en la memoria
1.3. Asigne una partición raíz activa del sistema de archivos configurando los parámetros de arranque.
1.3.1. Si "active_fw = 0" => root = rootfs
1.3.2. Si "active_fw = 1" => root = rootfs_1
1.4. Si el kernel de arranque falla, intercambie la partición de firmware activa
2. Kernel Space: analiza los bootargs asignados por el gestor de arranque y monta el sistema de archivos raíz.
3. Espacio de usuario: cuando se actualiza el sistema
3.1. Si "active_fw = 1" =>
3.1.1. flash kernel y rootfs
3.1.2. establecer active_fw = 0
3.1.3. reiniciar
3.2. Si "active_fw = 0" =>
3.2.1. flash kernel_1 y rootfs_1
3.2.2. establecer active_fw = 0
3.2.3. reiniciar
II .. Solo flash NAND
El procedimiento es el mismo que el de 'Solo flash NOR'.
III .. NOR + NAND
1. Cargador de arranque: cuando se enciende, el cargador de arranque verificará la marca de imagen dual, "active_fw"
1.1. Agregue dos particiones NAND llamadas rootfs y fs2
1.1.1 Si "active_fw = 0" =>
La mitad superior de NAND se llama rootfs y la otra se llama fs2.
1.1.2 Si "active_fw = 1" =>
La mitad superior de NAND se llama fs2 y la otra se llama rootfs.
1.2. Cargue el kernel de destino en la memoria
1.3. Si el kernel de arranque falla, intercambie la partición de firmware activa
2. Espacio del Kernel: Bajo la estructura NOR + NAND, siempre usamos la partición llamada rootfs como el sistema de archivos raíz.
3. Espacio de usuario: cuando se actualiza el sistema
El procedimiento es el mismo que el de 'Solo flash NOR'.
lll - Implementar
Particiones MTD: dos partes iguales para dos firmes
II. Bandera de imagen dual: establezca una partición de firmware activa
III. Actualización del sistema: actualice siempre la partición de firmware inactiva
IV. Recuperación automática: si el uboot encuentra que el arranque falla desde esta partición de firmware, active la otra partición de firmware.
A. NOR solo flash
1. Cree dos particiones de firmware
1.1. modificar nor-partition.xml para decirle al gestor de arranque la información de las nuevas particiones
1.2. modificar sys_flash_map.mk para indicarle a la tabla de particiones mtd del kernel
2. Bandera de imagen dual
2.1. Modifique board.c para agregar "active_fw" al entorno predeterminado de uboot
2.2. Modifique cmd_bootipq.c para intercambiar los argumentos de arranque (root = rootfs o root = rootfs_1).
3. Actualización del sistema
3.1. marque "active_fw" y actualice el firmware de destino partició[email protected]
3.1.1. "Active_fw = 1" => kernel flash y rootfs
3.1.2. "Active_fw = 0" => flash kernel_1 y rootfs_1
4. Recuperación automática
4.1. Modifique board.c para asegurarse de que uboot capture el valor de retorno de la función de arranque
B. Solo flash NAND
El procedimiento es el mismo que el de 'Solo flash NOR'.
C. NOR + NAND
1. Cree dos particiones de firmware
1.1. Modifique bootipq.c para agregar particiones llamadas fs2
1.2. Modifique bootm.c para pasar la información de la partición atags. al kernel
2. Bandera de imagen dual
2.1. agregue "active_fw" al entorno predeterminado de uboot
3. Actualización del sistema
3.1. marque "active_fw" y actualice el firmware de destino partició[email protected]
3.1.1. Flash de la partición fs2
4. Recuperación automática
4.1. Modifique board.c para asegurarse de que uboot capture el valor de retorno de la función de arranque