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 war, als ich sie gebaut hatte, sodass einige der Geräteregister falsch konfiguriert waren.
Jetzt, da ich das Problem herausgefunden habe, muss ich 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.
Das 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, mich in den Dateien umzusehen und den Code in der Nähe relevanter Bezeichner anzusehen. 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 mittlerweile ziemlich gut, wie der Bootloader funktioniert, aber ich hoffe, es gibt eine bessere Methode als meinen naiven Ansatz.
Es gibt mehrere Tools/Strategien, die helfen könnten:
Bessere Werkzeuge, um den Quellcode zu verstehen:
Laufzeitanalyse
Schreiben Sie Ihren eigenen Mini-Bootloader
Leider gibt es kein Zauberrezept, das für alles funktioniert.
Wie haben Sie es konfiguriert, um es für den AT91 zu bauen?
Der Codebaum scheint so konzipiert zu sein, dass sich alle architekturspezifischen Dinge im Baum „arch/(cpu class)/(cpu type)/...“ befinden. Ich habe den AT91-Code unter arch/arm/cpu/arm926ejs/at91 gefunden ... befindet sich das variantenspezifische Zeug, das Sie ändern möchten, nicht dort? In diesem Verzeichnis gibt es nicht allzu viel zu durchsuchen, zumal fast die Hälfte der Dateien individuell AT91-variantenspezifisch sind.
Tut mir leid, wenn das 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-Leiterplatte. 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.
Sybreon