Forum: Compiler & IDEs Avr-objcopy vergisst eine section aus dem elf in die hex datei zu bringen


von Martin S. (msperl)


Lesenswert?

Hallo!

Also ich wollte die git versions-nummer meinem Binary anfügen (letzte 2 
bytes beim FLASH) und habe zu diesem Zwecke eine objekt-datei erstellt, 
die genau diese 2 byte in einer section .version hat.
1
.section .version
2
version:
3
     .byte 0xde,0xad

Diese habe ich dann assembled.

Danach noch mein programm normal gelinkt:
1
avr-gcc -o main.elf <standard links>
und auch mit version.o:
1
avr-gcc -o main+version.elf <standard links> -Wl,--section-start,.version=0x3FFE -L. version.o

Ein avr-nm zeigt nun für das elf ohne version.o via:
1
avr-nm main.elf | sort
1
...
2
00003f20 A __data_load_end
3
00003f20 A __data_load_start
4
00003f20 T _etext
5
00800100 D _edata
6
...

und die mit version.o gelinkte version:
1
avr-nm main+version.elf | sort
1
...
2
00003f20 A __data_load_end
3
00003f20 A __data_load_start
4
00003f20 T _etext
5
00003ffe n version
6
00800100 D _edata
7
...

Die elf dateien sind auch unterschiedlich groß!

Wenn ich nun hex Dateien für beide elf Dateien generiere:
1
avr-objcopy -O ihex -R .eeprom main.elf main.hex
2
avr-objcopy -O ihex -R .eeprom main+version.elf main+version.hex

so sind die beiden Dateien ident.

Wie mache ich es, das ich die .version Section auch in meine hex Datei 
hinein bekomme?
Welche Option brauche ich?
Wie kann ich es sonst machen?
Ich möchte ein editieren der hex-datei vermeiden...

Danke,
       Martin

p.s: es ist unabhängig ob das label "version" mit ".global version" 
definiert ist oder nicht... (der einzige Unterschied ist n oder N in der 
ausgabe von avr-nm)

von Stefan E. (sternst)


Lesenswert?

1
.section .version,"a",@progbits

Und wenn du dich um solche (schon recht spezielle) Details nicht weiter 
kümmern willst, dann mach es doch einfach in C:
1
const uint8_t version[] __attribute__((section(".version"))) = { 0xde, 0xad };

von Martin S. (msperl)


Lesenswert?

Danke - funktioniert jetzt einwandfrei!

Das mit den "Argumenten" bei den Sections muss ich mir noch einmal 
genauer ansehen...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.