Go Down

Topic: [Linux] Aggiornare la toolchain Avr (Read 18017 times) previous topic - next topic

leo72

'sta cosa comincia a farmi venire il mal di testa... :smiley-sweat:
Sul PC "cavia" ho rimesso tutto com'era prima. Oggi a casa vedrò se mi viene qualche altra idea.

astrobeed


Se parli dei binari io ti rispondo che non stiamo parlando della stessa cosa, io sto parlando del ramo ufficiale avr-gcc, tu di quanto una azienda ci fa, e a me non mi interessa quello che dicono in Atmel


Ok, chiarissimo.
Infatti io sto parlando degli eseguibili già compilati di Atmel, che sicuramente includono delle patch non ufficiali, e non del compilatore che scarichi dal repository.
Concordo col discorso che non è compito di Atmel fare manutenzione ad avr-gcc, però non sputiamo sul piatto dove mangiamo se loro ci offrono una soluzione funzionante al problema.
Non ho ne tempo, e nemmeno la voglia, di mettermi a verificare se le patch di Atmel a gcc sono fornite in sorgente o solo sotto forma di eseguibili, e tutto sommato non mi interessa, a me interessano solo i risultati finali.
Il compilatore è uno strumento di lavoro e non devo perderci tempo per capire come funziona o come posso modificarlo/correggerlo, se non va bene ne uso uno diverso o una nuova release che risolve i problemi.

leo72

Le patch sono sotto forma di codice sorgente.

astrobeed


'sta cosa comincia a farmi venire il mal di testa... :smiley-sweat:


Tu non hai idea di quello che ho passato io per farla funzionare sotto Windows, aggiusti una cosa e subito dopo ne trovi altre cinque che non vanno  :)
Però alla fine si tratta solo di correggere/modificare alcune righe nelle varie librerie, non ho tenuto il conto, ma in totale dovrebbero essere meno di 20 righe di codice, almeno questo per la versione Windows utilizzando in toto tutti i file, e gli eseguibili, della toolchain.
Con Linux se non fai la stessa cosa la situazione potrebbe risultare molto più complicata, vedi errore seriali sulla Mega2560.
Per quanto riguarda la seriale della Mega2560 ho provato ad aggiunge le altre tre, e usarle, allo sketch che stampa la tabella ASCII, non ho nessun errore di compilazione, adesso non posso verificare se poi funzionano sul serio, però più tardi lo faccio.
Per gli ATtiny non ho fatto nessuna prova, in questa prima fase mi interessava far funzionare il tutto con i processori standard di Arduino, quindi 328 e 2560,  ti anticipo che ora sembra essere tutto ok solo con la 0023, con la 1.0 ho ancora dei problemi residui.

astrobeed


Seconda prova.
NON funziona neanche con i Tiny. Ecco il BlinkWithoutDelay Vs. un Tiny84:


Provato adesso con il 4313, compila senza problemi.

astrobeed

#50
Mar 19, 2012, 12:27 pm Last Edit: Mar 19, 2012, 12:36 pm by astrobeed Reason: 1

Le patch messe online da Atmel riguardano avr32, che ha una machine layer completamente diversa da quella in avr8, non centra nulla con il problema in oggetto, che non la riguarda, e che quindi non puo' nemmeno lontanamente aiutare, anzi fa solo casino.


Avevamo già stabilito che le patch scaricabili attualmente dalla pagina della toolchain sono solo un update per gli AVR32 relativo all'ultima release della toolchain, ovvero è solo una parte di tutte le patch.

Edit: questo è il link postato da MauroTec dove dovrebbe esserci tutto.

Edit2: e qui si parla in dettaglio del mega2560 e del pc a 3 byte, ovvero una patch specifica anche se tocca andare a vedere le varie dipendenze per capirci qualcosa sul serio.

leo72


Provato adesso con il 4313, compila senza problemi.

Però non abbiamo usato la stessa cosa. Tu hai fatto le prove con la toolchain Atmel, io con la toolchain precompilata del sito linkato, che è costruita partendo dagli script di Bingo600 di Avrfreaks. A casa proverò con la toolchain Atmel.

