Ich habe Secure Boot auf einem eingebetteten Gerät erfolgreich aktiviert. Das Problem ist, dass beim Booten in diesem Modus der Prozess direkt nach der Zeile hängen zu bleiben scheint:
Starting kernel ...
Sobald U-Boot den Kernel in den Speicher kopiert und einen bootm
Befehl ausgegeben hat .
In einem Debugger kann ich erfassen, dass der PC an einer yield
Anweisung festhält, gefolgt von einer Zuweisung an pc = pc-4
- also im Wesentlichen eine Schleife.
Ich habe noch nie zuvor Linux auf diesem niedrigen Niveau gestartet, daher bin ich mir nicht sicher, wo ich anfangen soll zu suchen. Ich habe jedoch festgestellt, dass ich das Kernel-Image erfolgreich starten konnte, wenn ich mich nicht im sicheren Modus befand. Dies ist möglicherweise eine geeignetere Frage für den Anbieter.
1) Wo finde ich im Allgemeinen U-Boot-Diagnoseinformationen zur Ausführungsphase der Ausführung?
2) Ab wann wird der Kernel vollständig ausgeführt? dh wann ist U-Boot nicht mehr vorhanden?
Antworten:
Möglicherweise können Sie den Speicher der frühen Linux-Drucke wie folgt sichern. Die Ursache kann sein, dass der Kernel startet, aber vor der Konsoleninitialisierung hängen bleibt. Legen Sie auch Drucke in den Kernel-Einstiegspunkt von uboot und bestätigen Sie, dass die Kontrolle an den Kernel übergeben wird.
Suchen Sie die
System.map
Datei. Verwenden Sie den folgenden Befehl, um dielog_buf
Adresse zu identifizieren :Dies wird so etwas wie ausgeben
Warmstart der Karte (Inhalt im RAM sollte nicht gelöscht werden).
In Uboot
__log_buf
sichern Sie den Speicher von (c0352d88). Die Kernel-Konsolendrucke werden ausgegeben. So können Sie feststellen, wo das Extact Hung passiert.quelle
Ich hatte das gleiche Problem und habe eine Lösung gefunden. Die Frage ist , in einen des ,
u-boot structure field
dass speichert diesize
von deruncompressed linux kernel.
Theu-boot
wird dieses Feld nicht mit der unkomprimierten Größe bevölkert , dass dielinux kernel
Anwendungen später seine Größe ändernstack
, so dass das System in einen undefinierten Zustand versetzt.Sobald
u-boot
dieStarting kernel...
Nachricht gedruckt wurde , sollte die nächste Nachricht sein,Uncompressing Linux... done, booting the kernel
nachdem u-boot a übertragen hat,SMM Handler
damit der Kernel die Ausführung übernimmt, und möglicherweisekernel
sucht der nach diesem Feld. Wenn Sie auf einemx86
basierten System arbeiten, befindet sich die Dekomprimierung in den folgenden Dateiverzeichnissen:Die Lösung besteht darin, das neueste U-Boot-Fundament hier zu verwenden: https://github.com/andy-shev/u-boot
Wenn Sie jedoch einen benutzerdefinierten U-Boot verwenden, müssen Sie nach diesem Feld suchen.
quelle