Mostrando entradas con la etiqueta udev. Mostrar todas las entradas
Mostrando entradas con la etiqueta udev. Mostrar todas las entradas

sábado, 2 de agosto de 2014

MSP430 toolchain in Ubuntu 14.04 with Eclipse Luna, installation & setup brief


This is a lean compilation of the previous 4 articles.
The instructions are intended to install mspgcc4.7 devel version, mspdebug 0.22, and Eclipse CDT Luna on Ubuntu 14.04 amd64 from source, and to configure msp430 and mspdebug to work from Eclipse.
Good luck!!!

mspgcc


Will be installed in /usr/local/msp430

cd ~
mkdir mspgcc_install
cd mspgcc_install

#Dependencies
sudo apt-get install patch ncurses-dev build-essential bison flex zlib1g-dev sed automake gawk mawk libusb-1.0.0 libusb-1.0.0-dev dos2unix srecord


#Downloads:

wget http://sourceforge.net/projects/mspgcc/files/mspgcc/DEVEL-4.7.x/mspgcc-20120911.tar.bz2
wget http://sourceforge.net/projects/mspgcc/files/msp430mcu/msp430mcu-20130321.tar.bz2
wget http://sourceforge.net/projects/mspgcc/files/msp430-libc/msp430-libc-20120716.tar.bz2
wget http://ftpmirror.gnu.org/binutils/binutils-2.22.tar.bz2
wget http://ftp.gnu.org/pub/gnu/gcc/gcc-4.7.0/gcc-4.7.0.tar.bz2
wget http://ftp.gnu.org/pub/gnu/gdb/gdb-7.2a.tar.bz2

wget http://sourceforge.net/p/mspgcc/bugs/_discuss/thread/fd929b9e/db43/attachment/0001-SF-357-Shift-operations-may-produce-incorrect-result.patch
wget http://sourceforge.net/p/mspgcc/bugs/352/attachment/0001-SF-352-Bad-code-generated-pushing-a20-from-stack.patch

#GDB patch download
wget -O gdb.patch https://sourceware.org/git/?p=gdb.git;a=patch;h=7f62f13c2b535c6a23035407f1c8a36ad7993dec

#Uninstall texinfo 5.x and install oldversion 4.x
wget http://ftp.br.debian.org/debian/pool/main/t/texinfo/texinfo_4.13a.dfsg.1-10_amd64.deb
sudo dpkg -r texinfo
sudo dpkg -i texinfo_4.13a.dfsg.1-10_amd64.deb

#Extract

tar xvfj mspgcc-20120911.tar.bz2
tar xvfj binutils-2.22.tar.bz2 
tar xvfj gcc-4.7.0.tar.bz2  
tar xvfj gdb-7.2a.tar.bz2
tar xvfj msp430mcu-20130321.tar.bz2 
tar xvfj msp430-libc-20120716.tar.bz2 


#Create build folders
mkdir build
cd build
mkdir binutils 
mkdir gcc
mkdir gdb
cd ..

#Binutils install

cd binutils-2.22
patch -p1<../mspgcc-20120911/msp430-binutils-2.22-20120911.patch
cd ../build/binutils 
../../binutils-2.22/configure --target=msp430 --prefix=/usr/local/msp430 2>&1 | tee co
make 2>&1 | tee mo
sudo make install 2>&1 | tee moi


#gcc
cd ../../gcc-4.7.0
patch -p1 < ../mspgcc-20120911/msp430-gcc-4.7.0-20120911.patch
patch -p1< ../0001-SF-352-Bad-code-generated-pushing-a20-from-stack.patch
patch -p1< ../0001-SF-357-Shift-operations-may-produce-incorrect-result.patch

./contrib/download_prerequisites
#ira-int.h replace
cd gcc
rm ira-int.h
wget -O ira-int.h https://gcc.gnu.org/viewcvs/gcc/branches/gcc-4_7-branch/gcc/ira-int.h?revision=191605&view=co&pathrev=191605

cd ../../build/gcc 
../../gcc-4.7.0/configure --target=msp430 --enable-languages=c,c++ --prefix=/usr/local/msp430 2>&1 | tee co
make 2>&1 | tee mo
#The previous command take a while (tens of minutes), continue to install mspdebug or Eclipse Luna if you don't want to wait.
sudo make install 2>&1 | tee moi

#If you are error-free at this point, congratulations!!! you can continue.
#Otherwise, sorry, you are on your own... the 43oh.com guys can help!!!

#Update PATH
export PATH=/usr/local/msp430/bin/:$PATH
sudo sed -e '/^PATH/s/"$/:\/usr\/local\/msp430\/bin"/g' -i /etc/environment

#Check msp430-gcc, must return 4.7.0 20120322
msp430-gcc --version

