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?
> 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.
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.
> 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.
> 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.
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.
> 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 ;-)
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.
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 :-)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.