www.mikrocontroller.net

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


Autor: Malte __ (malte) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Malte __ (malte) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Malte __ (malte) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ;-)

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Malte __ (malte) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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 
:-)

Autor: Malte __ (malte) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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).

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.