Wie kann ich einen Teil des SDRAM reservieren, etwa 4 Bytes, um ein Flag zwischen U-Boot und dem Linux-Kernel zu übergeben, damit dieser reservierte Speicherplatz nicht vom Linker initialisiert wird und der Wert nach einem Warmstart erhalten bleibt? Ich versuche, die Verwendung von Bootargs zu vermeiden, um den Verschleiß des in einer eingebetteten Anwendung verwendeten NAND-Flash zu minimieren. Meine Frage könnte als eine Erweiterung der Lösung betrachtet werden, die von Erkennen von Kaltstart im Vergleich zum Warmstart auf einem ARM-Prozessor?
Ich habe u-boot.lds mit dem unten stehenden Linker-Skript erstellt und es erstellt mit: -fno-zero-initialisiert-in-bss ohne Erfolg.
%Vor%Irgendwelche Ideen?
Es gibt bereits eine Methode, um Daten zwischen U-Boot und dem Linux-ARM-Kernel zu übergeben. Es heißt die ATAG Speicherliste. Informationen wie verwendbare Speicherbereiche und Platineninformationen werden mithilfe dieser Datenliste von U-Boot an den Linux ARM-Kernel übergeben. Sie könnten eine benutzerdefinierte ATAG für Ihre Daten definieren. Fügen Sie in U-Boot Ihre Routine hinzu, um Ihr ARM-Tag in lib_arm/armlinux.c
zu erstellen. Dann werden ATAGs in arch/arm/kernel/setup.c
verarbeitet.
Zur Dokumentation siehe Abschnitt 8 von dies oder diese Alt-Seite .
ANHANG
Links zu der referenzierten ATAG-Dokumentation sind dürftig (selbst Google hat einen schlechten Link).
Versuchen Sie, nach dem tatsächlichen Namen des Dokuments zu suchen, nämlich "Booting ARM Linux" von Vincent Sanders.
Derzeit befindet sich eine Kopie im Cache der Simtec-Website von Google, und eine breitere Suche ergab eine Übersetzung auf Koreanisch (?).
Eine andere oder frühere Version (?) von Russel King auf ARM-Booten (scheint aber aktualisiert worden zu sein) ist hier .
Wenn Sie nach dem Ansatz der globalen Variablen in Wie erkennt man Kaltstart gegen Warmstart auf einem ARM-Prozessor? :
Sie können erzwingen, dass sich diese globale Variable in einem bestimmten ELF-Abschnitt befindet (siehe Ссылка ), und dann im Linker-Skript setzen Sie diesen Abschnitt auf eine bestimmte Adresse.
Wenn Sie gute LD-Script-Fähigkeiten haben, könnten Sie sogar den Linker dazu bringen, alle bss-Sektionen mit Ausnahme der folgenden zu initialisieren:)
Tags und Links memory arm linux-kernel embedded-linux u-boot