domingo, 18 de enero de 2015

Crosscompilando y Crossdepurando programas C/C++ en Intel Edison

Ahora vamos con el crosscompiling y crossdebugging en Intel Edison.

El Edison puede ser programado básicamente de dos maneras; usando la IDE estilo Arduino y la otra forma es compilando directamente para su microprocesador. 

En este caso compartiremos la experiencia que hemos tenido en éste aspecto; tiempo atras habíamos dicho que la distribución por defecto del Edison es Yocto, en esta primera etapa nos estamos encargando de probar bien ésta distribución con el objeto de ver sus fortalezas y debilidades que siempre hay que tener muy en cuenta.

Lo primero que hay que hacer es buscar la pagina de descarga y bajar el SDK de nuestro sistema operativo en este link.



Buscamos en la sección Source files, Image and SDK's ....

Personalmente recomiendo trabajar el Edison con Ubuntu, ustedes se habrán dado cuenta por mis capturas de pantallas que uso MacOSX; el hecho de que recomiende linux es simplemente porque los gallos de Intel no incluyeron el gdb crosscompilado para Mac, no se si es a proposito o simplemente un olvido, osea que en la Macbook Pro por los momentos sólo podré compilar mas no depurar, me va a tocar generar el SDK más adelante a mano.

Lo bueno del SDK de linux es que cuando uno lo descomprime se desprende un unico archivo .sh de instalación que funciona a la perfección.


 el archivo es el que está en letras verdes, lo ejecutan

./poky-edison-eglibc-i686-edison-image-core2-32-toolchain-1-6-sh

y proceden con los parametros por default.

Si están usando CodeBlock hay que hacer un pequeño truco.


Si observan bien los ejecutables del toolchain están en 
/opt/poky-edison/1.6/sysroots/i686-pokysdk-linux/usr/bin/i586-poky-linux

pero ésto no le gusta a CodeBlocks, él necesita que al final esté en bin, asi que lo que hice fué duplicar la carpeta i586-poky-linux con el nombre de bin como se ve en la captura anterior.Tal vez quedo un poco feo ../bin/bin pero bueno funciona.

Ahora que ya está el toolchain instalado vamos con el Codeblock.

Obviamente el perfil del compilador para Edison no esta predefinido en el Codeblocks, por lo tanto hay que hacerlo, básicamente lo que podemos hacer es duplicar el de GNU GCC compiler.

Primero vamos a Setting/Compiler and debugger 



En Selected compiler está el GNU GCC Compiler presionamos Copy



y le ponemos iEdison Compiler presionamos OK.


 Ahora nos vamos a la pestaña de Toolchain y la colocamos como en la captura de pantalla anterior.

En Debugger Setting preferiblemente deberiamos tener seleccionada la opción de Evaluate expression under cursor, y muy importante debe estar seleccionado en el combobox Custom(specify instruction-set:) 



Le dedimos que genere los simbolos de depuración.

En Debugger Setting

Ahora desde el Edison vamos a iniciar el gdbserver.




Como se puede ver en la figura nos ubicamos donde está nuestro programa a depurar y le decimos 

gdbserver *:1234 holamundo

1234 es por supuesto el puerto TCP de depuración, aqui puede ir cualquier número de puerto siempre y cuando esté libre.

Volvemos a nuestro PC en linux nos vamos a propiedades



y le decimos como va a depurar el programa.



observen que la conexión es de tipo TCP la dirección la que tiene el Edison y el puerto que colocamos en gdbserver 1234.

Ésto va permitir que cada vez que le demos a Debug busque el Edison por la Red en el puerto indicado para depurar.



Vemos según la pantalla anterior que todo funciona a la perfección.

Hay que recordar que cada vez que se vaya a depurar hay que ejecutar del lado del Edison el gdbserver.