Forum: Compiler & IDEs Mit avr-objcopy ein ELF Production File erstellen


von Simon K. (simon) Benutzerseite


Lesenswert?

Hi Leute!
Ich möchte folgendes erreichen:
Ein HEX File (Bootloader) und die Fuses zusammen in ein ELF File packen.

Da aber das Bootloader HEX File solche Späße hier enthält (vermutlich um 
ganze 14 Bytes Platz zu sparen):
1
...
2
:0601E000C9F7DB010895E0        // End of File Record
3
:1001F4000D947D010D94B2013ECF0FBF08952AE105 // Neuer Data Record
4
...

generiert folgender Aufruf:
1
avr-objcopy -I ihex -O elf32-avr $bootloader_hex $production_elf

eine ELF Datei mit folgendem Inhalt (avr-objdump):
1
Sections:
2
Idx Name          Size      VMA       LMA       File off  Algn
3
  0 .sec1         000001e6  00020000  00020000  00000034  2**0
4
                  CONTENTS, ALLOC, LOAD, DATA
5
  1 .sec2         000013ee  000201f4  000201f4  0000021a  2**0
6
                  CONTENTS, ALLOC, LOAD, DATA
7
  2 .sec3         00000014  00021fe0  00021fe0  00001608  2**0
8
                  CONTENTS, ALLOC, LOAD, DATA

Meine Frage wäre, mit welcher Option man das verhindern kann? Sprich, 
wie sage ich, dass er die komplette HEX Datei in eine Section packen 
soll?

Was teilweise funktioniert ist
1
avr-objcopy -I ihex -O elf32-avr --add-section .flashdata=$bootloader_hex $bootloader_hex $production_elf

Dann lädt er (neben den 3 .secX) die gesamte HEX Datei in die Section 
.flashdata.
1
Sections:
2
Idx Name          Size      VMA       LMA       File off  Algn
3
  0 .sec1         000001e6  00020000  00020000  00000034  2**0
4
                  CONTENTS, ALLOC, LOAD, DATA
5
  1 .sec2         000013ee  000201f4  000201f4  0000021a  2**0
6
                  CONTENTS, ALLOC, LOAD, DATA
7
  2 .sec3         00000014  00021fe0  00021fe0  00001608  2**0
8
                  CONTENTS, ALLOC, LOAD, DATA
9
  3 .flashdata    00003df0  00000000  00000000  0000161c  2**0
10
                  CONTENTS, READONLY

D.h. mir wäre geholfen, wenn ich den Pflichtparameter "in-file" für 
avr-objcopy irgendwie ignorieren lassen könnte und nur mit add-section 
arbeite.
1
Usage: avr-objcopy [option(s)] in-file [out-file]

EDIT: Ich sehe gerade, .text ist eigentlich für den Programmcode da. 
Egal, es geht ums Prinzip ;-)

: Bearbeitet durch User
von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Simon K. schrieb:
> Meine Frage wäre, mit welcher Option man das verhindern kann? Sprich,
> wie sage ich, dass er die komplette HEX Datei in eine Section packen
> soll?

In ein bin umwandeln und dann wieder zurück?  bin ist ja noch dümmer als 
ihex, d.h. das Format kann keinerlei Meta-Info halten.

von Simon K. (simon) Benutzerseite


Lesenswert?

Die Idee gefällt mir! Leider geht dann dabei die Adressinformation 
(Startadresse des Bootloaders) ebenfalls verloren :-)

von Simon K. (simon) Benutzerseite


Lesenswert?

Darüber hinaus scheint es aber sowieso nicht zu funktionieren. Das AVR 
Studio will die .elf Datei nicht erkennen. Vermutlich hängt es irgendwie 
mit dem elf file-header zusammen (den man mit objcopy anscheinend auch 
nicht verändern kann, bisauf die architecture).

Scheint als müsste ich mir da was anderes ausdenken... Hmpf

von Schaulus Tiger (Gast)


Lesenswert?

* ELF-Files werden vom Linker (ld) aus Object-Files zusammengebaut.
* Object-Files sind ELF-Files.
* Das ihex-File war auch mal ein ELF.
* Die Fuse-Daten kann man bestimmt auch im ELF-Format erzeugen.
= man könnte versuchen, Bootloader und Fuse-Daten mittels ld zusammen zu 
bauen.

von Simon K. (simon) Benutzerseite


Lesenswert?

Schaulus Tiger schrieb:
> * ELF-Files werden vom Linker (ld) aus Object-Files
> zusammengebaut.
> * Object-Files sind ELF-Files.
> * Das ihex-File war auch mal ein ELF.
> * Die Fuse-Daten kann man bestimmt auch im ELF-Format erzeugen.

Das ist mir alles durchaus bewusst. Jedoch kann ich nicht an das ELF der 
HEX Datei herankommen, da das Binary ein Bootloader von Atmel ist.

> = man könnte versuchen, Bootloader und Fuse-Daten mittels ld zusammen zu
> bauen.
Hmm, mit ld? Das könnte ich mal versuchen. Glaube das wird aber 
schwierig, wenn mir nur die HEX Datei zur Verfügung steht.

: Bearbeitet durch User
von Schaulus Tiger (Gast)


Lesenswert?

Eigentlich müsste es doch ganz einfach gehen, so ungefähr:
1
avr-objcopy -I ihex -O elf32-avr $bootloader_hex bootloader.o
2
avr-gcc -m... -o poduction.elf bootloader.o fuses.o
vielleicht erstmal ohne fuses.o

Beitrag #7769927 wurde von einem Moderator gelöscht.
Beitrag #7771961 wurde von einem Moderator gelöscht.
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.