mikrocontroller.net

Forum: Compiler & IDEs Crosscompiling avr-gcc


Autor: Daniel (root) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
-c ../../../../libgcc/../gcc/config/avr/libgcc.S
../../../../libgcc/../gcc/config/avr/libgcc.S: Assembler messages:
../../../../libgcc/../gcc/config/avr/libgcc.S:876: Error: illegal opcode 
elpm for mcu avr5
../../../../libgcc/../gcc/config/avr/libgcc.S:877: Error: illegal opcode 
elpm for mcu avr5
make[4]: *** [_tablejump_elpm.o] Error 1

Meine Compiler:
source von gcc-core 4.4.1
gcc (GCC) 4.1.3 20080704 (prerelease) (Debian 4.1.2-25)

Hat jemand eine Ahnung wie man das Problem beseitigen kann?

Grüsse

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist elpm for core avr5 erlaubt?

Falls ja, ist es ein Fehler in den avr-binutils.
Falls nein, ist es ein Fehler in avr-gcc (resp. libgcc).

Ergo: Andere Version(en) verwenden oder Quelle patchen ;-)

Johann

Autor: Daniel (root) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke Johann. Ich bin jetzt auf gcc-4.3.3 umgestiegen und es klappt.
Ich hab den Compiler und die binutils intstalliert.
Mir bleibt nur noch die libc zu kompilieren.
Ich nehme an, dass dieser Schritt sowohl den neuen Compiler
sowie die binutils benötigt. (da ja die lib mit dem avr compiler
bearbeitet wird und nicht mit dem für x86-64)

Ich habe aber auf dem System noch einen avr-gcc sowie die
entsprechende binutils (avr-nm, avr-objcopy, etc).
Wenn ich configure --help anschaue, werde ich nicht schlau,
wie ich den Skript auf den neuen Compiler/binutils ansetzen kann.

Von der Regel Gebrauch machen, dass in PATH zuerst vorkommende
Programme zuerst benutzt werden? Scheint mir irgendwie unsauber.
Den Compilerpfad kann ich wahrscheinlich mit ./configure 
CC=/neuerpfad/gcc
festlegen.

Grüsse, Daniel

Autor: Daniel (root) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Configured with: ../configure --prefix=/opt/avr/gcc --target=avr --enable-languages=c --disable-nls --disable-libssp
Thread model: single
gcc version 4.3.3 (GCC) 
configure:3124: $? = 0
configure:3131: avr-gcc -V >&5
avr-gcc: '-V' option must have argument
configure:3135: $? = 1
configure:3158: avr-gcc -o conftest   /opt/avr/gcc/lib conftest.c  >&5
/tmp/ccEXN5ec.s: Assembler messages:
/tmp/ccEXN5ec.s:15: Error: too many memory references for `in'
/tmp/ccEXN5ec.s:16: Error: too many memory references for `in'
/tmp/ccEXN5ec.s:19: Error: no such instruction: `ldi r24,lo8(0)'
/tmp/ccEXN5ec.s:20: Error: no such instruction: `ldi r25,hi8(0)'
configure:3162: $? = 1
configure:3361: checking whether we are cross compiling
configure:3363: result: yes
configure:3367: checking for suffix of object files
configure:3393: avr-gcc -c   conftest.c >&5
/tmp/cczPenSg.s: Assembler messages:
/tmp/cczPenSg.s:15: Error: too many memory references for `in'
/tmp/cczPenSg.s:16: Error: too many memory references for `in'
/tmp/cczPenSg.s:19: Error: no such instruction: `ldi r24,lo8(0)'
/tmp/cczPenSg.s:20: Error: no such instruction: `ldi r25,hi8(0)'
configure:3397: $? = 1
configure: failed program was:
| /* confdefs.h.  */
| #define PACKAGE_NAME "avr-libc"
| #define PACKAGE_TARNAME "avr-libc"
| #define PACKAGE_VERSION "1.6.7"
| #define PACKAGE_STRING "avr-libc 1.6.7"
| #define PACKAGE_BUGREPORT "avr-libc-dev@nongnu.org"
| #define PACKAGE "avr-libc"
| #define VERSION "1.6.7"
| /* end confdefs.h.  */
| 
| int
| main ()
| {
| 
|   ;
|   return 0;
| }
configure:3412: error: cannot compute suffix of object files: cannot compile
See `config.log' for more details.


Was kann das Problem sein?
Probiert man ein minimales Program zu kompilieren, kommt auch ...

Error: too many memory references for `in'
Error: too many memory references for `in'
Error: no such instruction: `ldi r24,lo8(0)'
Error: no such instruction: `ldi r25,hi8(0)'

scheint als wäre der Compiler nicht in der Lage object Datei
zu erzeugen.

Natürlich klappt es nicht mit libc :-/

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sieht aus als würde der falsche Assembler genommen (as?).

Hast du avr-gcc und binutils im gleichen Pfad installiert? gcc geht 
teilweise von dem Standard-Layout aus und wenn er nix findet wird eben 
der normale as genommen. as gibts ja auch in $INSTALL/avr/bin, und wenn 
der net gefunden wird, wird's nen anderer as.

Bei meinem 'privaten' gcc (nicht für AVR) mache ich den build für die 
newlib genauso wie gmp und mpfr auch: Einfach nen Softlink in die 
Toplevel GCC-Quelle als "newlib". Das GCC-configure erkennt das und baut 
ne korrekte Target-Newlib.

Ich weiß net wie Jörg die avr-libc aufgezogen hat und ob ein 
In-Tree-Build funktioniert. Wär jedenfalls ein Versuch wert und ist 
deutlich einfacher wenn's geht, vor allem wenn du ein Cross-Build machen 
willst (zB unter Linux einen avr-gcc für MinGW bauen willst).

Johann

Autor: Daniel (root) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Ich weiß net wie Jörg die avr-libc aufgezogen hat und ob ein
>In-Tree-Build funktioniert. Wär jedenfalls ein Versuch wert und ist
>deutlich einfacher wenn's geht, vor allem wenn du ein Cross-Build machen
>willst (zB unter Linux einen avr-gcc für MinGW bauen willst).

ich hab mich doof angestellt ;)

in-tree-build hat funktioniert. Als --prefix= habe ich denselben
Ordner angebenen, in dem schon binutils und gcc drin sind.

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.