Ich schreibe ein Boot-Skript für ein ARM-Cortex M3-basiertes Gerät. Wenn ich das Assembler-Boot-Skript und den C-Anwendungscode kompiliere und dann die Objektdateien kombiniere und sie auf mein Gerät übertrage, funktioniert alles.GNU ld entfernt Abschnitt
Wenn ich jedoch ar
verwende ein Archiv (libboot.a) und kombiniert dieses Archiv mit der C-Anwendung zu erstellen gibt es ein Problem:
ich den Boot-Code in einem Abschnitt gesetzt habe:
.section .boot, "ax"
.global _start
_start:
.word 0x10000800 /* Initial stack pointer (FIXME!) */
.word start
.word nmi_handler
.word hard_fault_handler
... etc ...
Ich habe festgestellt, dass ld
dies aus der endgültigen Binärdatei streift (der Abschnitt "boot" ist nicht verfügbar). Dies ist ganz natürlich, da es keine Abhängigkeit gibt, die ld
kennt, aber es verursacht, dass das Gerät nicht ordnungsgemäß gestartet wird.
Meine Frage ist also: Was ist der beste Weg, um diesen Code zu erzwingen?