Hallo zusammen,
ich versuche derzeit möglichst schmerzfrei, eine aktuelle AVR-Toolchain
auf meinem Rechner zu installieren (Debian Bullseye). Früher war das ja
sehr einfach, da es out-of-the-box funktionierte:
1 | apt install gcc-avr avr-libc avrdude
|
Der gcc-avr in Debian ist aber uralt. Die avr-libc sowieso.
Nun bin ich, auch (besser: vor allem) dank dieses Forums und Beiträgen
insb. von Jörg, Veit D. und Johann, meinem Ziel gefühlt schon näher
gekommen. Mein Vorgehen soweit:
1. Alten gcc-avr 5.4.0 installieren (s.o.)
2. Eine aktuelle avr-libc bauen:
2a. Klone https://github.com/avrdudes/avr-libc
2b. ./bootstrap (Achtung, das hat eine python2-Abhängigkeit!) &&
./configure ... && make && make install
3. Von https://packs.download.microchip.com/ die zu den gewünscht
Controllern (d.h. von legacy gcc-avr nicht unterstützten Typen)
"device-specs" nach /usr/lib/gcc/avr/5.4.0/device-specs/ kopieren.
4. Ebenfalls von dort die gewünschten *.o- und *.a-Dateien nach
/usr/local/avr/lib/avrxmega3/short-calls/ kopieren. (Der restliche
Inhalt unter /usr/local/avr/ kommt von der selbstgebauten avr-libc).
Das, so dachte ich, müsste genug sein, um ein Projekt für einen der
neuen AVR-Typen zu bauen. Funktioniert aber leider nicht.
Konkretes Beispiel: Ich möchte ein Minimalprojekt "test.c" für einen
attiny202 bauen:
1 | avr-gcc -I /usr/local/avr/include/ -L /usr/local/avr/lib/avrxmega3/short-calls/ -mmcu=attiny202 test.c
|
Ergibt:
1 | In file included from /usr/local/avr/include/avr/io.h:759:0,
|
2 | from test.c:2:
|
3 | /usr/local/avr/include/avr/lock.h:234:0: warning: "LOCKBITS_DEFAULT" redefined
|
4 | #define LOCKBITS_DEFAULT (0xFF)
|
5 | ^
|
6 | In file included from /usr/local/avr/include/avr/io.h:438:0,
|
7 | from test.c:2:
|
8 | /usr/local/avr/include/avr/iotn202.h:4655:0: note: this is the location of the previous definition
|
9 | #define LOCKBITS_DEFAULT (0xc5)
|
10 | ^
|
11 | /usr/lib/gcc/avr/5.4.0/../../../avr/bin/ld: cannot find crtattiny202.o: Datei oder Verzeichnis nicht gefunden
|
12 | collect2: error: ld returned 1 exit status
|
Die warnings bekomme ich bestimmt selbst in den Griff. Das Problem ist,
dass er die crtattiny202.o nicht findet. Die ist aber da (siehe Punkt 4
von oben):
1 | ls /usr/local/avr/lib/avrxmega3/short-calls/
|
1 | crtattiny202.o crtattiny214.o crtattiny414.o crtattiny417.o crtattiny816.o libattiny202.a libattiny214.a libattiny414.a libattiny417.a libattiny816.a libc.a libprintf_flt.a libscanf_flt.a
|
2 | crtattiny212.o crtattiny412.o crtattiny416.o crtattiny814.o crtattiny817.o libattiny212.a libattiny412.a libattiny416.a libattiny814.a libattiny817.a libm.a libprintf_min.a libscanf_min.a
|
Was mache ich falsch?
Ich möchte bei dieser Gelegenheit ganz herzlich Jörg und Johann und
allen anderen Beteiligten danken, dass sie die Arbeiten an der avr-libc
wieder aufgenommen haben. Ich trage beizeiten gerne mal mit einer
Aktualisierung der Dokumentation bei.
Viele Grüße,
funkmaus.