Forum: Compiler & IDEs OpenSuse: Probleme mit "Make all" "Unbekannte Option -mmcu=avr5"


von Sebastian S. (sebastian_s25)


Lesenswert?

Hallo Leute,

ich hab seit kurzem OpenSuse auf meinem Laptop und kenne mich dem 
entsprechend auch aus... :(

Ich hab avrdude, avrlibc und avrutils installiert und die Libraries 
sowie die Inclue-Path in .profile eingetragen.
1
C_INCLUDE_PATH=/opt/cross/avr/avr/include:/opt/cross/avr/include
2
export C_INCLUDE_PATH
3
4
###
5
LIBRARY_PATH=/opt/cross/avr/lib:/opt/cross/avr/avr/lib:/opt/cross/avr/avr/lib/avr5
6
export LIBRARY_PATH

wenn ich jetzt über die Konsole mit "Make all" versuche das Programm zu 
erstellen, kommt die Folgende Fehlermeldung.
1
mmr70v0.06 # make all
2
  CC main.c
3
as: Unbekannte Option »-mmcu=avr5«
4
make: *** [main.o] Fehler 1

Ich bin auch als "su" angemeldet...

Was hab ich vergessen?? Danke schon mal für eure hilfe ;)

MFG

Sebastian

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

as ist dein Host-Assembler, der die Option -mmcu=avr5 batürlich nicht 
kennt.  Und ich glaub kaum, daß dein OS auf AVR als Host läuft :-)

Ergo: Du verwendest den falschen Assembler, d.h. du willst avr-as 
verwednen oder avr-gcc als Assembler-Treiber (z.B. mit einem S- oder 
sx-File oder mit -x assembler-with-cpp).

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Ausserdem verstehe ich nicht, warum du C_INCLUDE_PATH und LIBRARY_PATH 
von Hand setzen mußt / willst.  Verwende avr-gcc -mmcu=avr5 zum Linken / 
Compilieren /Assemblieren und er weiß selbst welche libs er woher nehmen 
muß

von Sebastian S. (sebastian_s25)


Lesenswert?

OK...

Wie gesagt, meine Fähigkeiten sind stark begrenzt....

könntest du mir auch sagen wie ich das alles machen kann?

Da fällt mir ein, ich hab eigentlich auch "cross-avr-gcc" installiert...

Ne kurze anleitung wäre sehr hilfreich. ;)

von Rolf Magnus (Gast)


Lesenswert?

Sebastian S. schrieb:
> Ich bin auch als "su" angemeldet...

Dazu gibt es keinerlei Grund.

Sebastian S. schrieb:
> könntest du mir auch sagen wie ich das alles machen kann?

Irgendwo muß doch dein Makefile herkommen. Dort ist der falsche Compiler 
eingetragen. Das mußt du halt ändern. Da aber keiner dein Makefile 
kennt, wird es schwierig zu sagen, wie du es genau ändern mußt.

von Hans Ulli K. (Gast)


Lesenswert?

Sebastian S. schrieb:
> Hallo Leute,
>
> ich hab seit kurzem OpenSuse auf meinem Laptop und kenne mich dem
> entsprechend auch aus... :(
>
> Ich hab avrdude, avrlibc und avrutils installiert und die Libraries
> sowie die Inclue-Path in .profile eingetragen.

Wenn das aus den OpenSuse Repo ist dann gut ...

>
>
1
> C_INCLUDE_PATH=/opt/cross/avr/avr/include:/opt/cross/avr/include
2
> export C_INCLUDE_PATH
3
> 
4
> ###
5
> LIBRARY_PATH=/opt/cross/avr/lib:/opt/cross/avr/avr/lib:/opt/cross/avr/avr/lib/avr5
6
> export LIBRARY_PATH
7
>
>
> wenn ich jetzt über die Konsole mit "Make all" versuche das Programm zu
> erstellen, kommt die Folgende Fehlermeldung.
>
>
1
> mmr70v0.06 # make all
2
>   CC main.c
3
> as: Unbekannte Option »-mmcu=avr5«
4
> make: *** [main.o] Fehler 1
5
>
>

Hier wird der Host CC (C-Compiler) aufgerufen, was ja nicht der Compiler 
für dein Zielsystem ist.

> Ich bin auch als "su" angemeldet...
>

Bitte nicht als root arbeiten. Pakete installieren kannst du damit ja, 
aber nicht arbeiten.
Du könntest im schlechtesten Fall dein System beschädigen.

> Was hab ich vergessen?? Danke schon mal für eure hilfe ;)
>