astrobeed


Per me e' fisicamente impossibile usare le toolchain binarie-x86 di Atmel su quel portatile, dovrei necessariamente ricompilarle per la mia cpu, quindi seguo il consiglio che mi hanno dato a maggioranza ed aspetto il avr-gcc-4.7.1, anzi avr-gcc-4.7.3 seguendo le timeline dei changes promessi.


Indubbiamente sul tuo notebook sei obbligato a ricompilare tutto, tra parentesi lo stesso problema dovrebbe esistere per gli utenti MAC a meno che non sia possibile far girare un eseguibile Linux, senza ricompilarlo, sotto MAC OS, ma forse loro fanno prima ad usare BootCamp e caricare direttamente Windows  :)

MauroTec

Quote
Edit2: e qui si parla in dettaglio del mega2560 e del pc a 3 byte, ovvero una patch specifica anche se tocca andare a vedere le varie dipendenze per capirci qualcosa sul serio.


Code: [Select]
{ "avr6",                 ARCH_AVR6, NULL,                        0, 0x0200, "m2561" },
-  { "atmega2560",           ARCH_AVR6, "__AVR_ATmega2560__",        0, 0x0200, "m2561" },
+  { "atmega2560",           ARCH_AVR6, "__AVR_ATmega2560__",        0, 0x0200, "m2560" },
   { "atmega2561",           ARCH_AVR6, "__AVR_ATmega2561__",        0, 0x0200, "m2561" },
     /* Enhanced, == 256K.  */
     /* Xmega, <= 8K FLASH.  */


Questa patch corregge un'errore di copia incolla in pratica hanno dimenticato a corregere l'ultimo campo m2561 in m2560. La patch più corposa è questa: 30-gcc-4.5.1-fixedpoint-3-4-2010.patch che contiene codice che coinvolge tutti i micro. Mentre per attiny la patch più corposa è questa: 32-gcc-4.5.1-avrtiny10.patch

Quote
Capisco perfettamente quello che vuoi dire, però in questo caso invece di complicarsi la vita per capire come deve essere compilato gcc per la toolchain Atmel mi pare logico utilizzare gli eseguibili già pronti, e sicuramente funzionanti, almeno in prima battuta per verificare se il tutto funziona, poi nulla vieta, con calma e tranquillità, di ricompilarsi il tutto partendo dai sorgenti e dalle patch.


E siamo sempre li, il problema è che devi mettere i file nel posto giusto per provare con l'ide arduino, perchè a quello che ricordo la versione per linux non ha il compilatore incluso nel suo tree. Comunque ti assicuro che pasticciare con gli eseguibili non è la strada più semplice anche perchè su linux in fase di configurazione devi specificare il PREFIX e poi installare i file nei posti che rispecchiano il prefix, altrimenti potrebbe non funzionare e allora non trova un file e tu cominci a sporcare il sistema con link simbolici per far stare impiedi la baracca il tutto agendo alla cieca.

Comunque ognuno e libero di trovare e provare la sua strada, io le ho sperimentate tutte e quella della creazione dei pacchetti tramite i tools di sistema è la via più diretta e comoda, anche se prima sarebbe opportuno installare tutto manualmente in /usr/local ma in questo caso bisogna risolvere il problema di far vedere i tools ad arduino, il modo più semplice è quello di disinstallare i pacchetti avr-gcc & company allora scaricare i sorgenti, patchare manualmente, compilare ed installare, allora l'ide userà avr-g++ che trova nel path ed essendocene solo uno userà quello appena installato.

Io continuo a studiare un po le patch e a documentarmi poi passo alla vie di fatto.

Ciao.
AvrDudeQui front end per avrdude https://gitorious.org/avrdudequi/pages/Home

MauroTec

