Forum: Compiler & IDEs GCC 4.2.1 für AVR bauen schlägt fehl


von Malte _. (malte) Benutzerseite


Lesenswert?

Hallo,
ich habe versucht, mir mal den GCC 4.2.1 für AVRs zu bauen und dabei die 
Schritte, beschrieben auf
http://avrwiki.com/wiki/index.php/Building_AVR_GCC
befolgt. Auf das bauen neurere Binutils habe ich verzichtet.

Der Compiliervorgang bricht nach einer Weile jedoch mit der Meldung

/home/malte/unzip/gcc-4.2.1/avr-gcc/./gcc/xgcc 
-B/home/malte/unzip/gcc-4.2.1/avr-gcc/./gcc/ -B/usr/local/avr/bin/ 
-B/usr/local/avr/lib/ -isystem /usr/local/avr/include -isystem 
/usr/local/avr/sys-include -O2  -O2 -g -O2  -DIN_GCC -DCROSS_COMPILE 
-W -Wall -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes 
-Wold-style-definition  -isystem ./include  -DDF=SF -Dinhibit_libc 
-mcall-prologues -Os -g  -DIN_LIBGCC2 -D__GCC_FLOAT_NOT_NEEDED 
-Dinhibit_libc -I. -I. -I../../gcc -I../../gcc/. -I../../gcc/../include 
-I../../gcc/../libcpp/include  -I../../gcc/../libdecnumber 
-I../libdecnumber -mmcu=avr25 -DL_mulsi3 -xassembler-with-cpp -c 
../../gcc/config/avr/libgcc.S -o libgcc/avr25/_mulsi3.o
../../gcc/config/avr/libgcc.S: Assembler messages:
../../gcc/config/avr/libgcc.S:280: Error: illegal opcode movw for mcu 
avr2
../../gcc/config/avr/libgcc.S:282: Error: illegal opcode movw for mcu 
avr2
make[3]: *** [libgcc/avr25/_mulsi3.o] Fehler 1

ab.
Hab ich was falsch gemacht oder ist hier der gcc fehlerhaft?

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


Lesenswert?

> Auf das bauen neurere Binutils habe ich verzichtet.

Das solltest du besser nicht. ;-)

Wenn du schon einen GCC baust, der die avr25- und avr35-Architektur
kennt, dann brauchst du natürlich auch binutils, die das verstehen.

von Malte _. (malte) Benutzerseite


Lesenswert?

Jörg Wunsch wrote:
> Wenn du schon einen GCC baust, der die avr25- und avr35-Architektur
> kennt, dann brauchst du natürlich auch binutils, die das verstehen.

Also bei meinem System sind die Binutils 2.16.1cvs20060117-1 dabei. Ich 
habe jetzt 2.17 heruntergeladen und compiliert. Gibt es eine Möglichkeit 
diese zum Compilieren von gcc 4.2.1 zu verwenden, ohne die Binutils ins 
System zu installieren? Ich möchte an meinem System lieber soweit nichts 
verändern, sondern primär testen ob ein bestehendes Projekt (welches mit 
gcc 3.4.3 läuft, mit gcc 4.1.0 aber nicht) mit dem gcc 4.2.1 läuft und 
wie da die Codegröße aussieht.

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


Lesenswert?

> Gibt es eine Möglichkeit
> diese zum Compilieren von gcc 4.2.1 zu verwenden, ohne die Binutils ins
> System zu installieren?

Du kannst beim ./configure einen beliebigen --prefix= angeben, in
den du das am Ende installiert haben möchtest, also zum Beispiel
eine Hierarchie unterhalb /tmp damit anlegen.  --prefix muss nur
für alle drei Teile der toolchain (binutils, GCC, avr-libc) gleich
sein.  Außerdem bin ich mir nicht ganz sicher, ich denke, dass du
${PREFIX}/bin im ${PATH} haben musst, auch bereits zum Compilieren
des GCC.

von Rolf Magnus (Gast)


Lesenswert?

> Außerdem bin ich mir nicht ganz sicher, ich denke, dass du
> ${PREFIX}/bin im ${PATH} haben musst, auch bereits zum Compilieren
> des GCC.

Andernfalls kann configure die binutils nicht finden. Wichtig ist auch, 
daß $PREFIX/bin im PATH vor dem Verzeichnis steht, in dem die schon 
installierten Binutils liegen.

von Malte _. (malte) Benutzerseite


Lesenswert?

Ok, ich habe jetzt hoffentlich die richtigen binutils verwendet
PATH="/opt/binutils_2.17/bin:"$PATH
jedenfalls gibt mir jetzt
which avr-as
/opt/binutils_2.17/bin/avr-as
zurück. Die Fehlermeldung beim erneuten compilieren
make clean
./configure --target=avr --program-prefix="avr
make
bleibt aber die gleiche.

von Rolf Magnus (Gast)


Lesenswert?

> make clean

Probier mal "make distclean". Andernfalls löscht configure seinen Cache 
nicht, und falls die Pfade zu den Binutils da gespeichert sind, wird 
beim nächsten configure nicht nochmal gesucht.

Und was Jörg schrieb:

> --prefix muss nur für alle drei Teile der toolchain (binutils, GCC,
> avr-libc) gleich sein.

Ich bin mir nicht sicher, ob das wirklich stimmt, aber er wird schon 
wissen, was er schreibt ;-)

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


Lesenswert?

Da fällt mir noch ein:

./configure --target=avr --program-prefix="avr"

Den --program-prefix braucht man gar nicht, der ist Standard.

Aber: ./configure ist nicht unterstützt.  Du musst ein separates
Verzeichnis machen (z. B. build), in dieses wechseln, und configure
von dort aufrufen.

Außerdem ist die libssp nicht unterstützt, da sie Posix-API-Funktionen
braucht (und letztlich ein zu Grunde liegendes Betriebssystem mit
Dateifunktionalität).

Beispiel:

mkdir build
cd build
../configure --target=avr --disable-libssp [--prefix=...]
make

Hab's eben probiert, damit läuft bei mir ein GCC 4.2.1 durch.

von Malte _. (malte) Benutzerseite


Lesenswert?

Nach einem make distclean blieben immer noch irgendwelche Dateien 
zurück, die ich dann entsprechend manuell gelöscht hab. Die gute 
Nachricht ist, dass er jetzt weiter kommt, allerdings hänge ich jetzt 
bei der nächsten Fehlermeldung:
../../../libssp/ssp.c: In function '__guard_setup':
../../../libssp/ssp.c:70: warning: implicit declaration of function 
'open'
../../../libssp/ssp.c:70: error: 'O_RDONLY' undeclared (first use in 
this function)

Könnte es sein, dass irgendwelche Header Dateien nicht gefunden werden?

Edit:
Ok, ich vermute, mit dem letzten Post von Jörg, lässt sich das beheben 
:-)

von Malte _. (malte) Benutzerseite


Lesenswert?

Ok, nachdem ich auch noch avr-libc mit dem passendem prefix compiliert 
und installiert habe funktioniert es jetzt :-) Danke an alle.
(Dummerweise läuft nur mein Projekt mit dem gcc 4.2.1 ebenfalls nicht, 
aber das wäre der Fall für einen anderen Thread).

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.