Mam aplikacji, która działa na gołej tarczy metalowej i ma następującą strukturęDynamicznie kod obciążenie wbudowanego cel
- main.c
- service.c/.h
To skompilowaną do pliku wykonywalnego ELF (system.elf) przy użyciu standardowej sekwencji gcc -c
, ld
. Używam linkera do wygenerowania pliku mapy z adresami wszystkich symboli.
Teraz, bez ponownego flashowania mojego systemu, muszę dodać dodatkową funkcjonalność za pomocą niestandardowego programu ładującego. Pamiętaj, to jest bare-metal bez systemu operacyjnego.
Chciałbym
- kompilacji extra.c która wykorzystuje API zdefiniowane w service.h (i jakoś połączyć przeciwko istniejącym service.o/system.elf)
- skopiować powstały wykonywalny do mojego SDRAM przy starcie i skok do niego
- kod załadowany powinien być w stanie uruchomić i dostęp eksportowane symbole z service.c jak oczekiwano
i tho ught byłbym w stanie ponownie wykorzystać plik mapy połączyć extra.o przeciwko system.elf ale to nie działa:
ld -o extraExe extra.o system.map
Czy gcc lub ld mieć jakiś tryb, aby ten późnego powiązania? Jeśli nie, w jaki sposób mogę uzyskać dynamiczne ładowanie kodu, które opisałem powyżej?
gcc nie jest alinker. – Olaf
naprawiono tytuł, usuwano -1, lub po prostu dawałem wydajną odpowiedź :) –
Nadal jest to frontend do linkera, więc możesz połączyć za pomocą gcc ... –