Aggiornamento:
Sono passato dal repo di fedora 15 e mi sono preso il pacchetto sorgente di avr-gcc-4.5.3 e ho provato la compilazione, come prima cosa ho notato un'errore di riferimento in libmpc.so allora ho scaricato la versione 0.9 e ho provato a ricompilare e tutto è andato a buon fine, ma ancora non ho provato ad installare ed usare avr-gcc, per questo ancora è presto, prima devo introdurre ad una ad una le patch di Atmel e tentare la compilazione, in più l'applicazione della patch può portare ad errore e bloccare il processo di creazione del pacchetto. Al momento ho introdotto solo la patch Atmel 50-gcc-4.5.1-new-devices.patch, ora aggiungo le altre poco per volta.

Chi volesse tentare dico che deve avere libmpc-devel, libmpfr-devel, gmp-devel, per le versioni io ho:
gmp-devel-5.0.4-4.fc12.i686
libmpc-devel-0.9-1.fc12.i686
mpfr-devel-3.0.0-4.fc12.i686

Ciao.
AvrDudeQui front end per avrdude https://gitorious.org/avrdudequi/pages/Home

MauroTec

BINGO.

Come si vede sotto la compilazione e creazione dei pacchetti binari è andata a buon fine, il problema era proprio la mancanza delle binutils aggiornata con le patch di Atmel.
Code: [Select]

