Eine andere Binärdatei integrieren


8

Ich erstelle eine Binärdatei für ARM mit GCC und Crossworks. Ich habe ein sekundäres Binärbild, das beim Start auf einen anderen IC geladen werden muss.

Ich mag es, diese Binärdatei in meine Toolkette zu integrieren, mit anderen Worten, ich mache diese Binärdatei zu einem Teil meines Images und jedes Mal, wenn ich diese Binärdatei erstelle, wird sie in die endgültige Binärdatei integriert, die in die CPU geladen wird. Was ist die beste Vorgehensweise dafür?

Danke

Antworten:


3

Sie können objcopydas Binärbild in eine Objektdatei umwandeln. Die Objektdatei enthält Symbole, auf die über C-Code zugegriffen werden kann. Weisen Sie dann GCC an, die Objektdatei zu verknüpfen, und Sie können auf die Symbole in der Objektdatei zugreifen extern, um die Daten in den anderen IC zu laden.

Hier ist ein gutes Tutorial zum Verknüpfen eines binären Blobs, einschließlich des Ablegens der Optionen, die Sie für die objcopyVerwendung benötigen objdump.

Und natürlich die objcopyManpage und die objdumpManpage .


Super Antwort .. Ich habe insgesamt 5 Minuten
gebraucht

Zusätzliche Frage. Die obj-Datei funktioniert gut, wird jedoch von der Toolchain im RAM abgelegt, was aufgrund der Größe der Datei zu einem Problem wird. Wie kann ich erzwingen, dass dieses Objekt bei Flash platziert wird?
Ktc

gelöst es .. im Grunde, objcopy -I binär -O elf32-littlearm -B Arm --rename-Abschnitt .data = .rodata, zuweisen, laden, schreibgeschützt, Daten, Inhalte fpga.bin fpga.o das macht das Ganze. Rodata und Linker platzieren sich korrekt auf dem Blitz.
Ktc

objcopyhat eine enorme Anzahl von Optionen. Es kann wahrscheinlich alles tun, was Sie wollen. Es erfordert nur viel Starren auf diese Manpage. Vielen Dank, dass Sie Ihre Lösung geteilt haben, da ich sicher bin, dass dies eine häufige Frage für Leute sein wird, die das tun möchten, was Sie tun.
embedded.kyle
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.