Das Problem, das ich derzeit habe, besteht darin, dass ich SecureBoot auf einem Gerät testen möchte, ohne einen Satz interner Sicherheitsregister mit berechneten Hash-Informationen dauerhaft zu ändern. Die Dokumentation schlägt vor, dass Sie dazu ein modifiziertes Reset-Konfigurations-Blob laden, sodass die Ausführung beim Booten "angehalten" wird. Dies gibt Ihnen genug Zeit, JTAG zu verwenden, um die relevanten Register einzustellen, bevor Sie die CPU manuell freigeben.
Mein Problem ist jedoch, dass ich, während die CPU zurückgesetzt wird, keine Verbindung zu Registerwerten herstellen und diese lesen kann. Das JTAG-Gerät, das ich verwende, ist der ARM DSTREAM zusammen mit seiner DS5-Entwicklungsumgebung. Während des Zurücksetzens identifiziert das Toolset das Gerät, das "im Zurücksetzen gehalten" werden soll, aber alle Versuche, die Funktion "Speicherbrowser" zu verwenden, liefern keine Ergebnisse.
Dies funktioniert natürlich gut, wenn die CPU zuerst in einem laufenden Zustand ist und ich die Ausführung manuell unterbreche, bevor ich versuche, den Speicher zu lesen.
tl;dr
Können Registerwerte/Speicherinhalte einer CPU über JTAG gelesen werden, wenn der Kern im Reset gehalten wird?
BEARBEITEN
Einige der Besonderheiten bei der Konfiguration des Geräts zum Zurückhalten beim Booten sind sehr spezifisch für dieses Gerät, aber die Kerne werden in einem zurückgesetzten Zustand gehalten, wenn sie aktiviert sind. Als SoC kommt ein QorIQ LS1043A von NXP zum Einsatz. Dieser Chip ist eine Quad-Core-Variante des LS1021, für den es hier einen Anwendungshinweis gibt . Der Verweis auf die Aktivierung des Hold-Off-Zustands wird als Einstellung BOOT_HO = 1 im Reset-Konfigurationswort angegeben.
Alles, was ich sehe, wenn ich versuche, aus dem Speicher zu lesen, während die Kerne zurückgesetzt bleiben, ist Folgendes, unabhängig von der gelesenen Adresse:
DS-5 unterstützt den Zugriff auf die Prozessorregister, während die Nicht-Debug-Logik des Kerns nach einem Warm-Reset im Reset gehalten wird. Dies ist allgemein im Debug Hardware Configuration Guide beschrieben
Für diesen speziellen Anwendungsfall hängt es davon ab, wie der Startvorgang sequenziert wird, um dies intern zu erreichen, und ob ein Warmstart ausreicht, um den Debug-Zugriff auf generische Weise bereitzustellen. Wenn das hold reset
Bit gesetzt ist, wird der Prozessorzustand gehalten, nachdem das Zurücksetzen deaktiviert wurde, bis das Bit gelöscht wird.
Förderung eines Details aus den Kommentaren:
Wie sich herausstellte, musste ich DS5 anweisen, den Namespace der Debug-Hardware zu verwenden. Dieser spezielle SoC hatte eine AHB-Schnittstelle, daher wurde der Befehl als solcher vorangestellt. zB AHB_0:<adr>
Unable to connect .. hardware failed to initialize
. Das Gerät wird nicht zurückgesetzt, sondern nur die Kerne, wie es scheint. Die Debug-Hardware ist zumindest in der Lage, sich mit dem Debugger zu verbinden, wenn sich der Zustand der Debug-Instanz in "verbunden" ändert. Alle vier Kerne zeigen „held in reset“ an. Einmal hier, funktioniert jedoch keiner der Speicherzugriffe in DS5. Nominell wird nur der 0. Kern "laufen", bis der Bootloader ausgeführt wird.Unable to read from register CPSR. Target is in reset
.hold reset
Bit löschen? Es kann richtig sein, dass auf das CPSR nicht zugegriffen werden kann, d. h. eher ein Kernregister als ein Debug-Register (obwohl auf es über die Debug-Register zugegriffen wird). Breakpoints und ähnliches sollten zugänglich sein, alle 'externen Debug'-Register sind alles, was ich erwarten würde.AHB_0:<addr>
.
Sean Houlihane
sherrelbc