Hallo zusammen,
ich habe ein nerfiges Problem mit arm-elf-gcc.
Ich möchte gerne C funktionen schreiben und compilieren und dann später
in eine eine schon vorhandene software einspielen.
Dann möchte ich sie von anderer Stelle aufrufen.
Teilweise habe ich erfolg, jedoch reicht mein verständnis von compiler
und linker nicht um alles zu realisieren.
Kleine Funktionen ohne weitere funktions aufrufe und memcpy und
sonnstiges kann ich bereits benutzen. Zum compileren und einbinden habe
ich mir folgenden script geschrieben.
1 | #!/bin/bash
|
2 | if (( $# != 3))
|
3 | then
|
4 | echo "usage: c file without .c, target file, offset in hex eg. 0x80000"
|
5 | exit
|
6 | fi
|
7 |
|
8 | arm-linux-gnueabi-gcc -static -S -mthumb -mthumb-interwork -mcpu=arm7tdmi -Os $1.c && \
|
9 | arm-linux-gnueabi-as -o $1.o $1.s && \
|
10 | arm-linux-gnueabi-objcopy -O binary $1.o $1.bin && \
|
11 | echo "writing to address: $3 = $(($3))" && \
|
12 | dd if=$1.bin of="$2" conv=notrunc obs=1 seek=$(($3))
|
Es ist klar das ich keine Funktion aufrufen kann... Angenommen ich habe
2 Funktionen F1 und F2 die eine wird an der Adresse 0x0 gespeichert und
die andere vielleicht an 0xCB. Will F1 F2 aufrufen greift sie auf die
Adresse 0xCB zu. Was aber signifikant daneben ist wenn die ganze
Geschichte mit 0x1000000 offset in der Binary steht.
1. Ich würde also gerne den compiler Anweisen das er diesen offset
berücksichtig.
2. Ausserdem sobald etwas passiert wie memcpy oder eine division, was
schnell zu ist wenn man strukturen nutzt, macht er auch nicht weiter wie
geplant. Memcpy muss also umbedingt mit in die binary... nur leider
bekomme ich das einfach nicht hin.
Vielen Dank an alle die mir helfen. Das hier ist echt schon ziemlich
nerfig geworden. Vorallem weil ich einfach nicht weiß wo ich nach
schauen muss.
Grüße
Felix