GoboLinux DescargasDocumentaciónComunidadRecetasPaquetesCapturas de Pantalla


Empotrando a Gobolinux

Traducido por Daniel Said Hasbún Guzmán

Lucas Correia Villa Real, Mayo 18, 2006.

¿Así que quieres probar a Gobolinux en una plataforma distinta? Eso esta bien, y por eso creamos esa documentación: queremos motivarte para unirte a la esquina de los desarrolladores con experimentos interesantes.

Más específicamente, esta documentación esta aquí para guiarte al importar Gobo a una nueva arquitectura, la cual podría enfocarse al uso empotrado o de escritorio. Los pasos ejemplos y herramientas mostradas en este documento al alcanzado una rama estable, siendo usados en proyectos como la investigación en tv digital en Brasil, donde una adaptación a la superH, además de la adaptación de Gobo a ARM.

Las secciones restantes se enfocaran en 2 formas de de importar a Gobo a un nuevo sistema: por compilación cruzada y por usar una distribución existente como base para compilar paquetes usando la jerarquía de Gobo.

Haciendo eso por compilación cruzada

Mientras que tratamos de hacer la importación lo más fácil posible, ejecutar este tipo de tarea siempre requiere experiencia en el tema. Compilar cruzadamente un grupo completo de paquetes y preparar la raíz del sistema de archivos requiere que tengas conocimiento del proceso de inicio, de la instalación manual de una imagen del kernel, libretos de cobertura y mucho más. Leer otros capítulos del proyecto de documentación de Gobolinux podría ayudarte a adquirir algo de ese conocimiento.

Terminando con la introducción, hagamos una lista de lo que necesitaras. Primero, este tutorial asume que tienes una computadora huésped corriendo Gobolinux. El equipo Gobo ha desarrollado numerosas herramientas para ayudar a la automatización del sistema, tales como compilación de programas en base a simples archivos descriptores, detección de las ultimas versiones de una aplicación dada, aislando el proceso de compilación de modo de el sistema huésped no interfiera en el ambiente de compilación, y demás.

Por esta razón, las herramientas desarrolladas para ayudar en la importación están basadas en la propia infraestructura de Gobolinux. Después de todo, si estas importando a Gobo a una nueva arquitectura al menos estamos esperando que lo corras sobre tu propio computador huésped, ¿verdad?

Segundo, necesitaras un compilador cruzado funcional. Ya que vamos a crear una traducción a partir de cero hacia una arquitectura distinta a la que esta corriendo en el sistema huésped, así escomo generaremos los programas para este. Hay muchos compiladores cruzados listos para usar allá afuera, y algunos libretos podrían ayudarte a preparar uno propio. Los siguientes proyectos y compiladores cruzados han sido probados y son recomendables:

  • Crosstool: consiste en una serie de libretos y parches para generar cadenas de herramientas para muchas arquitecturas, tales como Alpha, ARM, i686, IA64, MIPS, PowerPC, PowerPC64, SH4, Sparc, Sparc64, s390 and x86_64. Las actuales cadenas de herramientas usadas por Gobo fueron creadas con esta herramienta.

  • CodeSourcery: esta es la fuente principal para las cadenas de herramientas de ARM, y es una de las compañías líderes desarrollando el ARM EABI. Si quieres un compilador cruzado probado y listo para usar en ARM, este es el lugar indicado.

  • uClibc toolchain: si pensando en una distribución muy pequeña es probablemente mejor el fijarse en esta alternativa. La uClibc es una pequeña implementación de libc la cual apunta a aparatos con capacidades de almacenamiento reducidas. Por favor note; sin embargo, que esto incluye una pequeña penalización de rendimiento en algunas aplicaciones.

Finalmente, necesitaras escribir reglas para el compilador cruzado para la herramienta de compilación. Compile tiene la habilidad de crear binarios para distintas plataformas, así que hay una necesidad de escribir un archivo de configuración para el que vas a utilizar, respetando las convenciones de nominación Cross-<ARCH>.conf, donde ARCH representara a la arquitectura blanco. Los archivos de configuración cruzada son almacenados en /System/Settings/Compile.

