"Mi estilo es el arte de luchar, sin luchar"
"A Lisp programmer knows the value of everything, but the cost of nothing." Anonymous

xToolChain

2010-09-04 11:58:33-05                  Esta entrada ha sido vista 94 veces.

Software

Una toolchain o cadena de herramientas son un conjunto de software que es usado para generar otro software y suelen usarse una detrás de otra, es decir, encadenadas. Los elementos mínimos necesarios para generar un sistema operativo o cualquier software que manipule directamente el hardware y la memoria son:

  • Un cargador (Linker)
  • Un Ensamblador.
  • Compilador de C
  • Bibliotecas de C.

Si bien estas toolchain se pueden escalar para contener mas elementos, como por ejemplo compiladores de C++, fortran, herramientas para listar los símbolos (resueltos o no) de un archivo ejecutable o incluso depuradores.  Hay que hacer una pequeña nota sobre las bibliotecas de C, dentro del mundo de los dispositivos embebidos hay muchas limitantes, entre ellas la memoria y el consumo de energía, hablando de la memoria la biblioteca de C mas celebre GLIBC ocupa mucha memoria (>80mb) y no suele ser una buena elección, tenemos otras opciones mas amigables con respecto a la memoria como uClibcnewlibc y eglibc. La opción mas madura es uClibc y espero que eglibc despegue después de su adopción por parte de Debian GNU/LINUX. Sin embargo, la elección es al gusto del desarrollador.

El proyecto GNU provee de todos los elementos necesarios para generar las toolchains (Nativas o Cruzadas) con gcc, binutils y glibc, aunque como mencionamos la ultima es reemplazable. También la mayoría de las distribuciones de GNU/Linux cuentan con toolchains pre-compiladas para las arquitecturas mas usadas (x86, x86_64, ARM). Ya existen muchas herramientas que permiten generar toolchains especialmente para sistemas embebidos como crosstool, crosstool-ng, openEmbedded, buildroot, aunque se pueden usar para generar toolchain nativos. Claro también es posible hacerlo a mano con el método que explico aquí en el blog.

Yo trabajo con procesadores IBM PowerPC 405 sin FPU. Estos están dentro de una tarjeta de desarrollo XUPV2P. Elegí la crosstool-ng como herramienta para generar varias toolchains, la encuentro mas moderna crosstool y mas escalable (en cuanto al toolchain) que buildroot. OpenEmbedded depende mucho de los targets, esto no vale para la FPGA pues es una target "Mutable".

Particulamente la version 1.6.1 de crosstool-ng maneja versiones probadas de binutils, gcc y uClibc.

$version=crosstool-ng-1.6.1
$wget http://ymorin.is-a-geek.org/download/crosstool-ng/$version.tar.bz2
$tar xjvf $version.tar.bz2
$cd $version/
$./configure --local
$make
$chmod 555 ct-ng

La configuración se realiza asi:

$./ct-ng menuconfig #ó en caso de tener un archivo de configuración antiguo
$./ct-ng oldconfig
$./ct-ng build

Suele ser necesario limpiar algunas variables de ambiente

$unset LD_LIBRARY_PATH LIBRARY_PATH CPATH
$export LD_LIBRARY_PATH LIBRARY_PATH CPATH

Mi configuración particular esta disponible aquí http://github.com/Vendaval/XUPV2P-LINUX-Dual-PPC405/blob/master/dotConfigs/crosstool-ng-dot-config-1.6.1. Ademas, mi toolchain de desarrollo esta disponible para su descarga en la siguiente URL.

El tiempo total ocupado depende de las características del toolchain entre la cantidad de procesadores empleados en la tarea, esta ultima es configurable en "Paths and misc options → Number of parallel jobs" y mejorar (siempre que este permitido) con un valor bajo de nice(1).

Empresas dedicadas al desarrollo de sistemas embebidos como DENX ponen a disposición del publico sus herramientas que incluyen una completa toolchain basada en glibc, binutils y gcc, esto tiene la ventaja de ahorrar tiempo de compilación y eliminar tiempo de depuración con el detalle de ser un poco antigua (2008), las imagenes de las herramientas se encuentran en http://www.denx.de/wiki/view/DULG/ELDKAvailability y su instalación es muy sencilla (la elección del ISO varia según la arquitectura):

$wget http://ftp.denx.de/pub/eldk/4.2/ppc-linux-x86/iso/ppc-2008-04-01_amcc.iso # ~662MB
$sudo mount -t iso9660 ./ppc-2008-04-01_amcc.iso /mnt
$cd /mnt
$./install -d /ruta/de/instalación

Para usar la toolchain se le suele pasar las variables ARCH y CROSS_COMPILE al script de configuración que genera el Makefile adecuado. Sin embargo estas variables pueden agregarse al ambiente (environment), también es necesario agregar la direccion absoluta de la toolchain al PATH. La manera sencilla de arreglar es creando un archivo donde se exporten las variables y llamarlo usando el comando source o sh, la diferencia consiste en que primero hereda las variables a los subprocesos creados por la shell usada (y por que no otras shells), sh en cambio solo para la shell actual.

