Forum: Compiler & IDEs Zusammenfügen zweier bin Dateien


von dose (Gast)


Lesenswert?

Hallo,

ich habe zwei .bin Dateien. Die eine ist das "Betriebssystem" und die 
andere Datei meine Anwendung. Beide Dateien werden nacheinander in den 
Flash geschrieben. Das Nacheinander ist nicht ganz trivial. Ich suche 
eine Möglichkeit diese beiden Dateien zu einer Bindatei zusammenzufügen. 
Da würde das Flashen ganz einfach gehen. Alles aufeinmal schrieben und 
fertig.

Gibt es nicht was einfaches aus den binutils?
merge, copy??

Danke für Hilfe

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Naja, bei reinen Binärdateien dürfte das nicht so einfach sein, denn
die haben keinerlei Adressinformationen.

Für Intel Hex oder Motorola S-Record müsste es das srecord-Tool
doch können, oder?  Ihex kann man zur Not auch manuell zusammen
zimmern, das Format ist so schwer nicht zu durchschauen.

von Holger K. (krulli) Benutzerseite


Lesenswert?

DOS-Modus:
copy /b quelldatei1+quelldatei2 zieldatei

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Das bloße Zusammenketten der Dateien geht eben nur komplett am Ziel
vorbei...

von Martin T. (mthomas) (Moderator) Benutzerseite


Lesenswert?

Mit den Bintuils fällt mir grade auch keine schnelle Lösung ein. Evtl. 
über Umwege mit x*bin->hex, dann hex zusammenkopieren, von Hand 
anpassen, hex->bin.

Mit den bereits von Jörg erwähnten s-record Tools 
(http://srecord.sourceforge.net/) ist das "Zusammenkopieren" aber 
relativ einfach ohne größere Klimmzüge möglich (nicht nur für hex oder 
srec). Die Tools sind auch in WinAVR enthalten.

Habe das bei einem Projekt mal so gemacht für Anwendung+Bootloader unter 
Verwendung des Programms srec_cat aus den Tools. Dateien grade nicht zur 
Hand, also "aus dem Kopf" und ohne Gewähr:

gegeben:
app.bin  - die bin-Datei mit der Anwendung, soll an Flash-Adresse 0x0000
boot.bin - die bin-Datei mit dem Bootloader, soll an Adresse 0x3800

"Zusammenführen"
1
srec_cat app.bin -binary boot.bin -binary -offset 0x3800 -o flashimg.bin -binary

Ergebnis:
Datei flashimg.bin mit der Datei zum Flashen, in der beide Binärcodes 
enthalten sind

Wie ebenfalls schon erwähnt, braucht man die Adresse, an denen die 
einzelnen Teile starten. Diese sind nicht in der bin-Datei enthalten und 
müssen von Hand vorgegeben werden (offset 0x0 ist default, daher keine 
Angabe für app.bin).

Prinzip ist hoffentlich leicht auf die eigene Anwendung übertragbar.

Martin Thomas

von Rolf Magnus (Gast)


Lesenswert?

> Das bloße Zusammenketten der Dateien geht eben nur komplett am Ziel
> vorbei...

Sicher? Wenn er sie direkt hintereinander ins Flash schreiben will, 
düfte das durchaus gehen. Die Bin-Datei enthält ja auch keine Header 
oder sonstiges, sondern nur die rohen Daten.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

In der Regel willst du aber den Bootloader nicht direkt nach deiner
Applikation stehen haben, sondern an einer definierten Adresse.

Martins Antwort deckt das IMHO erschöpfend ab (er kennt die Srecord
utils besser als ich).

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.