#Install gdb
cd ../../gdb-7.2
patch -p1 < ../mspgcc-20120911/msp430-gdb-7.2a-20111205.patch
patch -p1< ../gdb.patch
cd ../build/gdb
../../gdb-7.2/configure --target=msp430 --prefix=/usr/local/msp430 2>&1 | tee co 
make 2>&1 | tee mo
sudo make install 2>&1 | tee moi 
#If error verify you have old version texinfo package 

#Check gdb installation:
msp430-gdb --version
#Must return 7.2


#msp430mcu and msp430-libc
cd ../../msp430mcu-20130321/
sudo MSP430MCU_ROOT=`pwd` ./scripts/install.sh /usr/local/msp430 | tee so

cd ../msp430-libc-20120716/src/
make 2>&1 | tee mo
sudo PATH=$PATH make PREFIX=/usr/local/msp430 install 2>&1 | tee moi
cd ../..

#If needed, remove old version of texinfo and install the new one
sudo dpkg -r texinfo
sudo apt-get install texinfo

mspdebug


sudo apt-get install libusb-dev libusb-1.0.0 libusb-1.0.0-dev
#Optional, see compilation variant below:
sudo apt-get install libreadline6-dev

wget http://downloads.sourceforge.net/project/mspdebug/mspdebug-0.22.tar.gz
tar xvfz mspdebug-0.22.tar.gz
cd mspdebug-0.22
#if libreadline:
make 2>&1 | tee mo
#else:
make WITHOUT_READLINE=1 2>&1 | tee mo


#If make complains like:
#util/usbutil.h:22:17: fatal error: usb.h: No such file or directory
#it's because libusb-dev package is not installed (it's not the same than libusb-1.0.0-dev), see dependencies above

sudo make install 2>&1 | tee moi
cd ..

#udev rules, new file 61-TI-MSP430.rules in /etc/udev/rules.d
sudo bash -c "echo 'ATTRS{idVendor}=="0451", ATTRS{idProduct}=="f432", MODE="0660", GROUP="plugdev" #ez430 tools: Launchpad v1.5 and v1.4, Chronos watch, FRAM Exp. Board' > /etc/udev/rules.d/61-TI-MSP430.rules"

sudo bash -c "echo 'ATTRS{idVendor}=="2047", ATTRS{idProduct}=="0010", MODE="0660", GROUP="plugdev" #msp-fet430uif' >> /etc/udev/rules.d/61-TI-MSP430.rules"

sudo addgroup yourUserName plugdev
sudo service udev restart  

#OPTIONAL TILIB v3 installation, for msp-fet430uif debugger, or newer microcontrollers/boards (see http://forum.43oh.com/topic/5706-use-mspdebug-to-upgrade-msp430fr5969/) ignore if you don't need it.
sudo apt-get install libudev-dev libfox-1.6-0 autotools-dev autoconf automake libtool libboost-all-dev
mkdir tilib
cd tilib
wget http://www.ti.com/lit/sw/slac460i/slac460i.zip

wget https://github.com/downloads/signal11/hidapi/hidapi-0.7.0.zip
unzip slac460.zip  
unzip hidapi-0.7.0.zip 
cd MSPDebugStack_OS_Package/ThirdParty/
mkdir lib
mkdir include

cd ../../hidapi-0.7.0/linux/

#Edit makefile of hidapi

sed -i 's/CFLAGS   ?= -Wall -g/CFLAGS   ?= -Wall -g -fPIC/g' Makefile
sed -i 's/CXXFLAGS ?= -Wall -g/CXXFLAGS ?= -Wall -g -fPIC/g' Makefile
sed -i 's/LIBS      = `pkg-config libusb-1.0 libudev --libs`/LIBS      = `pkg-config libusb-1.0 libudev --libs` -lpthread/g' Makefile


#Build hidapi, copy to MSPDebugStack_OS_Package, and build libmsp430.so

make 2>&1 | tee mo
cp hid-libusb.o ../../MSPDebugStack_OS_Package/ThirdParty/lib
cp ../hidapi/hidapi.h ../../MSPDebugStack_OS_Package/ThirdParty/include
cd ../../MSPDebugStack_OS_Package/
make 2>&1 | tee mo
#Copy .so library to system path
sudo cp libmsp430.so /usr/local/lib

#Plug in ms-fet430uif and do
mspdebug tilib --allow-fw-update 


Eclipse Luna

