Construcción de plataforma Linux integrada y desarrollo de software de cargador de arranque
Después de la compilación, Xinwei debe escribirse en el área de inicio, que está relacionada con la placa experimental. Deberías comprobar la información tú mismo.
El proceso de inicio de s3c2440 vivi:
El inicio comienza desde el archivo vivi/arch/S3C2440/head.s.
1. Este artículo ha completado el siguiente trabajo:
(1) Apagar el mecanismo de vigilancia
(2) Deshabilitar todas las interrupciones
( 3) Inicialice el reloj del sistema.
(4) Inicializar el puerto serie
(5) Inicializar el registro de control relacionado con la memoria flash nand.
(6) Copie vivi, copie SDram y finalmente apunte la PC a la RAM.
(7) Configurar la pila
(8) Llamar a una función llamada main. Esta función está escrita en C.
2. La función main() está en vivi/init/main.c.
(1) Después de que el programa salta aquí normalmente, primero imprime cierta información de entrada.
(2) Llame a varias funciones de inicialización
& lt1 & gt; en reset_handler()vivi/lib/reset_handler.c.
(Principalmente hice el trabajo de borrar la memoria)
& lt2 & gtBoard_init() (no encontrado)
& lt3 & gtMem _ map _ init ( ) vivi/arch/mmu.c.
(Si se utiliza nand flash, aquí se verá linealizado; caché vacío; I & ampD tlb no válidos)
En mmu_init vivi/arch/mmu.c
(Inicializar caché, cargar puntero de tabla de páginas, habilitar mmu, etc.)
& lt4 & gtHeap_init inicializa el montón vivi/lib/heap.c.
Parece haber un espacio malloc aquí, pero no lo entiendo.
<5>En MTD_dev_init vivi/driver/MTD/MTD core.c.
Mtd_init() está en vivi/driver/MTD/maps/s3c 2440_flash.c Según el flash utilizado, se realiza la inicialización del control de CPU correspondiente para asignar memoria.
add_command(& Flash_cmd) registra el comando de usuario Flash.
& lt6 & gtinit_priv_data()vivi/lib/priv_data/rw.
Leer los parámetros básicos de arranque.
& lt7 & gtMisc()(no encontrado)
init_builtin_cmds()vivi/lib/command.
(Comandos básicos para usuarios registrados, incluidos boot, bon, load, help, etc.)
& lt8 & gtBoot_or_vivi() está en main.c, esperando la entrada del usuario. Si hay entrada en vivi_shell pero no hay entrada, Linux se iniciará después del tiempo de espera.
Este es el final de main.
Parece que hay una cosa que no está escrita y es cómo empezó vivi a usar linux. Este es vivi ejecutando el comando de arranque y llamando a la función command_boot() en vivi/lib/boot_kernel.c, para que Linux se inicie.