Forum: Compiler & IDEs Makefile für Erzeugung Datei " " ändern


von Martin M. (martin69)


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe ein Projekt von Roland Riegel von Seiner HP runter geladen. 
Entsprechende Änderungen (Prozessortyp in 128er geändert und 
Quarzfrequenz geändert) habe ich schon selber vorgenommen. Allerdings 
erzeugt das Makefile keine Datei mit der Endung "elf".

Ich benutze AVR Studio 4.11 und benötige diese Datei daher. Ich möchte 
nicht auf das aktuelle AVR-Studio unsteigen, weil ich mich an das alte 
gewöhnt habe und damit zufrieden bin.

Was für Einträge muß ich im Makefile machen, damit das Makefile eine 
entsprechende *.elf erzeugt?

Wäre nett, wenn mir einer die Datei ändern und als Anhang hier posten 
könnte.

von Roland R. (roland) Benutzerseite


Lesenswert?

Hallo Martin,

Übergebe in dem Makefile an avr-objcopy statt "-O ihex" einfach mal "-O 
elf32-avr" und ändere am Anfang des Makefile die Endung der 
Ausgabedatei.

Ich kenne das AVR-Studio zwar nicht und auch das ELF-Format ist mir bei 
AVRs noch nicht untergekommen, aber wenn Du das so brauchst...

Gruß,
Roland

PS: Ein wenig eigenständige Suche oder das Lesen der einschlägigen 
Man-Pages hätte Dich auch selbstständig weitergebracht. Was anderes habe 
ich auch nicht getan.

von ... (Gast)


Lesenswert?

Wozu doppelt gemoppelt und so kompliziert?
Das ELF-Format purzelt doch schon von ganz alleine aus dem Linker! Und 
avr-objcopy macht daraus dann das hex-Format.
Warum der Autor des Makefile der Datei allerdings die Endung 'out' 
verpasst hat weis ich auch nicht. Einfach in dem geposteten Makefile am 
Ende der 4. Zeile aus dem 'out' ein 'elf' machen.

CU

von Martin M. (martin69)


Lesenswert?

@Roland: Danke für die schnelle Antwort. Du meinst so:

OUT := $(NAME).elf

$(HEX): $(OUT)
  $(OBJCOPY) -R .eeprom -O elf32-avr $< $@


Bin gerade nicht an meinem Programmier-PC und kann es daher erst morgen 
testen.

von Martin M. (martin69)


Lesenswert?

@...
Dann hätte ich es nur oben ändern müssen?
Wie gesagt, bin gerade nicht an meinem Programmier-PC und kann es daher 
leider nicht gleich testen.

von Roland R. (roland) Benutzerseite


Lesenswert?

Ok, danke für die Korrektur.

Die Wahl von .out war eher willkürlich. Ich verwende das AVR-Studio 
nicht, und unter Linux arbeite ich mit Intel-Hex-Dateien, deshalb 
überhaupt die Umwandlung mit avr-objcopy.

Gruß,
Roland

von ... (Gast)


Lesenswert?

Nicht ganz :)
Nur die eine Zeile ändern:
1
OUT := $(NAME).elf
Die andere bleibt wie sie ist, also mit dem "-O ihex" darin. Sonst 
suchst Du anschließend vergeblich nach der hex-Datei zum Flashen :)

von Martin M. (martin69)


Lesenswert?

OK. Vielen Dank für die Hilfe! Bin mal gespannt, ob das Auslesen und 
beschreiben der SD-Karte mit der Software von Roland klappt...

von ... (Gast)


Lesenswert?

Huch, da war ich wohl zu langsam.
Das ganze hat auch nicht direkt was mit dem AVRStudio zu tun. Das 
ELF-Format ist einfach das, was am Ende (nach dem linken) aus dem 
avr-gcc/WinAVR rauskommt. Egal ob unter Windows, Linux, BSD, <whatever>.
Das AVRStudio braucht die Datei nur, weil da auch die Debuginfos für den 
Debugger/Simulator mit drin sind. Unter Linux hättest Du mit dem GDB 
auch nicht viel Freude, wenn die Dir fehlen würden.

CU

von Martin M. (martin69)


Lesenswert?

Das geänderte Makefile hat funktioniert.

Allerdings habe ich nun noch wieder die Version von Ulrich Rading 
verwendet, um die SD-Karte auszulesen, nachdem ich den Hardwarefehler 
gefunden habe (die Version von Roland Riegel hab ich aufgrund der vielen 
Zeiger im Programm leider nicht so ganz geblickt - funktioniert hat sie 
aber prinzipiell schon).

Übrigens: Die Sache mit dem Spannungsteiler für die Signale hat bei mir 
die Signale extrem verschliffen. Hab die SPI-Taktfrequenz deutlich 
gedrosselt und dann war das Problem beseitigt.

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


Lesenswert?

... wrote:

> Warum der Autor des Makefile der Datei allerdings die Endung 'out'
> verpasst hat weis ich auch nicht.

Weil Windows nun mal nur glücklich wird, wenn die Dateien auch einen
Suffix haben.

Normalerweise wird die ausführbare Datei unter Unix beim Linken ohne
irgendeinen Suffix gespeichert, man compiliert also foo.c zu einem
foo.o, und linkt das dann zu einer Datei namens foo.  Da die für den
AVR enstehenden Dateien ohnehin nicht direkt ausführbar sind und
einer Nachbearbeitung bedürfen (avr-objcopy), und da Windows komplett
auf Dateinamensendungen basiert, hat man dem beim AVR-GCC mal
irgendwann einen Namen hinzu gegeben.  Da der Default-Name einer
ausführbaren Datei unter Unix »a.out« heißt, lag der Suffix .out hier
nahe.  Der Suffix .elf ist nicht minder Unfug, denn alle Objektdateien
sind im ELF-Format, auch die .o-Dateien, die als verschiebliche
Objekte zwischendrin entstehen.

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.