Gute Werkzeuge oder Methoden zum Verständnis der Struktur des Bootloaders?

9

Ich habe kürzlich die Ursache eines bösen Fehlers herausgefunden, an dem ich mit einem Atmel AT91SAM9G20 SBC gearbeitet habe, auf dem U-Boot , ein Open-Source-Bootloader, ausgeführt wird. Der Kern des Problems bestand darin, dass U-Boot erwartete, dass die Hardware anders konfiguriert sein würde als ich sie erstellt hatte, sodass einige der Geräteregister falsch konfiguriert waren.

Nachdem ich das Problem herausgefunden habe, muss ich den U-Boot optimieren, um die Register korrekt zu konfigurieren. Ich kann dies blind tun, indem ich am Ende des Programms ein paar Codezeilen hinzufüge, aber das ist chaotisch.

Dies bringt mich zu meiner Frage: Wie kann ich herausfinden, wie U-Boot effizienter funktioniert, als bei main () zu beginnen und alle möglichen Codepfade über alle Dateien hinweg zu lesen? Ich habe versucht, in den Dateien herumzusuchen und den Code in der Nähe der relevanten Bezeichner zu betrachten. Dies hat sich als unwirksam erwiesen; Es scheint, dass der größte Teil des Codes Treiber für Subsysteme sind, die mir egal sind. Eigentlich verstehe ich, wie der Bootloader mittlerweile ziemlich gut funktioniert, aber ich hoffe, dass es eine bessere Methode gibt als meinen naiven Ansatz.

pingswept
quelle
Haben Sie versucht, auf der Mailingliste der Uboot-Entwickler nachzufragen?
Sybreon

Antworten:

6

Es gibt verschiedene Tools / Strategien, die helfen könnten:

  • Bessere Tools, um den Quellcode zu verstehen:

    • cscope ist ein Tool zum Erkunden von C-Code. Es ähnelt grep, versteht jedoch die Syntax
    • Rufen Sie Graphgeneratoren auf, um ein Bild der Funktionsaufrufstruktur zu zeichnen
    • Fenris sieht interessant aus, obwohl ich es nicht ausprobiert habe
  • Laufzeitanalyse

    • Gehen Sie mit einem Debugger durch interessante Abschnitte und analysieren Sie, was los ist
    • Verwenden Sie die Instrumentierungsfunktionen von gcc, um beim Ein- / Ausstieg jeder Funktion einen Teil des Guten aufzurufen. z.B. http://ndevilla.free.fr/etrace/
  • Schreiben Sie Ihren eigenen Mini-Bootloader

    • Ich finde oft, dass der beste Weg, etwas zu verstehen, darin besteht, es selbst neu zu erstellen

Leider gibt es kein Zauberrezept, das für alles funktioniert.

Toby Jaffey
quelle
@ Laufzeitanalyse - Auf einem separaten eingebetteten System nicht so praktikabel, insbesondere wenn kein zugrunde liegendes Betriebssystem gleichzeitig ausgeführt wird, z. B. ein Bootloader.
Connor Wolf
Sie können es immer noch mit einem Debugger durchgehen, wie Joby vorschlägt. Je nach Komplexität kann dies hilfreich sein oder auch nicht.
Nick T
Cscope ist das, was ich mir vorgestellt habe. Ich hatte auf etwas Glänzenderes gehofft, aber es ist ein guter Anfang. Vielen Dank.
Pingswept
2

Wie haben Sie es für den AT91 konfiguriert?

Der Codebaum scheint so gestaltet zu sein, dass sich alle architekturspezifischen Inhalte im Baum 'arch / (CPU-Klasse) / (CPU-Typ) / ...' befinden. Ich habe den AT91-Code unter arch / arm / cpu / arm926ejs / at91 gefunden. Befindet sich das variantenspezifische Material, das Sie ändern möchten, nicht dort? In diesem Verzeichnis gibt es nicht viel zu sehen, zumal fast die Hälfte der Dateien für einzelne AT91-Varianten spezifisch ist.

Entschuldigung, wenn dies offensichtlich ist ... aber Sie haben nicht erwähnt, dass Sie dies überprüfen.

Ich hatte mir den uBoot-Codebaum noch nicht angesehen, aber Ihr Beitrag hat mich dazu erschreckt. Ein Backburner-Projekt von mir beinhaltet schließlich die Verwendung von uBoot und Linux auf einer benutzerdefinierten iMX233-Platine. Ich bin sehr daran interessiert, diese Art von Feedback darüber zu erhalten, wie gut die uBoot-Architektur und variantenspezifische Dinge isoliert sind und wie groß der Schmerz sein wird.

darron
quelle
Ja, ich habe einige Zeit mit arch / arm / cpu / arm926ejs / at91 / * verbracht, aber danke für den Vorschlag. Es stellt sich heraus, dass sich der gesuchte Code tatsächlich im Prozessor-Boot-ROM befand, auf das nur Atmel zugreifen kann. Die wichtigsten Details finden Sie hier: at91.com/forum/viewtopic.php/f,9/t,19732/start,0/st,0/sk,t/sd,a
pingswept
1
Insgesamt war ich übrigens ziemlich beeindruckt von U-Boot. Für die große Anzahl von Boards und CPUs, die es unterstützt, ist es ziemlich gut organisiert. Die Dokumentation ist spärlich, aber das scheint für Bootloader selbstverständlich zu sein.
Pingswept
@ Pingswept: Hey, Linux auf 4 Ebenen. Nett. Vielleicht sollte ich mir diesen Chip anstelle des iMX233 ansehen. Ich hatte verdammt viel Zeit damit, meine ARM + zwei SDRAM-Chips auf 4 Ebenen zu bringen und sie für andere Projekte zurückzustellen. Ich bin auch ein Altium-Benutzer.
Darron
Das 9G20 und das iMX233 sind ziemlich nah. Ich habe mich für das 9G20 entschieden, weil der Ethernet-MAC eingebaut ist und die Chips in geringer Menge etwas billiger sind, aber der iMX233 war ein enger Zweitplatzierter.
Pingswept
Schauen Sie sich auch das Chumby Hacker Board an - dies könnte ein guter Ausgangspunkt sein, wenn Sie sich entscheiden, ein System um den iMX233 herum aufzubauen. Die Altium-Dateien befinden sich auf dieser Wiki-Seite: wiki.chumby.com/mediawiki/index.php/Chumby_hacker_board_beta
pingswept