Ich habe eine Anwendung, die auf blankem Metall-Target läuft und hat die folgende Strukturdynamisch Last Code auf Embedded-Ziel
- main.c
- service.c/.h
Es kompiliert zu ELF ausführbar (system.elf) mit Standard gcc -c
, ld
Sequenz. Ich benutze Linker, um eine Kartendatei zu erzeugen, die Adressen aller Symbole zeigt.
Jetzt, ohne mein System neu zu flashen, muss ich eine zusätzliche Funktionalität mit einem benutzerdefinierten Laufzeitlader hinzufügen. Denken Sie daran, das ist ein Bare-Metal ohne Betriebssystem.
Ich möchte
- Kompilierung extra.c, die in service.h definiert APIs verwendet (und irgendwie verknüpfen gegen bestehende service.o/system.elf)
- kopieren Sie die ausführbare Datei auf meine SDRAM zur Laufzeit und springen, um es
- geladenen Code sollte in der Lage sein, die exportierten Symbole von service.c zu laufen und greift als erwartet
I tho ught ich wäre in der Lage Map-Datei wiederverwenden die extra.o gegen system.elf zu verbinden, aber das hat nicht funktioniert:
ld -o extraExe extra.o system.map
Hat gcc oder ld hat einige Modi so spät Verknüpfung Verfahren zu machen? Wenn nicht, wie kann ich dynamisches Codeladen erreichen, das ich oben beschrieben habe?
gcc ist nicht leer. – Olaf
fixed den Titel, pls entfernen -1, Oder geben Sie einfach produktive Antwort :) –
Noch ist es ein Frontend zu einem Linker, so können Sie mit gcc ... –