Red de conocimiento informático - Problemas con los teléfonos móviles - Cómo llama uboot a la interfaz del controladoru-boot es un cargador de arranque de uso común en sistemas integrados. El cargador de arranque es un pequeño programa que se ejecuta antes de que se ejecute el sistema operativo. A través de él, podemos inicializar los dispositivos de hardware. una tabla de mapeo del espacio de memoria para establecer un entorno de software y hardware adecuado y prepararse para la llamada final al kernel del sistema operativo. Cargador de arranque La tarea principal del cargador de arranque es leer la imagen del kernel desde el disco duro a la RAM y luego saltar al punto de entrada del kernel para ejecutarlo, es decir, comenzar a iniciar el sistema operativo. El sistema generalmente comienza la ejecución desde la dirección 0x00000000 cuando se enciende o se reinicia, y el programa Boot Loader del sistema generalmente está organizado en esta dirección. Estructura del directorio u-boot: 1. Los archivos de configuración relacionados con la placa de desarrollo se almacenan en la placa y cada placa de desarrollo existe en forma de subdirectorio 2. Los comandos que admiten la línea u-boot se implementan en Com; carpeta, y cada comando corresponde a un archivo; 3. Los directorios relacionados con arquitecturas de CPU específicas se almacenan en la CPU, y cada arquitectura de CPU corresponde a un subdirectorio 4. Doc es el directorio de documentos y también hay un subdirectorio; Doc es el directorio de documentación, que contiene muy buena documentación para u-boot; 5. Drivers contiene varios controladores de dispositivos compatibles con u-boot 6. Fs es el sistema de archivos compatible, el más utilizado es el sistema de archivos JFFS2; 7 La carpeta Incluir es el archivo de encabezado utilizado por u-boot, así como los archivos compilados, archivos de configuración del sistema y archivos de soporte del sistema de archivos compatibles con varias plataformas de hardware. Archivos de configuración y archivos de soporte del sistema de archivos; 8. Net es el código relacionado con el protocolo de red, que se implementa a través del protocolo bootp, el protocolo TFTP y el sistema de archivos NFS. 9. Tooles es la herramienta para generar U-boot. Los directorios más importantes son los directorios /board, /cpu, /drivers e /include. Si desea trasplantar u-boot en una determinada plataforma, debe realizar un análisis en profundidad de estos directorios. Proceso de inicio de u-boot: el punto de entrada para el inicio del sistema. Dado que ahora vamos a analizar el proceso de inicio de u-boot, primero debemos averiguar qué códigos se implementan primero mediante u-boot y qué tareas se completan primero. Por otro lado, la IMAGEN ejecutable debe tener un punto de entrada, y sólo puede haber un punto de entrada global, por lo que se debe indicar al compilador dónde está este punto de entrada. De esto podemos encontrar que el punto de entrada del programa se especifica en /board /lpc2210/u-boot.lds, donde ENTRY(_start) indica que el programa comienza a ejecutarse desde _start y apunta a la CPU /arm7tdmi/start. .o archivo. Dado que utilizamos la arquitectura de CPU ARM7TDMI, la primera instrucción después del reinicio proviene de la dirección 0x00000000, por lo que asignamos Flash a esta dirección para que la CPU ejecute primero el programa u-boot después de encender el sistema: 1. CPU propia -inicialización: Incluyendo la inicialización de MMU, caché, sistema de reloj, controlador SDRAM, etc.

