Arduino en Slackware 14.1

Para variar, con Slackware las cosas no son simples, sobre todo cuando linux sigue sin estar estandarizado en cuanto a librerias, directorios y varios detalles. Mas de alguno va a pensar 'que esta hablando este tipo, paso si esta estandarizado todo', bueno, en la practica no, y esto se volvio mas evidende desde que estan existiendo en paralelo las distribuciones para 32 y 64 bit. En Slackware es necesario compilar las aplicaciones con --libdir=/usr/lib64 para estar seguros de que la aplicacion ira a buscar las librerias con las que fue compilada al directorio correcto, sobre todo cuando tenemos instaladas las multilib en nuestro sistema operativo.

Evidencia de lo anteriormente comentado tenemos la aplicacion de Arduino, version 1.5.7, la cual viene con un avrdude que esta compilado para linux mono-arquitectura, es decir, el binario piensa que las librerias requeridas estan siempre en /usr/lib, lo cual no es cierto en nuestro sistema operativo ya que tenemos diferenciadas estas ultimas de las de 64bits por el directorio /usr/lib64.

Como nos damos cuenta de lo anterior ?, facil, primero que nada bajamos el flamante Arduino-1.5.7 de la pagina oficial de arduino. para luego descomprimir el archivo.

Una vez descomprimido, procedemos a cachurear los directorios directorio y solamente encontramos un script ejecutable.


Perfecto... funciona !!!... elejimos el codigo de ejemplo mas basico, File->Examples->01.Basics->Blink

Copilamos y tratamos de compilar/cargar --> ERROR !!!

/home/jpcordovae/Downloads/arduino-1.5.7/hardware/tools/avr/bin/avrdude: error while loading shared libraries: libreadline.so.6: cannot open shared object file: No such file or directory

mmm... vamos a chequear el ejecutable

bash-4.2$ ldd avrdude
        not a dynamic executable

Ok, es un script, revisemos..

bash-4.2$ cat avrdude
#!/bin/bash
export LD_LIBRARY_PATH="`dirname "$0"`/../lib/"
exec -a "$0" "`dirname "$0"`/avrdude_bin" "$@"

El archivo que estamos buscando es avrdude_bin. Revisamos las librerias que usa el ejecutable:

bash-4.2$ ldd avrdude_bin
        linux-vdso.so.1 (0x00007fff78fb8000)
        libusb-1.0.so.0 => /usr/lib64/libusb-1.0.so.0 (0x00007f0b09ac5000)
        libusb-0.1.so.4 => /usr/lib64/libusb-0.1.so.4 (0x00007f0b098c0000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f0b096a2000)
        libm.so.6 => /lib64/libm.so.6 (0x00007f0b093a0000)
        libreadline.so.6 => not found
        libncurses.so.5 => /lib64/libncurses.so.5 (0x00007f0b09149000)
        libtinfo.so.5 => not found
        libc.so.6 => /lib64/libc.so.6 (0x00007f0b08d80000)
        librt.so.1 => /lib64/librt.so.1 (0x00007f0b08b77000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f0b09d15000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007f0b08973000)

No estoy familiarizado con estas librerias, asi que me la voy a jugar y voy a tratar de recompilar el avrdude y que durante ese proceso tenga mas claridad de las libreria que faltan.

Bajo el avrdude, descomprimo, compilo e instalo:

bash-4.2$ wget http://download.savannah.gnu.org/releases/avrdude/avrdude-6.1.tar.gz
bash-4.2$ tar xzvf avrdude-6.1.tar.gz
bash-4.2$ cd avrdude-6.1
bash-4.2$ ./configure --libdir=/usr/lib64
bash-4.2$ make
bash-4.2$ su
Password: 
bash-4.2# make install

reviso las librerias de nuestro avrdude recien compilado:

bash-4.2# locate avrdude | grep /usr/
/usr/local/bin/avrdude
/usr/local/share/man/man1/avrdude.1
/usr/local/etc/avrdude.conf
bash-4.2# ldd /usr/local/bin/avrdude
        linux-vdso.so.1 (0x00007fffae189000)
        libusb-0.1.so.4 => /usr/lib64/libusb-0.1.so.4 (0x00007fad5b719000)
        libusb-1.0.so.0 => /usr/lib64/libusb-1.0.so.0 (0x00007fad5b50a000)
        libftdi1.so.2 => /usr/local/lib64/libftdi1.so.2 (0x00007fad5b2fc000)
        libelf.so.0 => /usr/lib64/libelf.so.0 (0x00007fad5b0e5000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fad5aec8000)
        libm.so.6 => /lib64/libm.so.6 (0x00007fad5abc5000)
        libreadline.so.5 => /usr/lib64/libreadline.so.5 (0x00007fad5a987000)
        libncurses.so.5 => /lib64/libncurses.so.5 (0x00007fad5a731000)
        libtermcap.so.2 => /lib64/libtermcap.so.2 (0x00007fad5a52d000)
        libc.so.6 => /lib64/libc.so.6 (0x00007fad5a164000)
        librt.so.1 => /lib64/librt.so.1 (0x00007fad59f5c000)
        /lib64/ld-linux-x86-64.so.2 (0x00007fad5b95f000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007fad59d57000)

Perfecto, las librerias estaban en nuestro sistema operativo, pero las estaba buscando en un directorio que no correspondia por nuestra arquitectura.

Ahora tenemos dos opciones, modificamos el scritp de Arduino para que vaya en busca del avrdude nuevo, o reemplazamos el avrdude_bin, y francamente prefiero usar la segunda opcion, sobreescribo avrdude_bin con avrdude compilado.

bash-4.2$ cp avrdude ../arduino-1.5.7/hardware/tools/avr/bin/avrdude_bin

Intento nuevamente ejecutar el arduino, yyyy..... error !!!

Resulta que tengo un conversor USB a Serial que compre en Olimex, que calza perfecto en mi arduino pro mini, sin embargo como usuario normal del sistema operativo, y por defecto, no tengo acceso al puerto serial

Esto tiene facil solucion, como root agrego a mi usuario, en este caso jpcordovae al grupo dialout, pero esolo dejo en manos de Uds.

Luego de eso, tengo mi Arduino funcionando perfectamente:

Sketch uses 1,030 bytes (7%) of program storage space. Maximum is 14,336 bytes.
Global variables use 9 bytes (0%) of dynamic memory, leaving 1,015 bytes for local variables. Maximum is 1,024 bytes.
/home/jpcordovae/Downloads/arduino-1.5.7/hardware/tools/avr/bin/avrdude -C/home/jpcordovae/Downloads/arduino-1.5.7/hardware/tools/avr/etc/avrdude.conf -v -v -v -v -patmega168 -carduino -P/dev/ttyUSB1 -b19200 -D -Uflash:w:/tmp/build2314342869230254085.tmp/Blink.cpp.hex:i 

avrdude: Version 6.1, compiled on Jul 27 2014 at 13:59:30
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2014 Joerg Wunsch

         System wide configuration file is "/home/jpcordovae/Downloads/arduino-1.5.7/hardware/tools/avr/etc/avrdude.conf"
         User configuration file is "/home/jpcordovae/.avrduderc"
         User configuration file does not exist or is not a regular file, skipping

         Using Port                    : /dev/ttyUSB1
         Using Programmer              : arduino
         Overriding Baud Rate          : 19200
avrdude: Send: 0 [30]   [20] 
avrdude: Send: 0 [30]   [20] 
avrdude: Send: 0 [30]   [20] 
avrdude: Recv: . [14] 
avrdude: Recv: . [10] 
         AVR Part                      : ATmega168
         Chip Erase delay              : 9000 us
         PAGEL                         : PD7
         BS2                           : PC2
         RESET disposition             : dedicated
         RETRY pulse                   : SCK
         serial program mode           : yes
         parallel program mode         : yes
         Timeout                       : 200
         StabDelay                     : 100
         CmdexeDelay                   : 25
         SyncLoops                     : 32
         ByteDelay                     : 0
         PollIndex                     : 3
         PollValue                     : 0x53
         Memory Detail                 :

blah blah blah blah 

avrdude: verifying ...
avrdude: 1030 bytes of flash verified
avrdude: Send: Q [51]   [20] 
avrdude: Recv: . [14] 
avrdude: Recv: . [10] 

avrdude done.  Thank you.

Comentarios

Entradas populares