+ /usr/lib/rpm/find-debuginfo.sh --strict-build-id /home/mauro/rpmbuild/BUILD/avr-gcc-4.5.1
extracting debug info from /home/mauro/rpmbuild/BUILDROOT/avr-gcc-4.5.1-2.fc12.i386/usr/libexec/gcc/avr/4.5.1/cc1
extracting debug info from /home/mauro/rpmbuild/BUILDROOT/avr-gcc-4.5.1-2.fc12.i386/usr/libexec/gcc/avr/4.5.1/cc1plus
extracting debug info from /home/mauro/rpmbuild/BUILDROOT/avr-gcc-4.5.1-2.fc12.i386/usr/libexec/gcc/avr/4.5.1/collect2
extracting debug info from /home/mauro/rpmbuild/BUILDROOT/avr-gcc-4.5.1-2.fc12.i386/usr/libexec/gcc/avr/4.5.1/lto-wrapper
extracting debug info from /home/mauro/rpmbuild/BUILDROOT/avr-gcc-4.5.1-2.fc12.i386/usr/libexec/gcc/avr/4.5.1/lto1
file /home/mauro/rpmbuild/BUILDROOT/avr-gcc-4.5.1-2.fc12.i386/usr/bin/avr-c++ has 1 other hard links
extracting debug info from /home/mauro/rpmbuild/BUILDROOT/avr-gcc-4.5.1-2.fc12.i386/usr/bin/avr-c++
extracting debug info from /home/mauro/rpmbuild/BUILDROOT/avr-gcc-4.5.1-2.fc12.i386/usr/bin/avr-cpp
hard linked /home/mauro/rpmbuild/BUILDROOT/avr-gcc-4.5.1-2.fc12.i386/usr/lib/debug/usr/bin/avr-g++.debug to /home/mauro/rpmbuild/BUILDROOT/avr-gcc-4.5.1-2.fc12.i386/usr/lib/debug/usr/bin/avr-c++.debug
file /home/mauro/rpmbuild/BUILDROOT/avr-gcc-4.5.1-2.fc12.i386/usr/bin/avr-gcc-4.5.1 has 1 other hard links
extracting debug info from /home/mauro/rpmbuild/BUILDROOT/avr-gcc-4.5.1-2.fc12.i386/usr/bin/avr-gcc-4.5.1
extracting debug info from /home/mauro/rpmbuild/BUILDROOT/avr-gcc-4.5.1-2.fc12.i386/usr/bin/avr-gcov
hard linked /home/mauro/rpmbuild/BUILDROOT/avr-gcc-4.5.1-2.fc12.i386/usr/lib/debug/usr/bin/avr-gcc.debug to /home/mauro/rpmbuild/BUILDROOT/avr-gcc-4.5.1-2.fc12.i386/usr/lib/debug/usr/bin/avr-gcc-4.5.1.debug
cpio: avr-gcc-4.5.1/gcc-avr/gcc/cfns.gperf: Cannot stat: No such file or directory
58479 blocks
+ /usr/lib/rpm/check-rpaths /usr/lib/rpm/check-buildroot
+ . ./os_install_post
++ /usr/lib/rpm/redhat/brp-compress
++ ./brp-strip /usr/bin/strip
++ ./brp-strip-static-archive /usr/bin/strip
++ ./brp-strip-comment-note /usr/bin/strip /usr/bin/objdump
++ /usr/lib/rpm/brp-python-bytecompile
++ /usr/lib/rpm/redhat/brp-python-hardlink
++ /usr/lib/rpm/redhat/brp-java-repack-jars
Processing files: avr-gcc-4.5.1-2.fc12.i686
Esecuzione(%doc) in corso: /bin/sh -e /var/tmp/rpm-tmp.9KQr1h
+ umask 022
+ cd /home/mauro/rpmbuild/BUILD
+ cd avr-gcc-4.5.1
+ DOCDIR=/home/mauro/rpmbuild/BUILDROOT/avr-gcc-4.5.1-2.fc12.i386/usr/share/doc/avr-gcc-4.5.1
+ export DOCDIR
+ rm -rf /home/mauro/rpmbuild/BUILDROOT/avr-gcc-4.5.1-2.fc12.i386/usr/share/doc/avr-gcc-4.5.1
+ /bin/mkdir -p /home/mauro/rpmbuild/BUILDROOT/avr-gcc-4.5.1-2.fc12.i386/usr/share/doc/avr-gcc-4.5.1
+ cp -pr gcc-4.5.1/COPYING gcc-4.5.1/COPYING.LIB /home/mauro/rpmbuild/BUILDROOT/avr-gcc-4.5.1-2.fc12.i386/usr/share/doc/avr-gcc-4.5.1
+ cp -pr gcc-4.5.1/README README.fedora /home/mauro/rpmbuild/BUILDROOT/avr-gcc-4.5.1-2.fc12.i386/usr/share/doc/avr-gcc-4.5.1
+ exit 0
Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PartialHardlinkSets) <= 4.0.4-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1
Requires: /bin/sh libc.so.6 libc.so.6(GLIBC_2.0) libc.so.6(GLIBC_2.1) libc.so.6(GLIBC_2.11) libc.so.6(GLIBC_2.2) libc.so.6(GLIBC_2.3) libc.so.6(GLIBC_2.3.4) libc.so.6(GLIBC_2.4) libc.so.6(GLIBC_2.7) libc.so.6(GLIBC_2.8) libdl.so.2 libdl.so.2(GLIBC_2.0) libdl.so.2(GLIBC_2.1) libelf.so.1 libelf.so.1(ELFUTILS_1.0) libelf.so.1(ELFUTILS_1.5) libgmp.so.10 libmpc.so.2 libmpfr.so.4 libz.so.1 rtld(GNU_HASH)
Processing files: avr-gcc-c++-4.5.1-2.fc12.i686
Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PartialHardlinkSets) <= 4.0.4-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1
Requires: libc.so.6 libc.so.6(GLIBC_2.0) libc.so.6(GLIBC_2.1) libc.so.6(GLIBC_2.11) libc.so.6(GLIBC_2.2) libc.so.6(GLIBC_2.3) libc.so.6(GLIBC_2.3.4) libc.so.6(GLIBC_2.4) libc.so.6(GLIBC_2.7) libc.so.6(GLIBC_2.8) libdl.so.2 libdl.so.2(GLIBC_2.0) libdl.so.2(GLIBC_2.1) libelf.so.1 libgmp.so.10 libmpc.so.2 libmpfr.so.4 libz.so.1 rtld(GNU_HASH)
Processing files: avr-gcc-debuginfo-4.5.1-2.fc12.i686
Controllo per file scompattato/i in corso: /usr/lib/rpm/check-files /home/mauro/rpmbuild/BUILDROOT/avr-gcc-4.5.1-2.fc12.i386
Scritto: /home/mauro/rpmbuild/SRPMS/avr-gcc-4.5.1-2.fc12.src.rpm
Scritto: /home/mauro/rpmbuild/RPMS/i686/avr-gcc-4.5.1-2.fc12.i686.rpm
Scritto: /home/mauro/rpmbuild/RPMS/i686/avr-gcc-c++-4.5.1-2.fc12.i686.rpm
Scritto: /home/mauro/rpmbuild/RPMS/i686/avr-gcc-debuginfo-4.5.1-2.fc12.i686.rpm
Esecuzione(%clean) in corso: /bin/sh -e /var/tmp/rpm-tmp.cCBbVy
+ umask 022
+ cd /home/mauro/rpmbuild/BUILD
+ cd avr-gcc-4.5.1
+ rm -rf /home/mauro/rpmbuild/BUILDROOT/avr-gcc-4.5.1-2.fc12.i386
+ exit 0
[mauro@localhost SPECS]$