Cómo llama uboot a la interfaz del controladoru-boot es un cargador de arranque de uso común en sistemas integrados. El cargador de arranque es un pequeño programa que se ejecuta antes de que se ejecute el sistema operativo. A través de él, podemos inicializar los dispositivos de hardware. una tabla de mapeo del espacio de memoria para establecer un entorno de software y hardware adecuado y prepararse para la llamada final al kernel del sistema operativo. Cargador de arranque La tarea principal del cargador de arranque es leer la imagen del kernel desde el disco duro a la RAM y luego saltar al punto de entrada del kernel para ejecutarlo, es decir, comenzar a iniciar el sistema operativo. El sistema generalmente comienza la ejecución desde la dirección 0x00000000 cuando se enciende o se reinicia, y el programa Boot Loader del sistema generalmente está organizado en esta dirección. Estructura del directorio u-boot: 1. Los archivos de configuración relacionados con la placa de desarrollo se almacenan en la placa y cada placa de desarrollo existe en forma de subdirectorio 2. Los comandos que admiten la línea u-boot se implementan en Com; carpeta, y cada comando corresponde a un archivo; 3. Los directorios relacionados con arquitecturas de CPU específicas se almacenan en la CPU, y cada arquitectura de CPU corresponde a un subdirectorio 4. Doc es el directorio de documentos y también hay un subdirectorio; Doc es el directorio de documentación, que contiene muy buena documentación para u-boot; 5. Drivers contiene varios controladores de dispositivos compatibles con u-boot 6. Fs es el sistema de archivos compatible, el más utilizado es el sistema de archivos JFFS2; 7 La carpeta Incluir es el archivo de encabezado utilizado por u-boot, así como los archivos compilados, archivos de configuración del sistema y archivos de soporte del sistema de archivos compatibles con varias plataformas de hardware. Archivos de configuración y archivos de soporte del sistema de archivos; 8. Net es el código relacionado con el protocolo de red, que se implementa a través del protocolo bootp, el protocolo TFTP y el sistema de archivos NFS. 9. Tooles es la herramienta para generar U-boot. Los directorios más importantes son los directorios /board, /cpu, /drivers e /include. Si desea trasplantar u-boot en una determinada plataforma, debe realizar un análisis en profundidad de estos directorios. Proceso de inicio de u-boot: el punto de entrada para el inicio del sistema. Dado que ahora vamos a analizar el proceso de inicio de u-boot, primero debemos averiguar qué códigos se implementan primero mediante u-boot y qué tareas se completan primero. Por otro lado, la IMAGEN ejecutable debe tener un punto de entrada, y sólo puede haber un punto de entrada global, por lo que se debe indicar al compilador dónde está este punto de entrada. De esto podemos encontrar que el punto de entrada del programa se especifica en /board /lpc2210/u-boot.lds, donde ENTRY(_start) indica que el programa comienza a ejecutarse desde _start y apunta a la CPU /arm7tdmi/start. .o archivo. Dado que utilizamos la arquitectura de CPU ARM7TDMI, la primera instrucción después del reinicio proviene de la dirección 0x00000000, por lo que asignamos Flash a esta dirección para que la CPU ejecute primero el programa u-boot después de encender el sistema: 1. CPU propia -inicialización: Incluyendo la inicialización de MMU, caché, sistema de reloj, controlador SDRAM, etc.

2. Reubicación: muévase de la memoria no volátil a la RAM; 3. Asigne espacio de pila y configure el puntero de la pila; 4. Borre el segmento de datos BSS cero 5. Salte a la función de entrada de la segunda etapa start_armboot(); está escrito en lenguaje C. Las tareas principales son: 1. Asignar espacio de almacenamiento para los datos privados internos de U-boot y borrarlo 2. Llamar a las funciones definidas en la matriz de punteros de función init_sequence en secuencia para realizar una serie de inicializaciones; Si el sistema admite NOR Si el sistema admite NOR Flash, llame a flash_init () y display_flash_config () para inicializar y mostrar la información del dispositivo detectado. 4. Si el sistema admite LCD o VFD, llame a lcd_setmem () o vfd_setmem () para calcular el; tamaño del Framebuffer y luego asigne espacio de almacenamiento para el Framebuffer después del segmento de datos BSS. Después de que el segmento de datos BSS asigna espacio para Framebuffer, inicialice gd-gt; use fb_base como la dirección inicial de Framebuffer; 5. Llame a mem_malloc_init () para inicializar y asignar el sistema de asignación de almacenamiento (similar al montón en lenguaje C) 6. Si el sistema admite NAND Flash, llame a nand_init () para la inicialización; 7.7 Si el sistema admite DataFlash, llame a AT91F_DataflashInit() y dataflash_print_info() para la inicialización y muestre la información del dispositivo detectado. las variables de entorno se reubican de Flash a RAM; 9. Llame a env_relocate() para reubicar las variables de entorno de Flash a RAM. Llame a env_relocate() para mover las variables de entorno de Flash a RAM; 10. Si el sistema admite VFD, llame a drv_vfd_init() para inicializar el dispositivo VFD. 10.10. Lea la dirección IP y la dirección MAC de las variables de entorno e inicialice gd-gt; bd-gt; bi_ip_addr y gd-gt; bd-gt; bi_enetaddr; 11. Llame a jumptable_init () para inicializar y mostrar la información del dispositivo detectado. Llame a jumptable_init () para inicializar la tabla de salto. La tabla de salto está en global_data y su propósito específico no está claro; 12. Llame a console_init_r () para realizar la inicialización de la consola. 13. Si es necesario, llame a misc_init_r () para realizar inicializaciones diversas; Llame a enable_interrupts () para activar las interrupciones; 15. Si es necesario, llame a board_late_init () para la inicialización posterior a la placa. Para AT91SAM9260EK, es principalmente la inicialización de Ethernet. ingrese el comando Bucle para ejecutar los comandos ingresados ​​por el usuario. Esta parte tiene relativamente pocos cambios y todos se centran en diferentes partes. Esta parte permanece relativamente sin cambios. Hemos cambiado algunas funciones de inicialización para diferentes placas y cambiamos el proceso de inicialización configurando algunas definiciones de macro. Por lo tanto, estos códigos no necesitan modificarse durante el proceso de trasplante y también son archivos relativamente libres de errores. . Primero se define una matriz de punteros de función al comienzo del archivo. A través de esta matriz, el programa realiza una inicialización regular en secuencia a través de un bucle y luego inicializa algunos dispositivos específicos a través de algunas definiciones de macro.