¿Buenas herramientas o métodos para comprender la estructura del cargador de arranque?

9

Recientemente he descubierto la causa de un error desagradable en el que he estado trabajando con un SBC Atmel AT91SAM9G20 ejecutando U-boot , un gestor de arranque de código abierto. El núcleo del problema era que U-boot esperaba que el hardware estuviera configurado de manera diferente a como lo había construido, por lo que algunos de los registros del dispositivo estaban mal configurados.

Ahora que he resuelto el problema, necesito modificar U-boot para configurar los registros correctamente. Puedo hacer esto a ciegas agregando algunas líneas de código al final del programa, pero eso es complicado.

Esto me lleva a mi pregunta: ¿cómo puedo averiguar cómo funciona U-boot de manera más eficiente que comenzar en main () y leer todas las rutas de código posibles en todos los archivos? He intentado grepping en los archivos y mirar el código cerca de identificadores relevantes. Esto ha resultado ineficaz; Parece que la mayoría del código son controladores para subsistemas que no me importan. De hecho, entiendo cómo funciona bastante bien el gestor de arranque, pero espero que exista un método mejor que mi ingenuo enfoque.

    
pregunta pingswept

2 respuestas

6

Hay varias herramientas / estrategias que podrían ayudar:

  • Mejores herramientas para dar sentido al código fuente:

  • Análisis de tiempo de ejecución

    • Recorra las secciones interesantes con un depurador y analice lo que está pasando
    • Use las funciones de instrumentación de gcc para llamar una buena parte de la entrada / salida de cada función. p.ej. enlace
  • Escribiendo tu propio mini cargador de arranque

    • A menudo encuentro que la mejor manera de entender algo es recrearlo yo mismo

Desafortunadamente, no hay una receta mágica que funcione para todo.

    
respondido por el Toby Jaffey
2

¿Cómo lo configuraste para compilar para el AT91?

El árbol de códigos parece estar diseñado de tal manera que cualquier elemento específico de la arquitectura se encuentre en el árbol 'arch / (cpu class) / (cpu type) / ...'. Encontré el código AT91 debajo de arch / arm / cpu / arm926ejs / at91 ... ¿la variante específica que desea modificar no se encuentra allí? No hay mucho que ver en ese directorio, especialmente porque casi la mitad de los archivos son específicos de la variante AT91.

Lo siento si esto es obvio ... pero no mencionaste haber revisado esto.

Todavía no había mirado el árbol de códigos de uBoot, pero tu publicación me asustó al hacerlo. Un proyecto mío de copia de seguridad implica el uso de uBoot y Linux en un PCB iMX233 personalizado. Estoy muy interesado en obtener este tipo de comentarios sobre qué tan bien se aísla la arquitectura de uBoot y las cosas específicas de cada variante y qué gran dolor va a ser.

    
respondido por el darron

Lea otras preguntas en las etiquetas