cd ~
mkdir eclipse_install
cd eclipse_install
#Last version is RC3 at this time. Check last version at http://www.eclipse.org/downloads/index-developer.php?Luna
wget -O eclipse-cpp-luna-RC3-linux-gtk-x86_64.tar.gz http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/luna/RC3/eclipse-cpp-luna-RC3-linux-gtk-x86_64.tar.gz
tar zxvf eclipse-cpp*
sudo su -c "chown -R root:root eclipse && mv eclipse /opt/eclipse"
sudo su -c "ln -s /opt/eclipse/eclipse /usr/local/bin/eclipse"

#Create unity launcher
cat > ./eclipse.desktop <<EOF
[Desktop Entry]
Version=4.4
Name=Eclipse Luna CDT
Comment= RC3 gtk x86_64
Exec=/opt/eclipse/eclipse
Icon=/opt/eclipse/icon.xpm
Terminal=false
Type=Application
Categories=Application;IDE;Development
EOF


chmod +x eclipse.desktop
sudo cp eclipse.desktop /usr/share/applications/

#Test if eclipse runs:
eclipse

JVM



#If the last command returns error, there is no JVM installed or the installed version is old, you have to install a JVM otherwise -unless you want to use specifically a separate JVM for eclipse - skip this.
#Can't use a command to download, you need to accept license agreement before:
#http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html



tar zxvf jdk* -C /tmp/
sudo su
if [ ! -d '/usr/lib/jvm' ]; then mkdir /usr/lib/jvm; fi
chown -R root:root /tmp/jdk1.8* && mv /tmp/jdk1.8* /usr/lib/jvm/

update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.8*/bin/java 1065
update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk1.8*/bin/javac 1065
update-alternatives --install /usr/bin/jar jar /usr/lib/jvm/jdk1.8*/bin/jar 1065
update-alternatives --install /usr/bin/javaws javaws /usr/lib/jvm/jdk1.8*/bin/javaws 1065
exit

#Optional, in case you have more than one JVM installed. Change the version name if needed
sudo sed -i '/-vmargs/i\-vm' /opt/eclipse/eclipse.ini
sudo sed -i '/-vmargs/i\/usr/lib/jvm/jdk1.8.0_11/bin/java' /opt/eclipse/eclipse.ini


Eclipse setup


That's all folks, any suggestions/corrections put it in the comments and I will be happy to address it.

domingo, 20 de julio de 2014

msp430 toolchain en Ubuntu 14.04 - parte II: mspdebug

Actualización: hice un resumen para ejecutar todo desde la consola utilizando comandos, si quieren ahorrarse el palabrerío: mspdebug

Con mspdebug vamos a poder programar y depurar prácticamente cualquier herramienta de desarrollo y microcontrolador msp430. El reloj Chronos (ez430), launchpad, fet target boards, placas de Olimex, programador/depurador FET etc, etc.
Antes del proyecto mspgcc había otro proyecto llamado mspgcc4 que trabajaba con un programa gdb-proxy.

Pero el mspdebug realiza las funciones del gdb-proxy, además de la interfaz con el depurador o el microcontrolador.

El sitio es:
http://mspdebug.sourceforge.net/
La última versión se encuentra en:
http://sourceforge.net/projects/mspdebug/files/

La última versión a la fecha es la 0.22:
http://sourceforge.net/projects/mspdebug/files/mspdebug-0.22.tar.gz/download
Descomprimir, make, sudo make install y listo.
Puede ser necesario compilar con
make WITHOUT_READLINE=1
si no está instalado el paquete libreadline-dev (verificar con synaptic).
make 2>&1 | tee mo
sudo make install 2>&1 | tee moi

Agregado 2 de Julio de 2014:
Si sale error:
In file included from util/usbutil.c:22:0:
util/usbutil.h:22:17: fatal error: usb.h: No such file or directory

Es porque falta instalar el paquete libusb-dev (que no es lo mismo que libusb-1.0.0-dev !!!):
sudo apt-get install libusb-dev

Vamos a comprobar si mspdebug funciona:
Al enchufar el launchpad deberíamos poder comunicarnos con él ejecutando
sudo mspdebug rf2500
Nos va a aparecer algo como esto:

Desde allí ya podemos escribir/leer programas al msp430. Generalmente en este punto lo único que hago es ejecutar el comando gdb y comandarlo a través del eclipse.
Podemos salir con exit y ya podemos desenchufar el launchpad.

No queremos estar llamando a mspdebug con sudo todo el tiempo, por eso agregamos reglas a udev para que nuestro usuario de ubuntu tenga permisos de lectura y escritura.

udev


/etc/udev/rules.d$ sudo gedit 61-TI.rules