export ARCH=powerpc
export CROSS_COMPILE=cadena-prefija- #es algo como ppc-4xx o powerpc-405-linux-uclibc-
export PATH=/ruta/absoluta/toolchain/bin:$PATH

Pero...No todo es miel sobre hojuelas, es muy importante saber que las toolchains son software muy delicado, cualquier error o incluso una configuración pobre pueden acarrear problemas de terminación inesperada, rendimiento pobre o poco soporte para características especificas. Reparar un error puede involucrar muchas horas de compilación (toolchain y programas para el objetivo), ademas el error puedo solo afectar ciertos tipos particulares de aplicación. Una manera de probar si nuestra toolchain es estable es usando los test de regresión con herramientas como DejaGNU.

DejaGNU es un framework para probar otras aplicaciones, entre ellas las toolchains, nos permite verificar el estado de nuestras aplicaciones, tanto de manera local como remota. Se encuentra en los repositorios de Debian y Fedora, para ArchLinux esta disponible en AUR.  DejaGNU es diseñado en conformidad del estandar POSIX 1003.3.

Permalink: http://www.mononeurona.org/entries/view/vendaval/2362


Comments Commentblogs:
1.- chilicuil wrote:

algun dia entendere esto, espero..., gracias por documentar =), saludos.

2010-09-08 02:54:40-05
New Commentblog
CAPTCHA Image




Join us!
Forgot your password?
This blog has been visited
31,128 times
vendaval
Alberto Rodriguez Sanchez Estudiante de Ingenieria en Computación en la UAM-A, programo en C, C++, C#, Python, Scheme, PHP,y Haskell. Uso Archlinux, Debian GNU/Linux, Mac OS X, OpenSolaris, NetBSD, FreeBSD, Plan9 y Win2. Pienso especializarme en computo científico y criptografía, que son mis grandes pasiones.

También pienso que la programación computacional es un Arte y que muchos programas son elegantes, muchos exquisitos, muchos son brillantes. Mi pensar es que se pueden escribir grandes programas, programas nobles y programas verdaderamente magníficos,por ello prefiero la Sintaxis Avanzada en los programas por que muestra un dominio del lenguaje y un buen grado de abstracción.

FreeBSD, C, Enlightenment y VI(M); son mis SO, Lenguaje de programación, manejador de ventanas y editor favoritos.

Practico Kali Filipino, Limalama y JKD (soy seguidor de la filosofía de Bruce Lee). Ademas soy el guardian la Sexta Casa del Zodiaco y también escribo con cierta regularidad en este blog.

"Se como el agua, piensa como el fuego"
Powered by
Despabilando la MonoNeurona.org
Livechat
<-Nombre

reiken wrote:
http://tinyurl.com/782vp5u
4 days, 3 hours ago

vendaval wrote:
Daniel Dahink wrote: Es poesía tu artículo de "Anatomía de un Hola Mundo" gracias por compartir, amigo
on 27/6/11

wrote:

on 26/6/11

wrote:
eres un PENDEJO
on 8/4/11

ethel wrote:
hola muchas garcías por toda la ayuda espero tengas un lindo fin
on 12/3/11

vendaval wrote:
sudo wireshark en la terminal
on 6/3/11

tony wrote:
una pregunta? despues de installar wireshark con con su -c"yum install wireshark" y k se complete la instalacion k ago para abrirl
on 5/3/11

vendaval wrote:
su -c "apt-get install amsn"
on 3/3/11

ethel wrote:
hola podrías decirme como instalar el amsn en debian ya lo intente y no lo logro de hecho ningún otro programa gracias
on 3/3/11

ethel wrote:
hola esta padre tu blog, me gusta mucho tu forma de explicar y lomas agradable es que seas pasiente, sigue asi :)
on 3/3/11


Llevo todo el día nostálgico, sera que el cielo gris me pone el corazón sentimental.
6 days, 4 hours ago
Haciendo imágenes .eps para un "paper"
1 week, 6 days ago
chingon, pero ya duermete aarkerio, todo lo andas testeando.
on 20/12/11
tengo que volver a arreglar mi i3.conf es lo malo de estar al día con las actualizaciones, dios nos libre de que sea administrador
on 16/12/11
que hacen los mononeurones tan tarde por aca???
on 30/11/11
Recupérate pronto @aarkerio
on 23/11/11
@chilicuil: thx.
on 3/11/11
Tristeando y sin sueño
on 2/11/11
@rnstux: muchos estamos así, pero date tiempo.
on 25/10/11
o de beber
on 17/10/11
Mis Albums
FirefoxjEdit.orgGimpOpenOffice.orgHacker
Top
Colectivo MonoNeurona.org © 2002-2011.