Herramientas de usuario

Herramientas del sitio

Traducciones de esta página:

borradores:install_linux

Paso a paso: CIAA-IDE en Ubuntu con una EDU-CIAA-NXP

Requisitos

  • Ubuntu 14.04 o posterior.
  • Al menos 1GB de espacio libre en el home del usuario (/home/$USER).

Configuración de las herramientas por línea de comandos

64-bits

sudo apt-get install php5-cli libftdi-dev libusb-1.0-0-dev git git-gui libgtk2.0-0:i386 libxtst6:i386 libpangox-1.0-0:i386 libpangoxft-1.0-0:i386 libidn11:i386 libglu1-mesa:i386 libncurses5:i386 libudev1:i386 libusb-1.0:i386 libusb-0.1:i386 gtk2-engines-murrine:i386 libnss3-1d:i386 libwebkitgtk-1.0-0 gtkterm

32-bits

sudo apt-get install php5-cli libftdi-dev libusb-1.0-0-dev git git-gui libgtk2.0-0 libxtst6 libpangox-1.0-0 libpangoxft-1.0-0 libidn11 libglu1-mesa libncurses5 libudev1 libusb-1.0 libusb-0.1 gtk2-engines-murrine libnss3-1d libwebkitgtk-1.0-0 gtkterm

Puede que en 32-bits indique que algunos paquetes ya están instalados.

Dependiendo de la distribución utilizada, puede ser necesario reemplazar por “php7-cli” donde dice “php5-cli.

Permisos

Agregar el usuario al grupo dialout (para acceder a puertos serie con openocd o las terminales):

sudo adduser $USER dialout

Entorno

Crear una carpeta ciaa-ide en el home del usuario e ingresar a la misma, según entorno

cd
mkdir ciaa-ide
cd ciaa-ide

Toolchain

Para compilar para el procesador ARM (por ejemplo para la CIAA-NXP será el LPC4337), debe instalarse el compilador gcc para ARM.

Descargar el compilador y descomprimir

cd ~/ciaa-ide/bin
wget https://launchpad.net/gcc-arm-embedded/4.9/4.9-2015-q1-update/+download/gcc-arm-none-eabi-4_9-2015q1-20150306-linux.tar.bz2
tar -xjvf gcc-arm-none-eabi-4_9-2015q1-20150306-linux.tar.bz2

Se puede agregar el acceso al compilador de modo permanente ejecutando:

echo 'export PATH="$PATH:$HOME/ciaa-ide/bin/gcc-arm-none-eabi-4_9-2015q1/bin"' >> ~/.bashrc 

o ejecutando en cada nueva terminal:

export PATH="$PATH:$HOME/ciaa-ide/bin/gcc-arm-none-eabi-4_9-2015q1/bin"

Puede verificarse que el PATH está incluido, abriendo una terminal y ejecutando:

arm-none-eabi-gcc

Clonar repo

Clonar repositorio de Firmware:

cd $HOME/ciaa-ide/ # $HOME es la variable de entorno que apunta al directorio home del usuario, por ejemplo "/home/luis"
git clone --recursive https://github.com/ciaa/Firmware.git

OpenOCD

El hardware de la CIAA viene provisto con el chip FT2232H, que se encarga de hacer un puente entre la interfase JTAG del microcontrolador y el USB que conecta a la PC en el puerto USB dedicado al debug. La herramienta de código abierto OpenOCD (On-Chip Debugger) es la encargada de manejar el chip FT2232H por el USB y a la vez todo lo referido al JTAG. Luego el debugger (GDB) utilizado en nuestro IDE-Eclipse o de modo autónomo, puede hacer su tarea simplemente conectándose el puerto 3333 (TCP) que el OpenOCD tiene en escucha esperando la conexión.