La herramienta Compile despacha 2 archivos muestra para las arquitecturas ARM y SH4. Démosle un vistazo a las variables exportadas por ellas, tomando la regla ARM como referencia:

  • cross_kernel_dir: especifica el camino a través del cual las fuentes del kernel para esta forma son encontrados. Ya que es muy común el mantener el kernel para la plataforma activa en un directorio especial durante el periodo de desarrollo, usted puede hacer eso y sólo especificar su dirección acá.
  • cross_kernel_version: para el mismo kernel, especifica su estreno, con base en las variables de VERSION, NIVEL DE PARCHES, SUBNIVEL Y EXTRAVERSION exportadas en MAKEFILE.
  • cross_kernel_arch: al compilar el kernel de manera cruzada, uno debe llamar "make menuconfig ARCH=kernel_arch_name". Especifique el nombre de su arquitectura bajo el árbol del kernel de ahí.
  • cross_prefix_dir: donde en el árbol de archivos huésped se alojara el nuevo árbol del sistema de archivos.
  • cross_toolchain_dir: donde en el árbol de archivos huésped se instalara la cadena de herramientas.
  • cross_sys_incdir: camino a ``stdio.h'' dentro del directorio de la cadena de herramientas.
  • cross_gcc_incdir: camino a ``stdarg.h'' dentro del directorio de la cadena de herramientas.
  • cross_cpp_incdir: C++ incluye dirs. (es un conjunto) en la cadena de herramientas.
  • cross_gcc_libdir: camino a los archivos ``libgcc.*'' en la cadena de herramientas.
  • cross_libc_libdir: camino a los archivos ``libc.* en la cadena de herramientas.
  • cross_uname_m: salida para ``uname -m'' en la maquina blanco.
  • cross_configure_host: parámetro para el libreto de configuración al construir aplicaciones basadas en autoconf (-host=target_ machine_string). Este hilo describe el CPU en el que el binario generado va a correr.
  • cross_configure_build: parámetro para el libreto de configuración al construir aplicaciones basadas en autoconf (-build=build_cpu_string) Este hilo describe el CPU que esta haciendo la compilación cruzada.
  • cross_optimization_flags: banderas de optimización a ser usadas por el compilador cruzado. Un lugar útil para buscar es la página de información de GCC.
  • cross_compiler: prefijo a los archivos ejecutables del compilador cruzado, tales como arm-xscale-linux-gnu-gcc y arm-xscale-linux-gnu-strip.

La herramienta BootStrap

El proceso de crear una distribución de cero involucra muchos pasos los cuales son muy propensos a los errores. Bootstrap es una herramienta que concentra muchos libretos para este propósito, añadiendo una interfaz con base de menú para hacer esta tarea menos enfocada en como generar cosas, sino en que instalar en el nuevo sistema de archivos.

En resumen, Bootstrap ejecuta los siguientes pasos:

  1. Crea una estructura de directorio Gobo para el nuevo puerto en $cross_prefix_dir, definido en el archivo cross config.
  2. Puebla sus directorios de /System/Kernel/Devices.
  3. Crea sistemas de archivos en su /System/Settings.
  4. Instala los libretos y paquetes de compile en el nuevo árbol para su uso durante la compilación cruzada.
  5. Instala los libretos de arranque.
  6. Prepara los encabezados del kernel para ser usados por la compilación cruzada de Glibc.
  7. Compila los paquetes seleccionados por el usuario.

Dado que el archivo cross config ha sido escrito, es uso de Bootstrap es realmente simple. La configuración es hecha por make menuconfig, donde los paquetes pueden ser seleccionados junto con la arquitectura blanco y la implementación de la maquina. Si esta importando Gobo a una arquitectura no enlistada por Bootstrap, puedes crear una nueva entrada para ella en functions/Platforms y en Config. en el directorio raíz de Bootstrap.

Al final de make, el sistema de archivos generado estará disponible en el directorio especificado en el archivo cross compile, y estará listo para su uso en la plataforma blanco. Los archivos siempre se pueden modificar manualmente tras ser generados, mientras no sean sobreescritos por llamadas make subsecuentes. El sistema de archivos puede entonces ser compartido por montaje remoto sobre NFS al momento del arranque, o copiado a un medio distinto; dependiendo de tus intereses y recursos disponibles para tu plataforma.

Disponibilidad

Bootstrap puede ser descargado como un paquete o directamente desde el CVS. El lanzamiento estable actual es el 1.0 y se puede descargar aquí. Las instantáneas CVS se pueden obtener de la sig. Forma:

export CVS_RSH=ssh
cvs -z3 -d:pserver:anonymous@cvs.savannah.nongnu.org:/sources/goboscripts co tools/Bootstrap

Haciendo eso con otra distribución como base.

No rescrito aun, por favo refiérase a la rápida y sucia guía de importación para GoboLinux por ahora.