Allego i file spec delle binutils e di avr-gcc
Nota che dovete modificare le pacth originali, se non siete in grado metto tutto su tarball e allego.


AvrDudeQui front end per avrdude https://gitorious.org/avrdudequi/pages/Home

leo72

Un po' di domande  :P

1) potresti spiegare passo passo da cosa sei partito e come hai agito?
2) hai provato ad usare questa toolchain per compilare degli sketch tramite l'IDE di Arduino?
3) hai verificato con quali micro (e quindi con quali micro) tutto funziona?
4) lo sketch ArduinoISP funziona?

MauroTec

Leo per 2,3 e 4 la risposta è no, non ho provato, però so che il compilatore lavora perchè viene compilato in due fasi, e c'è una fase di test durante la compilazione che produce codice per tutti i micro, infatti questa fase veniva condotta con successo per tutti i micro tranne per xmega dal momento che binutils nel mio sistema non conosce come linkare per questi micro. Dopo aver applicato le patch a binutils compilato ed aggiornato la versione presente nel sistema il test per xmega è andato a buon fine ed i pacchetti sono stati creati.

Le risposte 2,3,4 potrei averle ma mi devi dire o dare il tuo ide che di sicuro funziona, ma anche così avrò sicuramente qualche problema con jre, allora dovrei installare quella originale ecc, solo per dire che funziona con arduino. Certamente compilerò i mie programmi con questa toolchain per testarla, ma non prevede il core arduino, uso altre lib.

Nota che ancora devo compilare avr-libc con le pacth di Atmel, ora se mi passa il mal di capa e riesco a concentrarmi ci provo.

Come ci sono arrivato:
I link su avrfreaks, gli script uno in particolare get-pacthes.sh guardandolo all'interno si vede che usa wget per scaricare le pacth allora con il browser sono andato li, anche il file che scarica i pacchetti è stato utile per prendere le binutils 2.20.1 che non trovavo. Ora penso che tu potresti facilmente fare la stessa cosa su ubuntu tranne che li tu hai i .deb ed io non ricordo come si fa ad applicare le pacth, o meglio ricordo che si mettono tutte le pacth in un file con estensione .diff e se questo file e presente quando avvia dpkg questo le applica tutte in toto e poi fa più o meno quello che ha fatto rpmbuild per fedora, cioè applica le pacth avvia la configurazione, compila, ed installa su un percorso di comodo provvisorio e poic mette tutto nel .deb.

Nel mio caso ho preso dal repo di fedora 15 avr-gcc-4.5.3 ed ho provato con questo, ma avevo sempre un problema con le pacth, allora ho trovato sempre in fedora il pacchetto sorgente .src.rpm di avr-gcc-4.5.1 e con questo ho incontrato le stesse difficoltà ad applicare le patch, ho capito il motivo e ho corretto due pacth originali di ATMEL ma solo per portare a termine l'applicazione delle pacth, cioè non ho toccato codice compilabile.
Comunque il pacchetto src.rpm va installato (ma devi avere home rpmbuild inizializata) con rpm -i nomepac, poi cd homerpmbuild/SPEC
e avvio il processo di costruzione del pacchetto così: rpmbuild -ba --target=i686 avr-gcc.spec che crea dei pacchetti binari per arch i686, rpmbuild parsa il file avr-gcc e in base a questo avviengono tutte le fasi necessarie per passare da un sorgente ad uno o più pacchetti binari.