Además, debe tenerse en cuenta que el chip FT2232H posee 2 canales de comunicación independientes (A y B) pero que ambos salen por el mismo USB, es decir, la PC verá 2 dispositivos distintos (en realidad uno compuesto). Uno será el que conecta al JTAG manejado por OpenOCD como fue mencionado, y el otro se verá como un puerto virtual COMx: o /dev/ttyUSBx, que puede servir para mensaje de depuración o para interactuar con el programa a nivel aplicación.

Descargar, descomprimir y compilar OpenOCD:

cd ~/ciaa-ide
wget http://ufpr.dl.sourceforge.net/project/openocd/openocd/0.9.0/openocd-0.9.0.tar.bz2
tar -xvjf openocd-0.9.0.tar.bz2
cd openocd-0.9.0
./configure --enable-ftdi 
make

Copiar los permisos de OpenOCD en las reglas de udev y reiniciar el servicio:

sudo cp contrib/99-openocd.rules /etc/udev/rules.d/
sudo service udev restart

Si ya ha clonado el repositorio de firmware, conectar mediante USB DEBUG. Si estaba conectada, desconectarla y volver a conectarla. Luego, probar OpenOCD:

./src/openocd -f ~/ciaa-ide/workspaces/Firmware/modules/tools/openocd/cfg/cortexM4/lpc43xx/lpc4337/ciaa-nxp.cfg

Debería verse lo siguiente:

Open On-Chip Debugger 0.9.0 (2015-05-12-12:27)
Licensed under GNU GPL v2
For bug reports, read
	http://openocd.sourceforge.net/doc/doxygen/bugs.html
Info : only one transport option; autoselect 'jtag'
adapter speed: 2000 kHz
none separate
cortex_m reset_config vectreset
Info : clock speed 2000 kHz
Info : JTAG tap: lpc4337.m4 tap/device found: 0x4ba00477 (mfg: 0x23b, part: 0xba00, ver: 0x4)
Info : JTAG tap: lpc4337.m0 tap/device found: 0x0ba01477 (mfg: 0x23b, part: 0xba01, ver: 0x0)
Info : lpc4337.m4: hardware has 6 breakpoints, 4 watchpoints
Info : lpc4337.m0: hardware has 2 breakpoints, 1 watchpoints

(ctrl+c para terminar)

Configuración compilación

9) Crear Makefile.mine:

cd Firmware
cp Makefile.config Makefile.mine

10) Editar Makefile.mine indicando que compilaremos para una EDU-CIAA-NXP:

nano Makefile.mine

Reemplazar la línea

	BOARD          ?= ciaa_sim_ia32

por

	BOARD          ?= edu_ciaa_nxp

y para evitar los warnings de LPCOpen, agregar una línea debajo de la anterior con el siguiente texto:

	CFLAGS	+= -Wno-unused-function

11) Agregar toolchain y openocd al PATH:

export PATH=$PATH:$HOME/ciaa-ide/gcc-arm-none-eabi-4_9-2015q1/bin:$HOME/ciaa-ide/openocd-0.9.0/src

Compilar y descargar

12) Compilar:

make clean
make generate
make

Si todo anduvo bien la compilación finaliza con este mensaje:

===============================================================================
Linking file: ./out/bin/blinking.axf
 
arm-none-eabi-gcc ./out/obj/blinking.o ./out/obj/crp.o -Xlinker --start-group  ./out/lib/posix.a  ./out/lib/ciaak.a  ./out/lib/drivers.a  ./out/lib/ext_drivers.a  ./out/lib/rtos.a  ./out/lib/libs.a  ./out/lib/ext_base.a -Xlinker --end-group -o ./out/bin/blinking.axf   -fno-builtin -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -mthumb -Xlinker -Map="./out/bin/blinking.map" -nostdlib -T "externals/base/cortexM4/lpc43xx/linker/ciaa_lpc4337.ld"
 
===============================================================================
Post Building blinking
 
