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
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
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.
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" "$@"
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)
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$ suPassword:
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)
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
Publicar un comentario