De bons outils ou méthodes pour comprendre la structure du chargeur de démarrage?

9

J'ai récemment découvert la cause d'un bogue désagréable sur lequel je travaillais avec un Atmel AT91SAM9G20 SBC exécutant U-boot , un chargeur de démarrage open source. Le cœur du problème était que U-boot s'attendait à ce que le matériel soit configuré différemment de ce que je l'avais construit, donc certains registres de périphériques étaient mal configurés.

Maintenant que j'ai compris le problème, je dois modifier U-boot pour configurer correctement les registres. Je peux le faire aveuglément en ajoutant quelques lignes de code à la fin du programme, mais c'est compliqué.

Cela m'amène à ma question: comment puis-je comprendre comment U-boot fonctionne plus efficacement que de démarrer à main () et de lire tous les chemins de code possibles dans tous les fichiers? J'ai essayé de parcourir les fichiers et de regarder le code près des identifiants pertinents. Cela s'est révélé inefficace; il semble que la plupart du code soit des pilotes pour des sous-systèmes dont je me fiche. En fait, je comprends maintenant comment fonctionne le chargeur de démarrage, mais j'espère qu'il existe une meilleure méthode que mon approche naïve.

pingswept
la source
Avez-vous essayé de demander sur la liste de diffusion des développeurs uboot?
sybreon

Réponses:

6

Il existe plusieurs outils / stratégies qui pourraient vous aider:

  • De meilleurs outils pour donner du sens au code source:

  • Analyse de l'exécution

    • Parcourez des sections intéressantes avec un débogueur et analysez ce qui se passe
    • Utilisez les fonctionnalités d'instrumentation de gcc pour appeler un morceau de bien à l'entrée / sortie de chaque fonction. par exemple. http://ndevilla.free.fr/etrace/
  • Écrire votre propre mini chargeur de démarrage

    • Je trouve souvent que la meilleure façon de comprendre quelque chose est de le recréer moi-même

Malheureusement, il n'y a pas de recette magique qui fonctionne pour tout.

Toby Jaffey
la source
@Runtime Analysis - Pas aussi viable sur un système embarqué séparé, en particulier quand aucun système d'exploitation sous-jacent ne s'exécute en même temps, par exemple, un chargeur de démarrage, ce qui est le cas.
Connor Wolf
Vous pouvez toujours le parcourir avec un débogueur comme Joby le suggère. Selon la complexité, cela peut être utile ou non.
Nick T
Cscope est le genre de chose que j'imaginais. J'espérais quelque chose d'un peu plus brillant, mais c'est un bon début. Merci.
pingswept
2

Comment l'avez-vous configuré pour construire pour l'AT91?

L'arbre de code semble être conçu de telle sorte que tout élément spécifique à l'architecture se trouve dans l'arborescence 'arch / (classe cpu) / (type cpu) / ...'. J'ai trouvé le code AT91 sous arch / arm / cpu / arm926ejs / at91 ... la variante spécifique que vous cherchez à modifier ne s'y trouve pas? Il n'y a pas grand-chose à parcourir dans ce répertoire, d'autant plus que près de la moitié des fichiers sont spécifiques aux variantes AT91.

Désolé si c'est évident ... mais vous n'avez pas mentionné de vérifier cela.

Je n'avais pas encore regardé l'arborescence de code uBoot, mais votre message m'a effrayé à le faire. Un de mes projets de brûleur arrière consiste à utiliser éventuellement uBoot et Linux sur un PCB iMX233 personnalisé. Je suis très intéressé à obtenir ce genre de commentaires sur la façon dont l'architecture uBoot et les éléments spécifiques aux variantes sont isolés et à quel point cela va être pénible.

Darron
la source
Oui, j'ai passé du temps de qualité avec arch / arm / cpu / arm926ejs / at91 / *, mais merci pour la suggestion. Il s'avère que le code que je cherchais était en fait dans la ROM de démarrage du processeur, à laquelle seul Atmel peut accéder. Les détails sanglants sont ici: at91.com/forum/viewtopic.php/f,9/t,19732/start,0/st,0/sk,t/sd,a
pingswept
1
Soit dit en passant, dans l'ensemble, j'ai été assez impressionné par U-boot. Pour le grand nombre de cartes et de processeurs qu'il prend en charge, il est assez bien organisé. La documentation est rare, mais cela semble être le même pour le cours pour les chargeurs de démarrage.
pingswept
@pingswept: hé, Linux sur 4 couches. Agréable. Je devrais peut-être examiner cette puce au lieu de l'iMX233. J'avais beaucoup de mal à essayer d'obtenir mon ARM + deux puces SDRAM sur 4 couches et à le mettre de côté pour travailler sur d'autres projets. Je suis également un utilisateur d'Altium.
darron
Le 9G20 et l'iMX233 sont assez proches. J'ai choisi le 9G20 parce que le MAC Ethernet est intégré et que les puces sont un peu moins chères en faible quantité, mais l'iMX233 était un finaliste proche.
pingswept du
Jetez également un œil à la carte Chumby Hacker - peut être un bon point de départ si vous décidez de construire un système autour de l'iMX233. Les fichiers Altium sont sur cette page wiki: wiki.chumby.com/mediawiki/index.php/Chumby_hacker_board_beta
pingswept