Ja.
suche im Makefile die Zeile
1
CC=gcc
und ändere diese in
1
CC=cross-avr-gcc
> MFG
>
> Sebastian

von Sebastian S. (sebastian_s25)


Lesenswert?

Hi Leute,

danke schonmal für die Hilfe...

Leider bekomm ich jetzt diesen Fehler :(

1
mmr70v0.06> make all
2
  CC main.c
3
sh: cross-avr-gcc: Kommando nicht gefunden.
4
make: *** [main.o] Fehler 127


Ich hab jetzt auch cross-avr, cross-gcc-avr, gcc-avr usw. ausprobiert, 
aber immer der selbe Fehler..

Ich hab auch nochmal kontrolliert ob das Repository eingebunden ist. Und 
es ist so...

Im Anhang könnt ihr das Makefile finden. Das habe ich nicht selbst 
erstellt, sondern von diesem Beitrag genommen. 
(Beitrag "[AVR] FM-Transmitter für 1,50EUR --> Ansteuerung?" ; mmr70v0.06.zip)

Ich will das einfach nur kompilieren und drauf laden!!

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Und das naheliegende "avr-gcc"? Das andere sind Package-Bezeichnungen, 
nicht der Name des Executables.

von Hans Ulli K. (Gast)


Lesenswert?

Hmmm wenn ich die Liste am Anfang sehe fehlen da die binutils und gcc.

In OpenSuse sind diese im Repo drin
cross-avr-binutils
cross-avr-libc
cross-avr-gcc

für die komplette Toolchain
auch avrdude ist drin.

Damit dürfte sich der "Umweg" über /opt in .profile erübrigen

Dem Compiler kannst du über die Shell-Completion finden
Die <TAB> Taste ist dein Freund

von Sebastian S. (sebastian_s25)


Lesenswert?

Hmm...

kann ich da irgendwie was falsch installiert haben??
1
   CrossToolchain:avr
2
URL: http://download.opensuse.org/repositories/CrossToolchain:/avr/openSUSE_12.3/
3
Kategorie: YUM

Des steht in den Repositories drin...

Und das geb ich ein...
1
Sebastian@linux-xo4a:~> cd /home/Sebastian/Dokumente/Sony\ Ericcson\ FM-Transmitter/Code/mmr70v0.06
2
Sebastian@linux-xo4a:~/Dokumente/Sony Ericcson FM-Transmitter/Code/mmr70v0.06> make all  CC main.c
3
as: Unbekannte Option »-mmcu=avr5«
4
make: *** [main.o] Fehler 1
5
Sebastian@linux-xo4a:~/Dokumente/Sony Ericcson FM-Transmitter/Code/mmr70v0.06>

Die Fehlermeldung kommt wenn ich avr-gcc drin hab...

Mit Tab kommt das...
1
Sebastian@linux-xo4a:~/Dokumente/Sony Ericcson FM-Transmitter/Code/mmr70v0.06> avr
2
avr-addr2line   avr-elfedit     avr-gcc-nm      avr-insight     avr-objdump
3
avr-ar          avr-example     avr-gcc-ranlib  avr-ld          avr-ranlib
4
avr-as          avr-g++         avr-gcov        avr-ld.bfd      avr-readelf
5
avr-c++         avr-gcc         avr-gdb         avr-nesc-as     avr-size
6
avr-cpp         avr-gcc-4.8.2   avr-gdbtui      avr-nm          avr-strings
7
avrdude         avr-gcc-ar      avr-gprof       avr-objcopy     avr-strip
8
Sebastian@linux-xo4a:~/Dokumente/Sony Ericcson FM-Transmitter/Code/mmr70v0.06> avr

von Hans Ulli K. (Gast)


Lesenswert?

Du hast eine komplette Toolchain mit gcc und den binutils an Board.
Deine AVR Libs dürften unter /usr/avr liegen

Kommentiere erstmal die Änderungen in deinem .profile aus

Die bei den Libs holt sich gcc (bzw. avr-gcc) schon die richtigen ...
Bei den include's mußt du ggf. die Pfade im Makefile angeben und nur 
dort.

Das mit .profile ist hier nur Mist.

Mach mal einen Test ohne Makefile
1
echo "main () {}" > test.c
2
avr-gcc test.c -o test -static
sollte ohne Probleme durchlaufen

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Wobei das -static überflüssig und daher verwirrend ist.  Dynamisches 
Linken und -fpic etc. wird von avr-gcc nicht unterstützt.

von Sebastian S. (sebastian_s25)


Lesenswert?

Hallo Hans Ulli Kroll,

jetzt hab ich mal den Test gemacht und es kommt folgender Fehler
1
/mmr70v0.06
2
Sebastian@linux-xo4a:~/Dokumente/Sony Ericcson FM-Transmitter/Code/mmr70v0.06> echo "main () {}" > test.c
3
Sebastian@linux-xo4a:~/Dokumente/Sony Ericcson FM-Transmitter/Code/mmr70v0.06> avr-gcc test.c -o test -static
4
/tmp/cc6UWjng.s: Assembler messages:
5
/tmp/cc6UWjng.s:13: Error: too many memory references for `in'
6
/tmp/cc6UWjng.s:14: Error: too many memory references for `in'

wenn ich es ohne "-static" mache, kommt das gleiche....

Noch was. Wie kann ich die Pfade für die Includes angeben? Genau so wie 
im .profile und an welcher stelle wäre es da am besten?

von Hans Ulli K. (Gast)


Lesenswert?

Johann L. schrieb:
> Wobei das -static überflüssig und daher verwirrend ist.  Dynamisches
> Linken und -fpic etc. wird von avr-gcc nicht unterstützt.

danke.
Ich kenne mich nur auf mips, arm und x86 aus.

Sebastian S. schrieb:
> Hallo Hans Ulli Kroll,
>
> jetzt hab ich mal den Test gemacht und es kommt folgender Fehler
>
>
1
> /mmr70v0.06
2
> Sebastian@linux-xo4a:~/Dokumente/Sony Ericcson 
3
> FM-Transmitter/Code/mmr70v0.06> echo "main () {}" > test.c
4
> Sebastian@linux-xo4a:~/Dokumente/Sony Ericcson 
5
> FM-Transmitter/Code/mmr70v0.06> avr-gcc test.c -o test -static
6
> /tmp/cc6UWjng.s: Assembler messages:
7
> /tmp/cc6UWjng.s:13: Error: too many memory references for `in'
8
> /tmp/cc6UWjng.s:14: Error: too many memory references for `in'
9
>
>
> wenn ich es ohne "-static" mache, kommt das gleiche....
>

Seltsam.
Hast du alle Änderungen die du im ersten Post gemacht hast 
auskommentiert ??
Wie gesagt, das mit dem /opt Verzeichnis ist seltsam.
Normalerweise sollte das unter /usr/avr/ stehen.

> Noch was. Wie kann ich die Pfade für die Includes angeben? Genau so wie
> im .profile und an welcher stelle wäre es da am besten?

Wie gesagt ich mag solche Hacks nicht.
Dann komme ich zum Teil mit dem Cross-Compilieren vom Linux-Kernel und 
anderen Tools durcheinander.
Nach meiner Meinung ist sowas am besten im Makefile aufgehoben.

Nach diesem Schema
1
INCLUDE = /opt/cross/avr/avr/include:/opt/cross/avr/in clude
2
CFLAGS=+= -Wall -Os -I${INCLUDE}
andere Zeilen entsprechen anpassen.

von ein Gast (Gast)


Lesenswert?

Also unter openSUSE werden die binaries nach /opt/cross installiert, und 
unter /usr/bin werden wrapper scripte installiert, die $PATH 
entsprechend anpassen, damit die executables gefunden werden.

Ich vermute mal, dass du in deinem Makefile einfach nur die CC variable 
anpassen musst.

von CC = gcc
nach CC = avr-gcc

Und ansonsten keine variablen in .profile setzen, die Toolchain 
funktioniert nach dem Installieren sofort ohne anpassung.

von Sebastian S. (sebastian_s25)


Lesenswert?

ES GEHT!!!!

Keine Ahnung was der Fehler war...

Ich hab jetzt OpenSuse 13.1 neu drauf installiert, das Repository neu 
drauf.

Jetzt funktioniert es...


DANKE DANKE DANKE für eure Hilfe :D

Viele Grüße

Sebastian

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.