EMPOTRANDO LINUX EN EL 386EX

Introducción

A continuación se describe la forma de correr Linux con extenxiones RT en un sistema empotrado sin disco duro. La aplicación a la
que se destina es el control distribuido de un robot movil autoguiado.
Cada nodo del control del robot esta formado por una plataforma basada en el Intel 386 ejecutando RT-Linux, donde se ejecuta un conjunto de tareas de control que gobiernan los comportamientos del robot.
 

i386-Engine

Se trata de un sistema microprocesador de 32 bits basado en un Intel386Ex a 33 Mhz, diseñado para sistemas empotrados. Es compatible PC, lo cual tiene la ventaja de permitir ejecutar la gran cantidad de software disponible para esta plataforma.

Consideraciones iniciales

Consola

Evidentemente, la plataforma comentada no dispone de soporte VGA. Es por tanto que necesitaremos un mecanismo alternativo para operar sobre el sistema empotrado.
Linux soporta directamente consolas sobre puertos serie, por tanto tenemos la ventaja de que podemos trabajar directamente sobre el sistema gracias al soporte del sistema operativo.
Por otro lado, al ser el kernel de Linux tan genérico, existe una gran cantidad de código de inicialización en él para detectar el tipo de VGA del sistema y configurarlo. En nuestro caso, todo este código es inecesario y ocupa un espacio en memoria precioso, por lo que será eliminado del kernel.

Memoria Virtual.

Otra caracteristica estandar del kernel es el manejo de memoria virtual. Esta capacidad permite ejecutar programas que usan mas memoria de la que existe en el sistema utilizando un medio de almacenamiento secundario.
Obviamente, en un sistema que no dispone de este medio no tiene utilidad la memoria virtual, por lo que tambien podemos pensar en elmininar todo el código al respecto. Además, en un sistema de tiempo real, las criticas restricciones temporales no pueden verse afectadas por la variabilidad incontrolada que este mecanismo introduce en los tiempos de ejecucion.

Sin embargo, la eliminación de esta parte del código no es deseable, puesto que ademas soporta:

Por tanto, si eliminamos el código de gestión de Memoria Virtual, además de invertir un esfuerzo considerable en programación más el peligro de provocar inestabilidades en el kernel, eliminamos esta característica.

La solución: La memoria virtual puede ser anulada simplemente estableciendo el tamaño del espacio de intercambio ( SWAP ) a cero.

Esto no tiene ninguna repercusion en el sistema, puesto que:

Sistema de archivos

Nuestro sistema no dispone de unidades de disco. Sin embargo, Linux no necesita un disco para arrancar y tampoco para funcionar.
Las aplicaciones pueden ser compiladas e incluidas junto con la imagen del kernel y por tanto cargadas y ejecutadas directamente en el arranque del sistema desde nuestra EPROM.

Esto, que puede servir para sistemas simples, obviamente reduce la flexibilidad del sistema, y también la de linux, siendo este el sistema operativo que en la actualidad es capaz de gestionar mas sistemas de archivos distintos.

Linux, gracias a su sistema virtual de ficheros ( VFS ), es capaz de acceder a sistemas tanto remotos como locales abstrayendo las posibles diferencias entre ellos.

En nuestro caso se ha optado por un driver de  EPROM por la facilidad y bajo coste que esto supone, y ademas pensando en una futura ampliación, la inclusión de un driver para un sistema de archivos via CAN (CANFS) y uno para serie ( SERIALFS).

Obviamente, incluyendo el hardware adecuado, el sistema puede beneficiarse de sistema NFS, soportado directamente por Linux, y que permitiria que el sistema empotrado utlizase el disco montado fisicamente en otra máquina.

También existen soluciones comerciales para incluir DiskOnChip, o discos de estado sólido, si bien esta posibilidad es por ahora prohibitiva por su elevado coste.

Operación del sistema.

La máquina arranca desde un sistema de archivos simulado sobre una EPROM. En esta misma EPROM se encuentra la imagen del kernel  y a continuación la imagen del sistema de archivos.
 
 
 
0000
KERNEL
offset kernel
SISTEMA DE ARCHIVOS

Tras el arranque, el control lo toma un pequeño Shell de Linux. Podemos optar entonces entre:

Por tanto, el proceso de arranque quedará:

Sistema de Desarrollo.

Con la configuración comentada anteriormente no existe distinción entre el sistema utlizado para desarrollar y el sistema objetivo, lo cual puede ser muy ventajoso pues permite depuración y operaciones de mantenimiento sobre el propio sistema de control.

Por otro lado, para generar el sistema empotrado, necesitamos inicialmente un sistema de desarrollo. Se ha optado por una distribucion de Linux SuSe 6.1 para tal fin. El sistema necesita al menos un disco duro de 1 Gb, donde tendremos una partición del sistema de al menos 800 Mb, para contener las herramientas y los fuentes necesarios.
Adicionalmente es necesaria una segunda partición, que nos servira para crear el sistema de archivos que finalmente utilizara el sistema empotrado y que se grabará en una EPROM junto con el kernel.
El sistema usado queda:

Es también posible prescindir de la partición hda2 y usar un disco ram para generar tal sistema de archivos, siempre y cuando este sea menor de 4 Mb que es el limite máximo del disco ram. Es posible usar tamaños posibles, pero deberemos recompilar el kernel.
 

Para hacer pruebas, se ha optado por utilizar un segundo PC, cuya único requisito es que tenga disponible una unidad de disquete. El PC simulará el 386ex, algo engorroso para manejar en las pruebas y la disquetera  simulará la EPROM final. En el sistema de desarrollo podemos ir generando imagenes de arranque sobre un disquete que probaremos sobre el PC de pruebas.

También será necesario tener libre en el sistema de desarrollo un puerto serie, pues la consola del sistema empotrado se realiza por un puerto serie RS-232 utlizando un cable null-modem.

El mecanismo de comprobación es por tanto:

Desde el sistema de desarrollo podemos operar sobre el sistema empotrado a traves de un emulador de terminal vt100 y ejecutar los programas desarrollados.

Estos últimos comprenden:

Siguiente