Nel tuo caso tu hai di bisogno di due file, il .dsc e il tar.gz dal repo di ubuntu e provi da questi a creare il pacchetto .deb, se va a buon fine poi sostituisci il tar.gz con la versione del pacchetto sorgente originale di avr-gcc sempre in tar-gz e modifichi leggermente il file .dsc (la modifica e intuitiva) e riavvia la creazione del pacchetto, poi trovi la procedura per pacthare il sorgente prima che si avvia la fase di configure e se va a buon fine allora installi e provi a compilare con Arduino IDE.

Ciao.
Se tu dovessi avere un progetto scritto in C/C++ che posso compilare per testare il problema dei 64k, passamelo che dopo aver compilato avr-libc provo.

AvrDudeQui front end per avrdude https://gitorious.org/avrdudequi/pages/Home

leo72

Ma una domanda. Rispetto ad usare lo script di Avrfreaks, che vantaggi hai avuto? Io con lo script ho compilato correttamente la toolchain però poi non sono riuscito all'atto pratico ad usarla con l'IDE 0022. Ora volevo riprovare con l'IDE 1.0.1RC visto che questa prima cerca di usare la toolchain incorporata.

MauroTec

#59
Mar 21, 2012, 09:18 am Last Edit: Mar 21, 2012, 09:40 am by MauroTec Reason: 1
Leo, anche tu puoi installare il tutto in automatico, ti basta entrare nella dir dove si trova avr-gcc (nota che viene compilato in sottodirectory, di solito chiamata build) e scrivere make install, il makefile installerà di default in /usr/local e se nel sistema non hai un pacchetto .deb di avr-gcc installato, l'ide richiamerà quello nel path di esecuzione che nel tuo caso si troverà in /usr/local/bin.

Il vantaggio è quello che hai quando trovi nei repo della distrò una pacchetto di aggiornamento, lo installi e provi se non sei contento ritorni alla versione precedente, poi puoi anche installare ad esempio avr-gcc 4.5.1 e avr-libc-1.8.0 al posto della 1.7.1 e provare se non va torni indietro e così via.

Ho provato a creare il pacchetto per avr-libc-1.7.1 con su le pacth di Amel, ma non ha funzionato, il problema è che mancano i makefile.am per le nuove MCU introdotte. Sotto si vede che cerca il makefile.in e non lo trova, anzi non trova proprio la directory con il nome della MCU, ora riprovo a creare delle cartelle con quel nome e vediamo se automake è in grado di creare i makefile.
Code: [Select]
cd . && /bin/sh /home/mauro/rpmbuild/BUILD/avr-libc-1.7.1/missing --run automake-1.11 --foreign
configure.ac:1151: required file `avr/lib/avr35/attiny1634/Makefile.in' not found
configure.ac:1163: required file `avr/lib/avr4/atmega48pa/Makefile.in' not found
configure.ac:1186: required file `avr/lib/avr5/at90pwm161/Makefile.in' not found
configure.ac:1186: required file `avr/lib/avr5/atmega325pa/Makefile.in' not found
configure.ac:1186: required file `avr/lib/avr5/atmega3250pa/Makefile.in' not found
configure.ac:1186: required file `avr/lib/avr5/atmega3290pa/Makefile.in' not found
configure.ac:1303: required file `avr/lib/avrxmega2/atxmega32x1/Makefile.in' not found
configure.ac:1327: required file `avr/lib/avrxmega6/atxmega128b1/Makefile.in' not found
configure.ac:1327: required file `avr/lib/avrxmega6/atxmega256a3bu/Makefile.in' not found
make: *** [Makefile.in] Error 1
[mauro@localhost avr-libc-1.7.1]$ make


ah, dimenticavo, ho compilato con avr-gcc-4.5.1, binutils-2.20.1 e avr-libc-1.6.7 (no atmel patch) e per il 328 ha funzionato senza errori o warning, ma questo me lo aspettavo, c'è da fare la prova con un 1284 o uno di quelle MCU che vedi sotto, questo appena risolvo il problema di avr-libc.



Ciao.
AvrDudeQui front end per avrdude https://gitorious.org/avrdudequi/pages/Home

Go Up