Hallo! Ich schreibe gerade einen Bootloader, der von SD-Karte das Programm laden kann. Dazu muss ich ein neues Programm natürlich zunächst auf eine SD-Karte schreiben. Also z.B. mit dd if=myprog.bin of=/dev/sda2. Das AVR-Studio liefert mir standardmäßig jedoch nur eine hex-Datei. Das macht natürlich keinen Sinn, die auf die Karte zu spielen. Wie kann ich also den echten Maschinencode erzeugen lassen? Grüße!
Gast
#560290
Hallo Günther, wenn das Hex-file im Intel-Hex-Format ist, dann erzeugt dir das angehängte Program ein Bin-File. In diesem steht dann wirklich Maschinencode. Das Program ist von der keil.com Seite. Gruß, Christian
Gast
#560299
Edit: Verwendung in der Win-Konsole: Pfad: hex2bin deinhexfile.hex
Hi wenn du GNU-tools einsetzt (avrgcc): Da gibt es das Programm objcopy. Damit kannst du unter anderem eine Intel-HEX Datei in eine Biärdatei umandlen. Matthias
Gast
#560317
Das Programm heißt avr-objcopy.
Hi stimmt. Aber das objcopy jeder beliebigen Architektur sollte es auch tun. Matthias
Gast
#560473
Macht das Sinn eine Hexdatei fuer einen Download in eine Binaerdatei zu wandeln ? Nicht unbedingt. Zum einen kann die Hexdatei mit Loechern, dh unprogrammierten Bereichen umgehen, Eine Binaerdatei enthaelt dort FF oder Nullen. Ich denke ich werde fuer mein Downloadprojekt mit Hexdateien arbeiten, und nicht mit Binaeren. Falls es sich um grosse Mengen geht kann man sich auf dem Hexfile auch noch einen Kompressor vorstellen. Der Ansatz mit Zeilen, Adressen und Daten ist zu gut um wegzuschauen.
Gast
#560485
Hallo, @Sipp: >Macht das Sinn eine Hexdatei fuer einen Download in eine Binaerdatei zu >wandeln ? Nicht unbedingt. Du hast schon recht. Im prinzip könnte er auch direkt mit dem hex-File arbeiten, aber der Weg über eine bin-Datei ist meiner Meinung nach für den Anfang sicherlich leichter, da eine Fehlerquelle und zwar die "Umrechnung" schon ausgeschlossen ist. Soweit ich das richtig verstanden habe will er ja den Programmcode direkt von SD-Karte lesen und da ist doch eine bin-Datei genau das richtige. Einfach auf die Karte kopieren und gut.
Genau so ist es. Auf der SD Karte sind zwei Partitionen. Eine ist eine FAT16, die vom Hauptprogramm verwendet wird. Der Bootloader wertet die zweite Partition aus, die aus reinen Daten besteht. Dort liest er eins zu eins die Daten aus der Partition und schreibt diese in den Flash des AVR. An einer Stelle relativ zum Partitionsanfang liegt dann ein Versionswort, an welchem der bootloader entscheidet, ob eine Aktualisierung notwendig ist. Unter diesen Umständen wäre mir eine HEX Datei eher im Wege, da diese variable Länge hat. Das macht die Sache zwar nicht unmöglich, aber so ist sie schon etwas intuitiver.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.