arm-none-eabi-objcopy -v -O binary ./out/bin/blinking.axf ./out/bin/blinking.bin
copy from `./out/bin/blinking.axf' [elf32-littlearm] to `./out/bin/blinking.bin' [binary]

13) Ya estamos en condiciones de probar la comunicación con el hardware programando el MCU con el ejemplo blinking:

make download

Salida de la consola:

===============================================================================
Starting OpenOCD and downloading...
 
openocd -f ./modules/tools/openocd/cfg/cortexM4/lpc43xx/lpc4337/ciaa-nxp.cfg -c "init" -c "halt" -c "flash write_image erase unlock ./out/bin/blinking.bin 0x1A000000 bin" -c "reset run" -c "shutdown"
Open On-Chip Debugger 0.9.0 (2015-02-13-09:19)
Licensed under GNU GPL v2
For bug reports, read
        http://openocd.sourceforge.net/doc/doxygen/bugs.html
Info : only one transport option; autoselect 'jtag'
adapter speed: 2000 kHz
none separate
cortex_m reset_config vectreset
Info : clock speed 2000 kHz
Info : JTAG tap: lpc4337.m4 tap/device found: 0x4ba00477 (mfg: 0x23b, part: 0xba00, ver: 0x4)
Info : JTAG tap: lpc4337.m0 tap/device found: 0x0ba01477 (mfg: 0x23b, part: 0xba01, ver: 0x0)
Info : lpc4337.m4: hardware has 6 breakpoints, 4 watchpoints
Info : lpc4337.m0: hardware has 2 breakpoints, 1 watchpoints
target state: halted
target halted due to debug-request, current mode: Thread 
xPSR: 0x21000000 pc: 0x10407bf8 msp: 0x10089f60
auto erase enabled
auto unlock enabled
Warn : Verification will fail since checksum in image (0x00000000) to be written to flash is different from calculated vector checksum (0x53ff4386).
Warn : To remove this warning modify build tools on developer PC to inject correct LPC vector checksum.
wrote 327680 bytes from file ./out/bin/blinking.bin in 4.918178s (65.065 KiB/s)
Info : JTAG tap: lpc4337.m4 tap/device found: 0x4ba00477 (mfg: 0x23b, part: 0xba00, ver: 0x4)
Info : JTAG tap: lpc4337.m0 tap/device found: 0x0ba01477 (mfg: 0x23b, part: 0xba01, ver: 0x0)
Warn : Only resetting the Cortex-M core, use a reset-init event handler to reset any peripherals or configure hardware srst support.
Warn : Only resetting the Cortex-M core, use a reset-init event handler to reset any peripherals or configure hardware srst support.
shutdown command invoked

Presionar el pulsador de reset de la CIAA, luego debería verse un LED destellando.

Eclipse

Puede ser necesario instalar java para poder utilizar eclipse

Descargar y descomprimir Eclipse C/C++:

64-bits

cd $HOME/ciaa-ide
tar -xzvf $HOME/Downloads/eclipse-cpp-luna-SR2-linux-gtk-x86_64.tar.gz

32-bits

cd $HOME/ciaa-ide
tar -xzvf $HOME/Downloads/eclipse-cpp-luna-SR2-linux-gtk.tar.gz

Crear un script de inicialización del IDE:

cd $HOME/ciaa-ide
nano ciaa-ide
  • Ingresar el siguiente texto:
#!/bin/sh
export PATH=$PATH:$HOME/ciaa-ide/gcc-arm-none-eabi-4_9-2015q1/bin:$HOME/ciaa-ide/openocd-0.9.0/src
./eclipse/eclipse -data $HOME/ciaa-ide/workspace/ &
  • Agregar permisos de ejecución:
chmod +x ciaa-ide
  • Ejecutar:
./ciaa-ide

Plugins

4) Instalar plug-ins GNU ARM Eclipse y eGIT.

  • Update sites:

http://gnuarmeclipse.sourceforge.net/updates (si este plug-in trae problemas, ver este enlace).
http://download.eclipse.org/egit/updates (puede que no sea necesario instalar este plug-in, ya viene instalado en las últimas versiones de Eclipse).

  • En Eclipse, ir a Help → Install new Software…
  • Ingresar un URL por vez y seguir los pasos.
  • Eclipse se reiniciará una vez por cada plug-in instalado.

5) Importar Firmware en Eclipse:

  • File → New → Makefile Project with Existing Code
  • En Existing Code Location, navegar a $HOME/ciaa-ide/Firmware. Click a Finish. Aparecerá un proyecto nuevo de nombre “Firmware”.

Configuración para el proyecto

6) Configurar Firmware en Eclipse:

  • Ir a las propiedades de Firmware (clic derecho → Properties).
  • Navegar a C/C++ Build, pestaña Behavior.
  • En la opción Build (Incremental build) borrar la palabra all.
  • En la opción Clean escribir clean_generate.
  • Click en Apply. Esto evita que se recompile todo cada vez, y con cada “Clean” se generan los archivos del RTOS.
  • Navegar a C/C++ Build > Environment. Agregar la variable BOARD con valor edu_ciaa_nxp. Click en Add…, Name: BOARD, Value: edu_ciaa_nxp.
  • Navegar a C/C++ General, Paths and Symbols.
  • En la sección Languages, elegir GNU C.
  • Click en Add…, click en File System…
  • Navegar a la ruta $HOME/ciaa-ide/gcc-arm-none-eabi-4_9-2015q1/arm-none-eabi/include
  • Click en Ok (esto no afecta la compilación, es para que Eclipse parsee los headers estándar y no aparezcan errores de tipos no encontrados).

7) Compilar: ctrl+B. La consola debería mostrar el mismo resultado que el paso 13: Consola de Eclipse

Debugger

8) Configurar debugging:

  • Run → Debug configurations…
  • Doble click a GDB OpenOCD Debugging
  • Pestaña Main → C/C++ Application, “Browse…” a $HOME/ciaa-ide/Firmware/out/bin/blinking.axf
  • Pestaña Debugger → “Start OpenOCD locally” debe estar activado.
  • Executable: openocd
  • Config options: -f $HOME/ciaa-ide/Firmware/modules/tools/openocd/cfg/cortexM4/lpc43xx/lpc4337/ciaa-nxp.cfg

OJO!!! En este caso reemplazar $HOME por la ruta (por ejemplo, /home/luis).

  • Sección “GDB Client Setup”, campo Executable: arm-none-eabi-gdb
  • Click en Apply, luego en Debug…
  • Debería abrirse la perspectiva Debug y detenerse en la primer sentencia de la función main().
  • Si se está usando una EDU-CIAA con la memoria flash borrada, puede que falle al iniciar el debugging. Ver Primeros pasos con el hardware de la CIAA.

9) Disfrutar de tu CIAA-IDE :-)

10) Opcional: Cambiar el splash screen de Eclipse por uno con el logo de la CIAA: Splash CIAA-IDE

cd $HOME/ciaa-ide
wget http://www.proyecto-ciaa.com.ar/devwiki/lib/exe/fetch.php?media=docu:fw:bm:ide:splash.bmp.tar.gz -O splash.bmp.tar.gz
cd eclipse/plugins/org.eclipse.platform_4.4.2.v20150204-1700/
mv splash.bmp splash.bmp.old # guardamos splash predeterminado
tar -xzvf ../../../splash.bmp.tar.gz

Script automatizado

Aquí podrás descargar un script de shell que automatiza la descarga y configuración de las herramientas, según los pasos anteriores. Aún deberás realizar manualmente los pasos 8 a 13 de la primer sección (que corresponden a las pruebas de hardware) y 4 a 8 de la segunda (configuración dentro de Eclipse). Aviso: Este script no está totalmente probado!

borradores/install_linux.txt · Última modificación: 2016/11/19 13:49 por cpantelides