udev se encarga entre otras cosas de manejar lo que enchufamos al puerto usb y decidir los permisos de acceso que tiene nuestro usuario. Las reglas se aplican secuencialmente y una puede anular a la otra. El orden de aplicación de la regla viene dado por el número al principio del nombre de archivo. Elegí 61 arbitrariamente, he visto que algunos usan 40, otros 90... en fin; no deberíamos tener problema con ninguna de esas opciones.
El resto del nombre de archivo también es a elección.
Mi archivo contiene las siguientes líneas:
ATTRS{idVendor}=="0451", ATTRS{idProduct}=="f432", MODE="0660", GROUP="plugdev" #Launchpad v1.5
ATTRS{idVendor}=="2047", ATTRS{idProduct}=="0010", MODE="0660", GROUP="plugdev" #msp-fet430uif


Para más información sobre udev hay buena información en hackaday:
http://hackaday.com/2010/08/11/how-to-launchpad-programming-with-linux/
http://hackaday.com/2009/09/18/how-to-write-udev-rules/

¿Y de donde obtengo idVendor y idProduct?.
Al enchufar el launchpad (o el FET, o el reloj Chronos...), podemos verlo con:
lsusb


En la línea resaltada aparece la entrada del launchpad, 0451 es el VID (vendor ID) y f432 el PID (product ID).
Si queremos ver información adicional del dispositivo (interfaces, endpoints...), podemos hacer
lsusb -s 004:003 -v

Agregamos una línea por herramienta de desarrollo.
Luego de eso debemos agregarnos al grupo groupdev:
sudo addgroup tu_nombre_de_usuario plugdev.

Y reiniciamos el servicio udev:
sudo service udev restart

TILIB v3

Guía:
https://rtime.felk.cvut.cz/hw/index.php/MSP430F5529_Launchpad#MSP430.DLLv3

Si queremos usar la librería tilib que provee TI para depurar:
http://processors.wiki.ti.com/index.php/MSP_Debug_Stack
Debemos bajar el archivo slac460 (actualmente versión "i"):
http://processors.wiki.ti.com/index.php/MSPDS_Open_Source_Package
http://www-s.ti.com/sc/techzip/slac460.zip

Descomprimir e ir a la carpeta MSPDebugStack_OS_Package.
Según README-BUILD es necesario bajar/compilar/instalar libboost, yo instalé el paquete libboost-all-dev con synaptic para ahorrarme la espera (versión 1.54.0.1ubuntu1). Y aprovechando el synaptic abierto, instalamos dependencias:
libudev-dev (agrega una parva de paquetes para instalar), libfox-1.6-0 (debería estar dentro del conjunto anterior), autotools-dev, autoconf, automake, libtool.

Luego bajamos
https://github.com/signal11/hidapi/downloads
La versión actual es la 0.7.0. Descomprimir y editar el archivo
/hidapi-0.7.0/linux/Makefile
Reemplazar
CFLAGS   ?= -Wall -g
por
CFLAGS   ?= -Wall -g -fPIC

CXXFLAGS ?= -Wall -g
por
CXXFLAGS ?= -Wall -g -fPIC

LIBS      = `pkg-config libusb-1.0 libudev --libs`
por
LIBS      = `pkg-config libusb-1.0 libudev --libs` -lpthread

Guardar y compilar:
/hidapi-0.7.0/linux$ make

Copiar /hidapi-0.7.0/linux/hid-libusb.o
a /MSPDebugStack_OS_Package/ThirdParty/lib/

y /hidapi-0.7.0/hidapi/hidapi.h
a /MSPDebugStack_OS_Package/ThirdParty/include/

Ahora sí podemos compilar tilib con make:
daniel@daniel-desktop:~/Install/mspgcc/tilib/MSPDebugStack_OS_Package$ make

Copiar libmsp430.so a /usr/local/lib:
daniel@daniel-desktop:/usr/local/lib$ sudo cp /home/daniel/Install/mspgcc/tilib/MSPDebugStack_OS_Package/libmsp430.so


Vamos a probarlo. Enchufar el msp-fet430uif y ejecutar
mspdebug tilib --allow-fw-update
para actualizar el firmware.

Entonces ahora sí debería funcionar al ejecutar
mspdebug tilib

O casi... usualmente tengo que ejecutar 3 o 4 veces antes de que el mspdebug pueda conectarse:



Bueno... quizás más veces :(
Desconozco si se debe a algún error de instalación o estoy haciendo algo mal.
El último error es porque no nay nada enchufado al depurador.



Fuentes:
  1. Instalación mspdebug-0.20:
    http://energy.eecs.umich.edu/wiki/doku.php?id=msp430:mspgcc:start
  2. msdebug-0.21:
    http://richardnaud.wordpress.com/2013/10/02/installation-of-eclipse-cdt-msp430-gcc-4-7-0-mspdebug-0-21-and-more-on-ubuntu/
  3. https://rtime.felk.cvut.cz/hw/index.php/MSP430F5529_Launchpad