Valkertown Home

2006-07-24-slax-linux-live

Slax es quizá el mejor Linux live que he usado, sobre todo por que se ajusta a todas mis necesidades, este post va un poco al trabajo que realice recientemente con Slax a modo de no perderlo y compartirlo.

Slax en principio es Slackware GNU/Linux por lo que mi experiencia en Slackware es de provecho a la hora de modificarlo de la forma que lo hice.

Como todos mis envios, no son para principiantes y asumo mucho conocimiento, quizá es una buena guia para saber que estudiar.

Objetivo de Modificación

El principal objetivo es modificar Slax de forma que pueda ser utilizado en una plataforma embedida.

Para esto se requiere:

  • Cambiar el Kernel por un kernel de tiempo real

  • Arranque por memoria USB

  • Mantener la modularidad de Slax

Preparación

Para todo esto es necesario escojer una versión de Slax, por mi parte utilice Slax Frodo por ser la más pequeña y la más suceptible a modificaciones.

La imagen se debe copiar al disco duro para ir modificando las partes y al final volver a generar una imagen final para CDROM, USB o lo que sea.

Es una excelente idea utilizar un emulador de i386 tipo qemu, en las etapas del arranque pues esto lleva un tiempo largo.

Kernel RTAI

La primera tarea sobre Slax es cambiar el kernel por defecto por uno aceptable para las labores del laboratorio y es tiempo real. Por demás la arquitectura i386 es terrible en cuanto a tiempo real se refiere, sin embargo RTAI cumple su función más allá de los 100uS lo cual es aceptable.

La presencia de un periferico conocido como APIC marca la diferencia entre latencias de atención a interrupciones y cambios de tareas en el SO. Con APIC la latencia de atención es supera 1uS sin APIC cae por debajo de los 25uS, esto teniendo en cuenta un procesador común x86 a 1Ghz, no me quiero extender en como se realizan estas mediciones y los números estan bastante gruesos.

En la mayoria de procesadores x86 actuales el APIC es un periferico común, sin embargo en el mercado de procesadores embedidos x86 el APIC es un periferico excaso.

La configuración del Kernel RTAI depende en gran medida de la presencia del APIC y los requerimientos particulares de SLAX.

Al momento de escribir este envio SLAX esta trabajando con SquashFS y UnionFS, parches para el Kernel que pronton estarán incluidos en el arbol principal del Kernel de Linux si es que ya no lo estan.

Ahora, son tres parches los que hay que aplicar a un kernel vanilla y cada uno es compatible con una colección diferente de versiones del kernel por lo que la selección del kernel vainilla es algo complicada.

Los enlaces para los tres parches:

Ahora la estabilidad del sistema depende de lo bien que se escoja la combinación de versiones de estos parches, en algunos es posible ir por versiones recientes incluso experimentales y en otros una aproximación más conservadora es la mejor opción.

Cada parche tiene sus instrucciones y sus propias configuración, leer la documentación de cada uno es bastante importante.

La parte critica de la configuración es por parte de RTAI, pues este tiene requerimientos especificos en la configuración en especial la parte del APIC.

Si se tiene APIC seleccionar la familia de procesadores para obtener la mejor optimización mejora bastante el desempeño en el tiempo real. En el caso de no tener APIC la mejor opción es desactivar todo lo referente a él en la configuración y seleccionar la familia i586(o en el caso de una anterior la correspondiente a su familia).

Initrd

Una parte critica del cambio del kernel, en especial si se trata de un kernel 2.6 es mantener un initrd con todo lo necesario para que el sistema arranque limpiamente.

La idea del initrd es tener un sistema base de arranque, por lo general se trata de un ramdisk de solo lectura.

El primer paso es reutilizar el ramdisk que provee Slax y reemplazar los modulos y los archivos correspondientes en /lib/.

UnionFS requiere de unas herramientas en espacio de usuario, estas tambien deben ir en el initrd.

Lograr el arranque completo lleva varios pasos y requiere de un buen entendimiento de los requerimientos del sistema para arrancar via USB, CDROM o el medio necesario, por lo que insisto en utilizar quemu, bochs, vmware.

Arranque

El arranque puede ser complicado, por mi parte utilice syslinux, que es bastante sencillo y funciono perfectamente.

A este hay que indicarle nuestro initrd y la imagen del kernel que se acaba de compilar.

Una vez se logre arrancar el sistema al punto en el que los scripts de arranque de Slax intentan cargar los modulos de Slax, es hora de continuar haciendo cambios.

Algunas cosas para recordar:

  • EL initrd por defecto viene bastante estrecho en espacio libre, es necesario crear uno nuevo

  • El tamaño de ramdisk que se le pasa al kernel por defecto en Slax es bastante pequeño y debe ser ajustado al tamaño del ramdisk que creemos

  • dd if=/dev/zero of=zeros.img bc=xxxx

  • mke2fs zeros.img

  • mv zeros.img initrd

  • gzip initrd

  • gunzip initrd.gz

  • mount initrd /mnt/hd -o loop

De ninguna forma esta información es completa, hace falta leer mucho para entender completamente este envio y en sí, no es merito mio sino la recopilación de la información disponible en cantidad de manuales y mailing list que consulte para lograr hacer esto con conocimiento de causa; sin embargo , me parece una buena guia para saber que buscar en cada uno de estos medios de información.

Me gustaria recibir comentarios sobre que ampliar y preguntas sobre lo que esta expuesto aquí.

Sigo en un próximo(realmente próximo) envio.

EOT

comments powered by Disqus

© 2008-2012 Carlos A. Perilla deepspawn at valkertown dot org | Based on original design by Andreas Viklund