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

9

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

Ahora que he descubierto el problema, necesito ajustar 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 desordenado.

Esto me lleva a mi pregunta: ¿cómo puedo averiguar cómo U-boot funciona de manera más eficiente que comenzar en main () y leer todas las rutas de código posibles en todos los archivos? He intentado hurgar 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 el cargador de arranque bastante bien por ahora, pero espero que exista un método mejor que mi enfoque ingenuo.

pingswept
fuente
¿Has intentado preguntar en la lista de correo de desarrolladores uboot?
sybreon

Respuestas:

6

Hay varias herramientas / estrategias que pueden ayudar:

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

  • Análisis de tiempo de ejecución

    • Pase por secciones interesantes con un depurador y analice lo que está sucediendo
    • Utilice las funciones de instrumentación de gcc para llamar a una buena parte de la entrada / salida de cada función p.ej. http://ndevilla.free.fr/etrace/
  • Escribiendo tu propio mini gestor 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.

Toby Jaffey
fuente
@Runtime Analysis: no es tan viable en un sistema integrado separado, particularmente cuando no hay un SO subyacente ejecutándose al mismo tiempo, por ejemplo, un gestor de arranque, que es este.
Connor Wolf
Todavía puede pasar con un depurador como sugiere Joby. Dependiendo de la complejidad, puede o no ser útil.
Nick T
Cscope es el tipo de cosas que estaba imaginando. Esperaba algo un poco más brillante, pero es un buen comienzo. Gracias.
pingswept
2

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

El árbol de código parece estar diseñado de tal manera que cualquier material 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 está buscando alterar no se encuentra allí? No hay mucho que revisar en ese directorio, especialmente porque casi la mitad de los archivos son específicos de la variante AT91 individual.

Lo siento si esto es obvio ... pero no mencionaste verificar esto.

Todavía no había mirado el árbol de códigos de uBoot, pero tu publicación me asustó. Un proyecto mío de último momento implica eventualmente usar uBoot y Linux en una PCB iMX233 personalizada. Estoy muy interesado en obtener este tipo de comentarios sobre qué tan bien está aislada la arquitectura de uBoot y las cosas específicas de las variantes y cuán grande será el dolor.

Darron
fuente
Sí, he pasado un tiempo de calidad con arch / arm / cpu / arm926ejs / at91 / *, pero gracias por la sugerencia. Resulta que el código que estaba buscando estaba realmente en la ROM de arranque del procesador, a la que solo Atmel puede acceder. Los detalles sangrientos están aquí: at91.com/forum/viewtopic.php/f,9/t,19732/start,0/st,0/sk,t/sd,a
pingswept
1
Por cierto, en general, me ha impresionado bastante el U-boot. Para la gran cantidad de placas y CPU que admite, está bastante bien organizado. La documentación es escasa, pero eso parece ser normal para los cargadores de arranque.
pingswept
@pingswept: hey, Linux en 4 capas. Agradable. Tal vez debería buscar ese chip en lugar del iMX233. Estaba pasando un mal rato tratando de obtener mi ARM + dos chips SDRAM en 4 capas y lo archivé para trabajar en otros proyectos. Yo también soy un usuario de Altium.
darron
El 9G20 y el iMX233 están bastante cerca. Elegí el 9G20 porque el MAC de Ethernet está integrado, y los chips son un poco más baratos en baja cantidad, pero el iMX233 fue un finalista cercano.
pingswept
Además, eche un vistazo a Chumby Hacker Board: podría ser un buen lugar para comenzar si decide construir un sistema alrededor del iMX233. Los archivos Altium están en esta página wiki: wiki.chumby.com/mediawiki/index.php/Chumby_hacker_board_beta
pingswept