Ich bekomme die AVR Toolchain unter Leap 42.3 nicht mehr ans laufen.
Installiert wurde von den offiziellen Repos von opensuse. Soweit ich
sehe sind einige Instalationspfade durcheinandergeraten. Wahrscheinlich
fehlt nur irgendwo ein softlink um das ganze ans laufen zu bringen. Die
avrlibc wird z.B in usr/avr/sys-root/.... installiert aber in
/opt/cross/lib/gcc/avr/5.4.0/include gesucht. Spätestens beim beim
linken scheitert es endgültig. Welche Pfade/links fehlen hier? Hier die
Ausgabe eines compilerlaufs:
synth@linux-w560:~/Projekte/AVR/_369p_LFO_PWM> avr-gcc -Wall -v -Os -I
/usr/avr/sys-root/include/util -I /usr/avr/sys-root/include
-mmcu=atmega328p AVR_LFO_010.c -o AVR_LFO_010.elf
Using built-in specs.
Reading specs from
/opt/cross/lib/gcc/avr/5.4.0/device-specs/specs-atmega328p
COLLECT_GCC=/opt/cross/bin/avr-gcc
COLLECT_LTO_WRAPPER=/opt/cross/libexec/gcc/avr/5.4.0/lto-wrapper
Target: avr
Configured with: ../gcc-5.4.0/configure -v --target=avr --disable-nls
--mandir=/opt/cross/share/man --infodir=/opt/cross/share/info
--program-prefix=avr- --prefix=/opt/cross --with-gnu-ld --with-gnu-as
--enable-languages=c,c++ --disable-libssp --with-dwarf2
Thread model: single
gcc version 5.4.0 (GCC)
COLLECT_GCC_OPTIONS='-Wall' '-v' '-Os' '-I'
'/usr/avr/sys-root/include/util' '-I' '/usr/avr/sys-root/include' '-o'
'AVR_LFO_010.elf' '-specs=device-specs/specs-atmega328p' '-mmcu=avr5'
/opt/cross/libexec/gcc/avr/5.4.0/cc1 -quiet -v -I
/usr/avr/sys-root/include/util -I /usr/avr/sys-root/include -imultilib
avr5 -D__AVR_ATmega328P__ -D__AVR_DEVICE_NAME__=atmega328p AVR_LFO_010.c
-mn-flash=1 -mno-skip-bug -quiet -dumpbase AVR_LFO_010.c -mmcu=avr5
-auxbase AVR_LFO_010 -Os -Wall -version -o /tmp/ccgsZUFu.s
GNU C11 (GCC) version 5.4.0 (avr)
compiled by GNU C version 4.8.5, GMP version 5.1.3, MPFR version
3.1.2, MPC version 1.0.2
GGC heuristics: --param ggc-min-expand=100 --param
ggc-min-heapsize=131072
ignoring nonexistent directory
"/opt/cross/lib/gcc/avr/5.4.0/../../../../avr/sys-include"
ignoring nonexistent directory
"/opt/cross/lib/gcc/avr/5.4.0/../../../../avr/include"
#include "..." search starts here:
#include <...> search starts here:
/usr/avr/sys-root/include/util
/usr/avr/sys-root/include
/opt/cross/lib/gcc/avr/5.4.0/include
/opt/cross/lib/gcc/avr/5.4.0/include-fixed
End of search list.
GNU C11 (GCC) version 5.4.0 (avr)
compiled by GNU C version 4.8.5, GMP version 5.1.3, MPFR version
3.1.2, MPC version 1.0.2
GGC heuristics: --param ggc-min-expand=100 --param
ggc-min-heapsize=131072
Compiler executable checksum: 167d173fe2074ee91f3130acbbef3eb3
AVR_LFO_010.c: In function 'ADC_Init':
AVR_LFO_010.c:105:12: warning: variable 'result' set but not used
[-Wunused-but-set-variable]
uint16_t result;
^
COLLECT_GCC_OPTIONS='-Wall' '-v' '-Os' '-I'
'/usr/avr/sys-root/include/util' '-I' '/usr/avr/sys-root/include' '-o'
'AVR_LFO_010.elf' '-specs=device-specs/specs-atmega328p' '-mmcu=avr5'
/opt/cross/lib/gcc/avr/5.4.0/../../../../avr/bin/as -v -I
/usr/avr/sys-root/include/util -I /usr/avr/sys-root/include -mmcu=avr5
-mno-skip-bug -o /tmp/ccQo56Ow.o /tmp/ccgsZUFu.s
GNU assembler version 2.29.1 (avr) using BFD version (GNU Binutils;
CrossToolchain:avr / openSUSE_Leap_42.3) 2.29.1
COMPILER_PATH=/opt/cross/libexec/gcc/avr/5.4.0/:/opt/cross/libexec/gcc/a
vr/5.4.0/:/opt/cross/libexec/gcc/avr/:/opt/cross/lib/gcc/avr/5.4.0/:/opt
/cross/lib/gcc/avr/:/opt/cross/lib/gcc/avr/5.4.0/../../../../avr/bin/
LIBRARY_PATH=/opt/cross/lib/gcc/avr/5.4.0/avr5/:/opt/cross/lib/gcc/avr/5
.4.0/
COLLECT_GCC_OPTIONS='-Wall' '-v' '-Os' '-I'
'/usr/avr/sys-root/include/util' '-I' '/usr/avr/sys-root/include' '-o'
'AVR_LFO_010.elf' '-specs=device-specs/specs-atmega328p' '-mmcu=avr5'
/opt/cross/libexec/gcc/avr/5.4.0/collect2 -plugin
/opt/cross/libexec/gcc/avr/5.4.0/liblto_plugin.so
-plugin-opt=/opt/cross/libexec/gcc/avr/5.4.0/lto-wrapper
-plugin-opt=-fresolution=/tmp/ccQz4TYy.res
-plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lm
-plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-latmega328p
-mavr5 -Tdata 0x800100 -o AVR_LFO_010.elf crtatmega328p.o
-L/opt/cross/lib/gcc/avr/5.4.0/avr5 -L/opt/cross/lib/gcc/avr/5.4.0
/tmp/ccQo56Ow.o --start-group -lgcc -lm -lc -latmega328p --end-group
/opt/cross/lib/gcc/avr/5.4.0/../../../../avr/bin/ld: warning: -z relro
ignored.
/opt/cross/lib/gcc/avr/5.4.0/../../../../avr/bin/ld: cannot find
crtatmega328p.o: Datei oder Verzeichnis nicht gefunden
/opt/cross/lib/gcc/avr/5.4.0/../../../../avr/bin/ld: cannot find -lm
/opt/cross/lib/gcc/avr/5.4.0/../../../../avr/bin/ld: cannot find -lc
/opt/cross/lib/gcc/avr/5.4.0/../../../../avr/bin/ld: cannot find
-latmega328p
collect2: error: ld returned 1 exit status
Kann hier jemand helfen? Wie krieg ich das geregelt?
Harald A. schrieb:> Ich bekomme die AVR Toolchain unter Leap 42.3 nicht mehr ans laufen.> Installiert wurde von den offiziellen Repos von opensuse. Soweit ich> sehe sind einige Instalationspfade durcheinandergeraten. Wahrscheinlich> fehlt nur irgendwo ein softlink um das ganze ans laufen zu bringen.
Das sollte alles out-of-the-box funktionieren. Wenn (soft) Links
erforderlich sind, dann ist was mit der Installation / Distribution
faul.
> Die avrlibc wird z.B in usr/avr/sys-root/.... installiert aber in> /opt/cross/lib/gcc/avr/5.4.0/include gesucht.
Hier steht die libgcc und wird auch dort richtig gesucht, und das passt
zu
> --prefix=/opt/cross> Welche Pfade/links fehlen hier?
Die avr-libc Includes werden hier gesucht:
> ignoring nonexistent directory> "/opt/cross/lib/gcc/avr/5.4.0/../../../../avr/include"
also in $prefix/avr/include, aber avr-libc wurde offenbar mit
--prefix=usr/avr/sys-root/.... configured oder dahin installiert.
> -I /usr/avr/sys-root/include
Dies ist überflüssig bei korrekter Installation, und es wird eine
zerböselte Toolchain nicht reparieren.
> Wie krieg ich das geregelt?
Deine Alternativen: Eine funktionierende Toolchain besorgen, z.B. die
Atmel Toolchain für Linux, oder selbst generieren — die Quellen hast du
ja. Beachte dabei, dass gcc und avr-libc nicht beliebig kombinierbar
sind und explizite Abhängigkeiten bestehen.
Danke, ja nun, die Hoffnung ist halt immer, das die richtigen Repos auch
ein funktionierendes System bereitstellen. Unter 42.2 hat das alles
noch funktioniert. Mir ist klar das nur die richtigen links fehlen.
Allerdings habe ich mich zeitweise ziemlich verirrt. Nur wenn die Repos
keine funktionierende Installation bereitstellen ist es etwas schwierig
eine funktionierende Kette zu finden.
Harald A. schrieb:> Mir ist klar das nur die richtigen links fehlen.
Abermals: Nein.
So wie der Compiler configured wurde ist die avr-libc entweder nicht
vorhanden (und die vorhandene gehört zu einer anderen Distribution) oder
wurde falsch configured. Oder der Compiler wurde falsch configured.
Und es ist keine sooo große Neuigkeit, dass Linux-Distros gerne mal
verbockte Toolchains für exotische[tm] Tagets wie avr mitbringen.
Und das da gehört auch weg:
> -I /usr/avr/sys-root/include/util
Und was soll eigentlich das "sys-root" ?
Harald A. schrieb:> Na dann ist wohl doch besser zu Fuß und selbst bauen.
Hat den Vorteil, dass man --prefix selber wählen kann, z.B. in Home.
Und wenn was schiefgeht, kann man einfach den Install-Folder löschen.
binutils nimmt man 2.29 oder master
gcc nimmt man 7.2 (branches/gcc-7-branch HEAD oder
tags/gcc_7_2_0_release)
avr-libc nimmt man trunk
Und alles mit gleicher --prefix configuren.
Die Abhängigkeiten für GCC löst man auf per (aus GCC_SOURCE)
Ich bin heute nach einem Paketupdate über das gleiche Problem
gestolpert:
Die Toolchain hatte bislang auch unter 42.3 funktioniert, nachdem ich
OpenSuse aber als VM laufen lasse und somit nur gelegentlich starte,
standen heute 63 Updates an und danach hat die AVR Toolchain nicht mehr
funktioniert.
Nachdem ich gerade keine Lust hatte, mir meine eigene Toolchain zu
compiliere n, habe ich es mit folgenden Links versucht:
cd /opt/cross/avr/
ln -s /usr/avr/sys-root/include include
ln -s /usr/avr/sys-root/lib lib
ln -s /usr/avr/sys-root/man man
ln -s /usr/avr/sys-root/share share
Auf den ersten Blick sieht es nun so aus, als ob wieder alles
funktionieren würde...
Johann L. schrieb:>> ln -s /usr/avr/sys-root/lib lib>> Diesen Ordner verwendet auch Binutils.
Nicht in dieser komischen OpenSUSE-Version:
rpm -ql cross-avr-binutils
/opt
/opt/cross
/opt/cross/avr
/opt/cross/avr/bin
/usr/avr
/usr/avr/bin
...
Im Directory "/opt/cross/avr" wird von diesem Paket nur das
"bin"-Directory angelegt, was wiederum ein Symlink auf "/usr/avr/bin"
ist...
Herzlichen Dank für die Hilfe.
@Bernd
Die notwendigen Symlinks zu finden war genau meine Absicht. Leider habe
ich mich dann verirrt weil ich zu kleinteilige links auf das jeweils
fehlende file gesetzt habe. Jetzt funktioniert es mit einem kleinen
Problem. Die Datei delay.h steht in /usr/avr/sys-root/include/util/ und
wird nicht gefunden. Mit der Option -I kann ich das umgehen und den Pfad
angeben und dann läufts.
Meine Verständnis war aber bisher das die Suche in...../include beginnt
und dann in diesem Pfad weiter absteigt. Das scheint hier nicht der Fall
zu sein. Irgend eine Idee?
@Johann
Danke für die Hinweise. Ich werde das mit der lokalen Installation
sicher in Zukunft ausprobieren. Es ist besser das selbst im Griff zu
haben als sich auf die Distries zu verlassen.
Harald A. schrieb:> Jetzt funktioniert es mit einem kleinen Problem. Die Datei delay.h steht> in /usr/avr/sys-root/include/util/ und wird nicht gefunden.
Sollte sie aber. Der Include erfolgt üblicherweise qua
1
#include <util/delay.h>
Wenn also andere Header in /usr/avr/sys-root/include gefunden werden,
dann auch util/delay.h
Danke für die Tipps! Hab hier Leap 42.2 und nach einem Anbieterwechsel
der AVR-Toolchain auf cross-avr habe ich mir auch den Dreck an Land
gezogen und es funktioniert hier seit gestern überhaupt nichts mehr :(
Den Include-Pfad kann ich manuell im Makefile noch umbiegen, was ja auch
nicht sein sollte. Aber dann nimmt er wohl irgendwann den falschen
Assember "as" und der begreift die AVR-Parameter natürlich nicht.
Im makefile steht als Compiler allerdings ganz klar "avr-gcc" drin und
den findet die Kommando-Zeile auch ohne weitere Hilfestellung:
sk@linux-n5ws:~/bastel/atmel/git/Matrix2> avr-gcc -v
Using built-in specs.
Reading specs from /opt/cross/lib/gcc/avr/5.4.0/device-specs/specs-avr2
COLLECT_GCC=/opt/cross/bin/avr-gcc
COLLECT_LTO_WRAPPER=/opt/cross/libexec/gcc/avr/5.4.0/lto-wrapper
Target: avr
Configured with: ../gcc-5.4.0/configure -v --target=avr --disable-nls
--mandir=/opt/cross/share/man --infodir=/opt/cross/share/info
--program-prefix=avr- --prefix=/opt/cross --with-gnu-ld --with-gnu-as
--enable-languages=c,c++ --disable-libssp --with-dwarf2
Thread model: single
gcc version 5.4.0 (GCC)
Das finde ich super-ärgerlich. Die Toolchain selbst bauen halte ich auch
nicht für eine gute Option. Sowas muss einfach idiotensicher
funktionieren, wenn man es per automatischem Update anbietet. Jetzt muss
ich mich wieder tagelang mit Sekundär-Problemen rumschlagen, statt meine
Projekte weiter zu bringen :(
Mein System hat inzwischen zig Pfade für avr-Quatsch und ich kann nicht
beurteilen, welche veraltet sind und welche nicht.
Ohne externe Hilfe wie hier wäre ich wohl völlig aufgeschmissen. Ich
muss mir die Vorschläge hier noch in Ruhe durchlesen.
Wenn es nicht klappt, werde ich wohl einen Raspi als externe
AVR-Build-Station einrichten. Da scheint man das irgendwie besser im
Griff zu haben.
Gruß,
Stefan
Stefan K. schrieb:> Das finde ich super-ärgerlich. Die Toolchain selbst bauen halte ich auch> nicht für eine gute Option.
Immerhin hast du dann was das funktioniert. Und eine Umgebung zum
Generieren hast du mit Linux auch. Wie das vonstatten gehen kann hab
ich oben angerissen:
Beitrag "Re: Leap 42.3 AVR Toolchain tuts nicht"> Jetzt muss> ich mich wieder tagelang mit Sekundär-Problemen rumschlagen,
Naja, Tools (Binutils, GCC, LibC) zu generieren dauert keine 2 Tage.
Man muss sich freilich erst mit dem Gedanken anfreunden.
Oliver S. schrieb:> Unter Windows waäre das nicht> passiert...
???
Als kurzer Nachtrag:
Hab mir die Toolchain gestern tatsächlich selbst kompiliert weil keine
Besserung in Sicht war. Hab sie mir auch ins User-Verzeichnis
installiert, so dass ich bei Bedarf schnell testweise umschalten kann,
falls sich doch mal was in den Repositories tut.
>Oliver S. schrieb:>> Unter Windows waäre das nicht>> passiert...
Das dürfte als satirisches Bashing gemeint gewesen sein, schon wegen dem
Rechtschreibfehler :)
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