LINUX PARA EQUIPOS DE COMUNICACIONES NATALIA REVUELTO JOAN GRASAS DSEM - QT 04/05 1. INTRODUCCIÓN Un sistema operativo es una capa de software o un ”programa especial” que actúa de intermediario entre el usuario y el hardware del dispositivo. Si bien es cierto, el tamaño y las funciones de ese sistema operativo dependerán de las características del dispositivo en el que sea incluido. La categoría de ”dispositivos empotrados” cubre el territorio desde los controladores de microondas hasta los PC’s de bolsillos (un poco menos potentes que los portátiles). Por lo tanto dentro de este amplio y diverso espectro, precisamos de un sistema operativo adaptable y moldeable a las peculiaridades y características del dispositivo concreto. La popularidad del sistema operativo Linux aumenta con el paso de los años, cada vez estamos mas acostumbrados a comprobar la soltura con la que Linux se desenvuelve dentro de los servidores de Internet y en los ordenadores convencionales de escritorio. Pero puede haber, y de hecho hay, Linux mas allá de estos sistemas. Hoy en día se puede observar como se están abriendo nuevos campos de aplicación. Los avances en microprocesadores, la miniaturización y el desarrollo electrónico han hecho posible que en la actualidad se pueda tener la potencia de un PC común de hace unos pocos años en un cacharro de reducidas dimensiones. El inquieto pingüino no se va a conformar solo con habitar en el seno de los ordenadores y será capaz de instalarse y amoldarse en otros tipos de dispositivos de menores dimensiones y menores capacidades de calculo. Y es que las características de este fabuloso sistema operativo le hacen un candidato perfecto para convertirse en el preferido por los diseñadores de ”sistemas empotrados”. 1.1 Caracterización de un sistema empotrado Como punto de partida habrá que intentar explicar a que se puede considerar como un sistema empotrado. Para ello se tratara de señalar los dos aspectos mas diferenciadores respecto a los sistemas habituales conocidos como de propósito general: • Interfaz de Usuario: Posiblemente la manera más sencilla de comentar la diferencia entre un sistema empotrado y un ordenador de propósito general es el interfaz de usuario. Un ordenador de propósito general tiene generalmente un monitor, un teclado y un ratón además de otros dispositivos que pueden enchufarse a ellos. Por el contrario un sistema empotrado suele tener, como mucho, un interfaz mas especializado algo de estilo de un simple botón, una pantalla táctil, un panel de control, o un simple sensor. • Misión Limitada: El método más concluyente para determinar si un sistema se ajusta a lo que se entiende por ”propósito general” o “empotrado” requiere un estudio de la misión del sistema, del para que se va a utilizar. Los sistemas empotrados tratan de ser soluciones eficaces desde el punto de vista del coste a un problema especifico, tienen por tanto una misión limitada. Sin embargo los ordenadores de propósito general no tienen una misión preestablecida y definida, lo mismo se pueden usar para jugar al Quake que para navegar por Internet o retocar unas fotografías. 2 2. DISPOSITIVOS DE COMUNICACIONES COMPLEJOS 2.1 Router Los Routers se sitúan entre dos redes, suelen estar interconectados entre si formando una especie de telaraña. el principal objetivo de todos y cada uno de los routers que intervienen en la transferencia del paquete es que éste llegue a su destino en el menor número posible de saltos, por la mejor ruta posible. Para poder realizar esta tarea, los routers se comunican constantemente entre sí, informándose de las rutas bloqueadas, de las máquinas intermedias que se encuentran caídas o saturadas de tráfico, aprendiendo con ello cuál es el router idóneo para enviarle los paquetes recibidos. Además realizan o pueden realizar un filtrado de paquetes (Por eso también le podríamos llamar Firewall, porque están haciendo ese trabajo. El Router no es solo un elemento físico para conectar una LAN a una Internet (WAN), sino que es una muy buena opción a la hora de ampliar una LAN. En este caso, aunque no debe enviar los paquetes a otro router, sí que tiene que saber por qué puerto debe enviar los datos para que lleguen a la máquina local destino. 2.2 Firewall El Firewall es un sistema básico de seguridad . El funcionamiento de éste tipo de programas se basa en el "filtrado de paquetes". Toda la red está sujeta al él y la red sólo podrá acceder a los parámetros que el Firewall tenga permitido o posibilite mediante su configuración en ambas direcciones. Por ejemplo, si un terminal de la red intenta enviar un paquete a una dirección IP no autorizada, el Firewall rechazará éste envío impidiendo realizar ésta transmisión. La misión del firewall es la de aceptar o denegar el trafico, pero no el contenido del mismo. Con el Firewall podemos definir tamaños de paquetes, IP con las que no interesa comunicación, deshabilitación de envíos o recogida de paquetes por determinados puertos, etc. Para el usuario la LAN es transparente, es decir, si desde cualquier estación enviamos un paquete a una IP y el Firewall nos valida el tamaño, IP de destino, puerto, etc. (Estos parámetros varían según las necesidades de seguridad cada red, y por tanto del nivel de configuración del Firewall), nosotros no veremos proceso alguno, seria como si no hubiera nada vigilando por nuestra seguridad, aunque si lo hay. 2.3 Switch El switch conoce los ordenadores que tiene conectados a cada uno de sus puertos , tiene sus direcciones almacenadas en memoria. Un switch cuando se enchufa no conoce las direcciones de los ordenadores de sus puertos, las aprende a medida que circula información a través de él. Con 8k hay más que suficiente. Cuando un “switch” no conoce la dirección MAC de destino envía la trama por todos sus puertos. Cuando hay más de un ordenador conectado a un puerto de un “switch” este aprende sus direcciones MAC y cuando se envían información entre ellos no la propaga al resto de la red. 3 A cada parte de una red separada por un “switch” se le llama segmento. El “switch” almacena la trama antes de reenviarla (store & forward). Hay otros métodos como por ejemplo “Cut-through” que consiste en recibir los 6 primeros bytes de una trama que contienen la dirección MAC y a partir de aquí ya empezar a enviar al destinatario. “Cut-through” no permite descartar paquetes defectuosos. Un switch de tipo “store & forward” controla el CRC de las tramas para comprobar que no tengan error, en caso de ser una trama defectuosa la descarta y ahorra tráfico innecesario. El “store & forward” también permite adaptar velocidades de distintos dispositivos de una forma más cómoda, ya que la memoria interna del switch sirve de buffer. Obviamente si se envía mucha información de un dispositivo rápido a otro lento otra capa superior se encargará de reducir la velocidad. Finalmente, comentar que hay otro método llamado “Fragment-free” que consiste en recibir los primeros 64 bytes de una trama porque es en estos donde se producen la mayoría de colisiones y errores. Así pues cuando vemos que un switch tiene 512KB de RAM es para realizar el “store & forward”. Esta RAM suele estar compartida entre todos los puertos, aunque hay modelos que dedican un trozo a cada puerto. Un switch moderno también suele tener lo que se llama “Auto-Negotation”, es decir, negocia con los dispositivos que se conectan a él la velocidad de funcionamiento, 10 megabit ó 100, así como si se funcionara en modo “full-duplex” o “half-duplex”. Si un nodo puede tener varias rutas alternativas para llegar a otro, un switch tiene problemas para aprender su dirección ya que aparecerá en dos de sus entradas. A esto se le llama “loop”. El protocolo de Spanning Tree Protocol IEEE 802.1d se encarga de solucionar este problema. 2.4 Hub Un HUB simplemente une conexiones y no altera las tramas que le llegan. El HUB envía información a ordenadores que no están interesados. A este nivel sólo hay un destinatario de la información, pero para asegurarse de que la recibe el HUB envía la información a todos los ordenadores que están conectados a él. Este tráfico añadido genera más probabilidades de colisión. Un HUB funciona a la velocidad del dispositivo más lento de la red. El HUB no tiene capacidad de almacenar nada, por lo tanto si un ordenador que emite a 100 megabit le trasmitiera a otro de 10 megabit algo se perdería del mensaje. Un HUB casi no añade retardo a los mensajes. Este dispositivo no necesita un SO ya que no tiene que realizar funciones que requieran un gran esfuerzo. 2.5 Necesidad de un SO empotrado en estos dispositivos Cualquier fabricante de equipos de comunicaciones que quiera ofrecer unos productos competitivos debe plantearse que necesidades existen en el mercado e intentar adecuar sus productos. Pero pueden topar fácilmente con un problema de fundamento, un problema que no interviene en una fase final del producto, sino en la fase fundamental de su diseño. Por ello, deben tener un diseño altamente adaptable por si surge alguna modificación final debido a un imprevisto técnico, mejora creada 4 por el departamento I+D o surgido por el aumento d’exigencias y por tanto, de prestaciones, por parte del mercado. Las compañías líderes en el sector de las comunicaciones vieron claro que debían abandonar esos diseños rígidos que estaban condenados al olvido para embarcarse en un nuevo proyecto de futuro si no querían perder terreno en el sector. precisamos de un sistema operativo adaptable y moldeable a las peculiaridades y características del dispositivo concreto. Con la previsión de bajada de los precios de los microcontroladores y microprocesadores empezaron a estudiar la posibilidad de incorporar utilidades y aplicaciones a sus equipos para poder adaptarlos a las necesidades finales de los compradores, pudiendo así diseñar un producto a la medida de cada usuario. Un sistema operativo moldeable y adaptable a los requisitos y peculiaridades del dispositivo en concreto era la solución. 2.5.1 Linux Con esa filosofía se empezaron a desarrollar sistemas operativos reducidos que pudieran ser contenidos por microcontroladores con escasos recursos. Vieron entonces que la filosofía Linux se adecuaba a sus requisitos y se empezaron a programar diferentes variantes de kernels (núcleos) para adecuarse a los diferentes dispositivos puesto que las bases eran de libre distribución. Linux constituye un sistema operativo con la totalidad del código fuente abierto y gratuito, desarrollado bajo licencia GPL que significa que su código fuente puede obtenerse y distribuirse libremente, y que además puede ser modificado para ser adaptado libremente a cualquier sistema computacional. Las ventajas que esto trae consigo no es solo la adaptabilidad sino también el hecho de poder corregir cualquier bug que tenga el código bien uno mismo o bien espera conseguir que otras personas corrijan el error por ti. Además la gente puede ser capaz de averiguar como funcionan realmente las cosas y de esta forma los procesos se podrán documentar adecuadamente. Todo esto supone para empezar un aspecto muy atractivo para los fabricantes de los dispositivos. Sin embargo solo con esto no seria suficiente, los fabricantes empiezan a apostar por Linux por muchos otros motivos de los que destacaran los siguientes: • Es capaz de funcionar en un gran numero de arquitecturas diversas: x86, Sparc, ARM, PowerPC, MIPS, ARM, etc., siendo algunas de ellas las que se utilizan hoy en día en el hardware los sistemas empotrados. • Es fiable, escalable, robusto y seguro • Es un sistema operativo moderno, con una buena gestión de memoria, de tareas, módulos de kernel, etc. • Soporte de casi la totalidad de los protocolos de comunicaciones (Bluetooth, 802.11, USB, FireWire, ...) • Porque los requisitos mínimos que precisa son menores que en otros sistemas operativos empotrados. Una sistema Linux empotrado normal necesitara solo aproximadamente 2Mb de memoria Flash y 4Mb de RAM y un procesador de unos 100MIPS. 5 3. PARTICULARIDADES DE SO PARA DISPOSITIVOS DE COMUNICACIONES 3.1 Características habituales hardware Para comprender las diferentes peculiaridades de un sistema operativo para sistemas empotrados, primero debemos conocer a qué limitaciones está sometido y, por tanto, debemos saber con que recursos cuenta. 3.1.1 Procesador Los procesadores empotrados son de menor tamaño y velocidad que los convencionales, además son de un voltaje menor de forma que requieren menos batería y desprenden menos calor evitándose la necesidad de ventiladores o disipadores. Las posibles opciones que nos podemos encontrar en estos tipos de dispositivos son muy diversas, aunque es cierto que se tiende cada vez mas hacia un modelo mas similar. Por ejemplo, un procesador utilizado son los procesadores ARM. El Acorn RISC Machine (or ARM) es un procesador basado en arquitectura RISC (Reduced Instruction Set Computer) que es una filosofía de diseño que aboga por un juego de instrucciones mas pequeño y simple que tardan menos tiempo en ejecutarse. Como ejemplos de procesadores RISC modernos se pueden citar los SPARC y MIPS. Se han basado por tanto en la idea de que la eficiencia se consigue haciendo las cosas menos complicadas. Gracias a esta sencillez en el diseño, el ARM tiene relativamente pocos componentes en el chip, por lo que favorece el no alcanzar altas temperaturas y tener bajas necesidades de energía. Los procesadores ARM actuales emplean un bus de datos y de direcciones de 32 bits y alcanzan un máximo de varios cientos de Mhz. Otra características destacable en este tipo de procesadores, y que favorece el rendimiento de los mismos, es la ejecución segmentada (pipeline) de instrucciones, de manera que se divide la ejecución de todas las intrucciones en un numero de fijo de etapas, ejecutándose cada etapa en una unidad diferente. En el caso de los ARM el pipeline es de 3 etapas: fetch (lee la instruccion de memoria), decode (decodifica la instruccion) y execute (realiza la operacion y escribe el resultado). Este tipo de procesador lo podemos encontrar en el interior de conocidas consolas de videojuegos, en teléfonos móviles, en decodificadores de televisión y también en algunas agendas electrónicas. 3.1.2 Memorias Hay muchos sistemas empotrados que deben manejar y transferir información persistente, y para ello contaran fundamentalmente con memorias de pequeño tamaño y capacidad tipo RAM y Flash (SD, CF, Memory Sticks, etc.). 6 Los sistemas empotrados no suelen disponer de mucha memoria, de manera que la manera que tienen de grabar grandes cantidades de datos en RAM es ejecutar los programas directamente desde una unidad de almacenamiento de larga duración (ROM o Flash) en la cual se encuentran almacenados. A esto se le conoce con el nombre de XIP (eXecute In Place), y será una funcionalidad que debe de llevar a cabo el sistema operativo empotrado. Este funcionamiento difiere de un ordenador convencional las aplicaciones se encuentran almacenadas en el disco duro y se pasan a memoria RAM para ejecutarlas. Sin embargo, la mayor parte de las aplicaciones empotradas no disponen de un disco duro como unidad de almacenamiento de larga duración; en su lugar se dispone de dispositivos de memoria que pueden ser directamente direccionables por la CPU, como las memorias Flash; de esta forma las necesidades de RAM se reducen. Entonces, en lugar de copiar el código ejecutable desde el dispositivo de memoria a la RAM, un sistema XIP configura las estructuras del kernel que normalmente apuntan a la copia que reside en la RAM para que en su lugar acceda directamente a lugares de almacenamiento de larga duración. El código se ejecuta como si se hubiese copiado en la RAM. La señalización en cuanto al rendimiento al usar el sistema XIP dependerá de la velocidad del procesador y de la memoria. 3.2 Sistemas operativos en tiempo real En la mayoría de las ocasiones, tal vez no sea muy importante cuanto tiempo dura exactamente la ejecución de una determinada tarea. Por ejemplo, cuando alguien pulsa una tecla en el teclado, lo que se espera es que una letra aparezca ”instantáneamente” – ¿pero como es de rápida esa ”instantaneidad”?. Se puede expresar desde unas pocas décimas de milisegundos hasta un par de cientos de milisegundos. Aunque probablemente una persona no note la diferencia entre los dos tiempos al tratarse de unos 50 milisegundos, sin embargo, el tiempo de algunas operaciones en ciertas aplicaciones informáticas, aun siendo de una magnitud tan pequeña, es crucial. Basta con imaginarse el sistema ABS de los coches, estos disponen de unos sensores que controlan las revoluciones de las ruedas. Si en un frenado brusco una o varias ruedas reducen repentinamente sus revoluciones, el ABS lo detecta e interpreta que las ruedas están a punto de quedar bloqueadas por el freno, sin que el vehículo se haya detenido. Esto puede provocar una situación peligrosa ya que el vehículo puede derrapar sin control. El sistema ha de enviar una señal inmediata que reduzca la presión de frenado sobre las ruedas y evite el derrapaje. En situaciones de este estilo es imprescindible la inmediatez en la acción, el sistema no se puede quedarse sin respuesta ante un evento de estas circunstancias cosa que si que suele ocurrir en los sistemas operativos convencionales cuando se empieza la ejecución de un nuevo programa. En situaciones como estas se precisan lo que se conoce como Sistemas Operativos en Tiempo Real (RTOS). A continuación se indicaran algunos aspectos que marcan la diferencia entre los Sistemas Operativos en Tiempo Real y un Sistema Operativo Convencional: • Tiempo de Respuesta: Un RTOS garantiza que el tiempo de algunas operaciones será mucho mas rápido que el de un sistema convencional, consiguiéndose una precisión de microsegundos. 7 • • Planificación: En un RTOS un proceso se puede planificar para que se realice en un instante de tiempo o en un intervalo muy preciso. De nuevo, la precisión a nivel de microsegundos será necesaria en lugar del nivel de milisegundos. Estabilidad bajo presión: En un sistema en tiempo real, el procesador puede llegar a inundarse por multitud de señales que provienen de las diferentes fuenteseste que puede atender. Algunas de estas señales serán mas importantes que otras y esto lo deberá reconocer y tratar adecuadamente. La facultad de priorizar entre un amplio conjunto de diferentes señales rápida y eficientemente es otra de las peculiaridades de un buen sistema de tiempo real. 3.3 Kernel Cuando se habla de sistema operativo Linux, a lo que se esta refiriendo mas concretamente en muchas ocasiones es a su kernel. El kernel es el componente software central de todo sistema operativo, sus capacidades dictaran las capacidades de todo el sistema, lo que puede o no puede hacer. Si por ejemplo el kernel no tiene soporte para un determinado componente, ese componente no podrá ser utilizado por tu sistema hasta que el kernel no sepa manejarlo. 3.3.1. El Kernel de Linus Torvalds El famoso kernel inspirado en Minix y creado por Linus, es la base de todos los kernel para todos los arquitectura Linux. El código fuente se distribuye libremente desde un repositorio principal de kernel (http://www.kernel.org), sin embargo las versiones disponibles en este sitio no son siempre las mas apropiadas para todas las arquitecturas soportadas por Linux. Para conseguir un kernel adecuado para determinadas arquitecturas, lo mas conveniente es obtener las versiones que proporcionan grupos de desarrolladores centrados en mantener estas arquitecturas menos frecuentes. De esta forma la obtención del kernel idóneo pasa por descargarte el kernel del repositorio principal y aplicarle los patch proporcionado por el sitio encargado de realizar el ”port” a esa arquitectura. Las versiones distribuidas por los repositorios alternativos a menudo utilizan variaciones en el esquema del numerado de versiones del kernel para identificar su propio trabajo. Cada desarrollador encargado de mantener un tipo de arquitectura, distribuye sus kernels con una determinada extensión. Por ejemplo, Russell King, la persona que mantiene la parte de ARM, distribuye sus kernels con la extensión -rmk. En la actualidad el grupo de desarrolladores ARM han publicado parches para la versión 2.6.4, lo que significan que proporcionan versiones bastante modernas. La mayor parte de las distribuciones comerciales comentadas anteriormente cuenta con su propia versión de kernel modificada de esta distribución base. 3.4 Librerías C empotradas El lenguaje C es un componente importantes en cualquier sistema Linux, ya que representa el interfaz tradicional entre la aplicación mas sencilla y el kernel. La libc es la característica mas visible de un entorno de programación UNIX, cualquier aplicación precisara de sus servicios. Sin embargo esta librería C es a veces tan 8 grande como el Linux kernel completo, de manera que elegir la librería C correcta es una consideración importante para un proyecto empotrado. Mucha de la funcionalidad mas visible y común de un típico sistema UNIX existe en la libc y no en el kernel. Por ejemplo, el kernel no juega ningún papel en la autenticación de usuario o los privilegios; el kernel solo entiende las llamadas al sistema setuid(), todo lo demas, recolectar y comparar las claves, lo lleva a cabo la libc. 3.4.1 Principales librerías Las principales libc que se pueden utilizar para llevar a cabo la programación son: • • • • GNU C Library: Glibc es la libreria estandar de C para Linux que proporciona las rutinas basicas para las tareas normales de programacion como el acceso a la memoria, las operaciones aritmetica, la coincidencia de patrones, etc. Sin embargo su tamaño es demasiado grande para este tipo de dispositivos, no esta pensado para ellos ya que los esfuerzos de desarrollo se centraron principalmente en la velocidad, la portabilidad y el cumplimiento de estándares en detrimento del tamaño y por otro lado, al ser una herencia histórica de Unix, en ocasiones se proporcionan muchos interfaces para hacer las mismas cosas. Glibc contiene mas funcionalidad de la que precisaran los dispositivos empotrados. Los esfuerzos hacia la modularidad y la reducción de tamaño han dado como resultado el proyecto sglibc (disponible bajo licencia LGPL). Haciendo unos cuantos ajustes consistentes en ir descartando secciones del código de glibc, se ha conseguido compilar una versión que ocupa menos de 775 Kb. µclibc: Una librería C de reducido tamaño desarrollada junto con el kernel µcLinux, pero que no es utilizado en el kernel, ya que se diseño exclusivamente para ser una librería C para sistemas empotrados optimizada desde el punto de vista del espacio. El código para µclibc es casi totalmente compatible con glibc. Su utilización requiere la modificación del compilador ya que tanto gcc como binutils requiren libc, sin embargo tampoco es un problema preocupante ya que uCLib proporciona todas estas utilidades adaptadas. Diet libc: Es incluso mas pequeña que la anterior, pero esto se consigue rompiendo la compatibilidad con el API estandar de C, lo que significa que las aplicaciones necesitan ser adaptadas a esta libreria. newlib: Librería C proporcionada por RedHat Software, aunque es realmente una recopilación de distintas partes de varias librerías. 3.5 Java La amplia y dispar gama de arquitecturas esta pidiendo un lenguaje y una plataforma común con la cual desarrollar aplicaciones. Bajo esta idea Sun desarrollo la tecnología Java de manera que se proporcione una plataforma unificada para este tipo de dispositivos a trabes de una maquina virtual que ejecutará ”bytes code” portables de una arquitectura a otra. El objetivo buscado es el famoso: ”write once, run anywhere”. Desafortunadamente, los problemas de Java con la velocidad y con los recursos hacen que esta visión tan optimista no sea la total solución los problemas del desarrollo. Día a día, sin embargo, el aumento de la velocidad de los micros también 9 dentro del mundo empotrado, ayudado con los mejoras en la propia tecnología Java puede mitigar los asuntos de rendimiento. La programación recae sobre la conocida arquitectura J2ME que permite al desarrollador generar programas gracias a un API que se ejecuta sobre la maquina virtual del chisposito. En la actualidad existen varias maquinas virtuales que podemos incluir en un sistemas empotrados con Linux, pero de largo la mas utilizada es la KVM. Es una pequeña maquina virtual que únicamente requiere 128KB de RAM. Su implementación realizada por Antero Taivalsaari no es una modificación o un subconjunto de otra maquina virtual sino que parte de cero, aunque si proporciona cierta funcionalidad del API J2ME. El incremento del uso de aplicaciones basadas en tecnología Java en este tipo de dispositivos provocan que se piensen en soluciones a bajo nivel con la finalidad de aumentar el rendimiento. Este tipo de solución hardware pasa por acoplar una serie de dispositivos adicionales al procesador con el consecuente aumento del coste de fabricación. Esta extensión añade un nuevo conjunto de instrucciones al procesador, y se crea un nuevo estado del procesador, ”estado Java”, de manera que el procesador se comporta como un procesador Java. 10 4. SO HABITUALES EN ESTOS EQUIPOS 4.1 uCLinux UCLinux es la distribución empotrada de Linux para microcontroladores que más éxito ha tenido, aunque inicialmente no se creó con esta idea. Mientras que otras distribuciones se basan en procesadores último modelo para obtener un funcionamiento razonable, uCLinux usa un código robusto y compacto y posee una larga experiencia técnica con este tipo de sistemas. Los resultados son un código mas pequeño, mejor funcionamiento y menor coste. UCLinux surgió del trabajo de tres empleados de la compañía Rt-Control en Toronto, Canadá. La primera versión del SO fue para los procesadores Motorola 68000 pero enseguida se dio paso a puertos para otros chips, la mayoría microcontroladores altamente integrados. UCLinux se creó originalmente para la versión del kernel de Linux 2.0.33 en 1997. El gran salto lo dio con el 2.0.34. uCLinux ofrece una interconexión muy potente con excelente soporte para drivers y unos cambios muy manejables en el código base para adaptarse a las restricciones de dispositivos sin MMU. La versión 2.0.38 era la más utilizada hasta hace muy poco mientras que la 2.2 representaba un gran esfuerzo en el cambio del código con una ventaja relativamente pequeña para los dispositivos sin MMU. Las discusiones sobre como adaptar esta versión surgieron en el momento en que Rt-Control estaba siendo adquirida por Lineo, como resultado el desarrollo de uCLinux disminuyó. Finalmente uCLinux se quedó en las versiones 2.0.3x del kernel que ocupa aproximadamente 200 kBytes, la mitad que las versiones 2.2 ; es muy común que un router basado completamente en 2.0.x ocupe menos de 1MB de almacenamiento. Además posee su propia colección de librerías llamada uClib. A finales de 2000 se lanzó la primera versión en 2.4 y desde entonces la mayor parte del desarrollo se ha llevado a cabo en esta versión aunque sigue habiendo un interés muy fuerte en el 2.0. Al mismo tiempo se empezaron a fabricar dispositivos con más memoria, lo que beneficia a los productos que usan uCLinux porque pueden añadir sin problemas nuevas características a partir del mismo kernel para hacer un uso eficiente del nuevo espacio de memoria. Desde que apareció la versión 2.0.x del kernel y se empezó a dar apoyo a estos sistemas ha habido una explosión de nuevos productos que utilizan un SO empotrado, pasando completamente desapercibido por el usuario final. Hoy día la mayoría de routers, firewalls, access points e incluso algunos reproductores de DVD utilizan Linux. 4.1.1 Diferencias entre Linux y uCLinux No hay duda de que la adaptación a sistemas sin MMU de uClinux constituye una diferencia fundamental. Los programadores que estén familiarizados con Linux notarán muy poca diferencia al trabajar en uCLinux y ya conocerán algunos aspectos específicos de uCLinux. Dos diferencias entre Linux y uCLinux son consecuencia de la desaparición del código que soporta los sistemas con MMU. La falta de protección de memoria y de un 11 modelo de memoria virtual son muy importantes para un programador que trabaje tanto en el kernel como en el espacio de usuario. Algunas llamadas al kernel también se ven afectadas. Linux es muy parecido a UNIX (SO multitask y multiusuario), por eso el Kernel debe poner especial atención en asegurar el correcto funcionamiento de miles de procesos simultáneos de diferentes usuarios en el mismo sistema. UNIX protege cada proceso con su propio espacio de memoria. A su vez cada proceso se protege de otros procesos invocados por otros usuarios. Además tiene un sistema de memoria virtual que incluye la reserva dinámica de memoria y que uCLinux no tiene. Algunos productos no disponen de una unidad de gestión de memoria (MMU) porque inicialmente los desarrolladores no cuentan con usar sus aplicaciones mediante un SO. Los sistemas carentes de MMU son más eficientes en cuanto al uso de la energía y muchas veces resultan más baratos. Para soportar Linux en estos dispositivos son necesarios algunos cambios, por ejemplo ya no hay que proteger la memoria, pero esto no resulta un problema en la mayoría de sistemas empotrados. Un problema lo tendremos en el fork system call, usado por los programadores para hacer cosas en paralelo. Esta llamada hace una copia del proceso original y lo ejecuta simultáneamente. Para hacer esto de una manera eficiente se necesita usar el MMU para mapear en memoria del proceso padre al hijo y copiar solo las partes de la memoria que necesita el hijo. Como uClinux no puede proporcionar esta llamada aparece vfork, donde el padre se para mientras se ejecuta el hijo y obliga a rescribir el código. uClinux soporta threads porque comparten el mismo espacio de memoria, incluyendo la pila. La mayoría de software disponible para Linux o UNIX se puede compilar directamente desde uCLinux haciendo algún cambio. Solo unas pocas aplicaciones no funcionan en uCLinux pero la mayoría de ellas son irrelevantes para sistemas empotrados. uCLinux ofrece una amplia gama de aplicaciones y protocolos que normalmente se pueden modificar a gusto del consumidor y son gratis. En la mayoría de casos solo se necesita hacer un pequeño cambio para poder tener el software listo y funcionando. La comunidad de diseñadores de sistemas empotrados está comenzando a adoptar Linux como uno de los sistemas operativos favoritos. Con la reciente mejora del kernel, uCLinux está demostrando ser un entorno de desarrollo dinámico y de bajo coste. La distribución uCLinux aporta una amplia selección de utilidades y programas diseñados con el tamaño y la eficiencia de las primeras consideraciones. Un ejemplo es BusyBox, un programa binario multi-llamada que incluye la funcionalidad de muchos programas mas pequeños y actúa como uno cualquiera si se llama con el nombre apropiado. El beneficio que aporta BusyBox radica en el ahorro de cabeceras y en que los módulos pequeños pueden compartir un código común. 12 5. DISTRIBUCIONES DE LINUX Uno de los aspectos mas interesantes del Linux empotrado es la abundancia de distribuciones sobre las que poder elegir. Es importante reconocer que todas las distribuciones Linux, son mas o menos variaciones de un mismo tema; Esto significa que tienden a ser colecciones de los mismos componentes básicos, incluyendo el kernel de Linux, librerías, drivers, shells, GUI, gestores de ventanas, y utilidades. Lo que hace diferentes unas de otras se suele centrar en las multitudes utilidades incluidas, en que módulos o aplicaciones se añaden, que parches y modificaciones del kernel se proponen, y como se gestionan los procesos de la instalación, configuración, mantenimiento y actualización. A la hora de decantarse por una u otra, habrá también que valorar la elección entre una versión comercial o una no comercial, ya que el hecho de que exista una empresa por detrás dando soporte puede ser un aspecto tranquilizador. 5.1 BlueCat Linux Blue Cat está basado en la versión 2.6 del kernel, es una implementación de Linux para sistemas empotrados de todo tipo. Proporciona los beneficios de flexibilidad y bajo coste del software libre, lo que nos permite una productividad instantánea y un funcionamiento óptimo mediante paquetes hechos a nuestra medida. También nos permite migrar el código a LynxOS, SO en tiempo Real, si necesitamos un funcionamiento más estricto. http://www.lynuxworks.com 5.2 RT-LinuxRTLinuxPro Las aplicaciones para la versión 2.1 de RTLinuxPro tienen acceso a un entorno no contaminado por el espacio de nombres de Linux así que el programador no tiene que preocuparse por mezclar código con Linux. Este SO se usa mucho en automatización, robótica, investigación aerospacial, fabricación de semiconductores... Está diseñado para ser simple y fiable. RTLinux utiliza el kernel RTCore en tiempo Real. La tecnología dual-kernel de FSMLabs evita que se produzcan interferencias entre el código que no sea en tiempo real con el funcionamiento en tiempo real. El diseño de RTLinux fomenta la modularidad y la reutilización del código y permite modificaciones a gusto del usuario. http://www.rtlinux.org 13 5.3 FlightLinux Flight Linux utiliza una variación en tiempo real del Linux, adaptado al entorno de un ordenador de control de una nave espacial. Como base se usa el ELKS (Embeddable Linux Kernel Subset). Después se migra a BlueCat y se le añade funcionamiento en tiempo real. http://flightlinux.gsfc.nas... 5.4 White Dwarf Linux El White Dwarf es un SO basado en el kernel 2.4.24que satisface un amplio abanico de demandas, desde funciones para sistemas empotrados hasta routers wireless. Debe su nombre a este tipo de estrellas, pequeñas y extremadamente densas; es suficientemente pequeño como para caber en 12MB de Flash, y denso para contener las aplicaciones necesarias para un sistema empotrado y un router. http://www.emjembedded.com/... 5.5 Etlinux Etlinux es un SO basado completamente en Linux diseñado para correr en ordenadores industriales muy pequeños. Las principales características que lo definen son que es pequeño, flexible, modular y completo. Requiere muy poco espacio de memoria y disco lo que lo hace ideal para situaciones delicadas y al mismo tiempo su modularidad y robustez nos ofrecen toda la potencia de Unix incluso en aplicaciones empotradas. Es ideal en todas las aplicaciones de sistemas empotrados donde se necesitan Unix avanzado: multitarea, multithreading, protección de memoria, E/S rápida, etc. http://www.etlinux.org/ 5.6 Coollinux Coollinux combina la potencia del Linux empotrado y la tecnología Java para crear un SO para las aplicaciones de Internet de la próxima generación y dispositivos de redes caseras. Este SO puede adaptarse a una amplia gama de hardwares. Es 14 modular, haciéndolo ideal para dispositivos con una función especial. Utiliza el kernel 2.x de Linux; soporta multithreading y multitarea; tiene extensiones en tiempo real. http://www.coollogic.com/pr... 5.7 PeeWeeLinux PeeWeeLinux es un desarrollo de Linux para proporcionar un entorno que haga lo más fácil posible la configuración e instalación de un SO Linux en una plataforma empotrada. Ha sido desarrollado en una plataforma RedHat 6.2 y está basado en el kernel 2.2.x que ha sido adaptado para aplicaciones empotradas como drivers compiladores GPL para dispositivos Flash . Se pueden añadir en el sistema paquetes enteros o bien subconjuntos de ficheros de un paquete. PeeWeeLinux se distribuye bajo la licencia GPL. Los paquetes y componenetes individuales han sido autorizados por sus respectivos propietarios. http://peeweelinux.com/ 15 6. ESTUDIO DE MERCADO La tendencia actual del mercado es realizar una gama de equipos que fusionen las utilidades y servicios de productos que hace unos años se vendían por separado. El hecho es que la innovación tecnológica ha sido un factor determinante para llega a este punto y el usuario se ha visto beneficiado por una nueva gama de productos muy a su medida ya que todo ellos son altamente configurables. De hecho, aunque el mercado dicte estas directrices, nosotros hemos querido ver la principal utilidad de cada producto, para poder así marcar una pequeña distinción entre cada subgrupo. 6.1 Router 6.1.1 D-Link DSL-G604T D-link ha hecho publico el código fuente, dentro de la licencia GNU GPL, para MIPS- un router para ADSL con wireless 802.11g/b. El DSL-G604T soporta "la mayor parte del ISPs," dice D-Link, donde se introdujo en el mercado primeramente en Australia, Gran Bretaña i Rusia. El dispositivo soporta ratios de datos de 6, 9, 12, 18, 24, 36, 48, o 54Mbps bajo 802.11g. Bajo 802.11b, soporta ratios de 1, 2, 5.5, o 11Mbps. El rango de alcance está calculado en unos 300 metros, al aire libre, o 100 metros, dentro de edificios. El sistema operativo empotrado utilizado está basado en el kernel 2.4.17 MIPS-processor de MontaVista. En el código fuente va incluido uClibc, busybox, iptables, netkit/routed, nettools, thttpd, squashfs, cramfs, utelnetd/inetd, zlib y mtd. GPL tiene software Linux para el DSL-G604T que puede ser descargada con la extensión –diff, -tar desde la propia página web de UK o su oficina en Rusia. 6.1.2 SnapGear VPN La familia de aparatos VPN combinan con gran efectividad un diseño hardware con software uClinux para tener soluciones eficientes para su coste para hogares y pequeñas empresas. El LITE+ es un router VPN basado en un procesador Coldfire MCF5272a 66 Mhz con 2 MB de memoria flash y 4 MB de RAM., con un switch de 4 puertos vía LAN. Su precio ronda los 300 $. 16 MCF5272 LITE+ El SME550 tiene un procesador SuperH-4 con 8 MB de memoria Flash i 16 Mb de RAM, más un chip dedicado a acelerar las funciones de seguridad VPN: el chip SafeXcel 1141de encriptación de SafeNet. SME550 SuperH-4 6.2 Firewall 6.2.1 InterJak 200 Filanet Corporation (Sunnyvale, CA) anima a adquirir a las pequeñas y medianas empresa el “equipo de servicios para internet” InterJak 200 para asimilarse en prestaciones a las grandes empresas.. En base a esto, InterJak 200 está diseñado para ser de fácil manejo, compacto, un dispositivo con un diseño amigable que permite implementar funciones como gateway de Internet, VPN/firewall, email server i otros servicios LAN/WAN, e incluye herramientas para monitorizar y gestionar a través de un sistema remoto. InterJak 200 17 El sistema, que contiene un procesador apoyado con system-on-chip que integra un ARM 940T de 32 bits como núcleo dos puertos USB, dos puertos Ethernet 10/100 MB, i una interfaz (FireWire) IEEE-1394. Dispone de 64 MB SDRAM y 8MB de memoria FLASH. Utiliza un customizado uClinux como kernel, con funciones como control total sobre LAN que soporta VPN IPSec, IP routing, firewall, NAT/NAPT, filtro URL, DHCP servidor/cliente, DMZ, manejo i “logging” web/cli/telnet... El sistema también contiene tecnología servidor web empotrado, basado en el código abierto GoAhead. 6.2.2 CyberGuard PCI Cyberguard cuenta con dos versiones de tarjetas PCI con la funcionalidad de un Firewall basadas en uClinux con colaboración de Snapgear. Las tarjetas SG635 son del tamaño del eslot estándar PCI y son capaces de actuar como firewall, para aplicaciones VPN y cuenta con un servicio de detección de intrusiones. SG635 SnapGear mantiene uClinux, asociados con Arcturus Networks. Han utilizado para este dispositivo la versión 3.0 de uClinux, basada en el código fuente de la versión 2.6 de Linux. 6.3 Switch 6.3.1 SG300 CybeGuad cuenta con un switch de 4 puertos Ethernet de 10/100 MB basado en Linux con firewall i servicio de detección de intrusión. Este producto es el SG300, 3 veces más rápido que la versión anterior. SG300 18 El SG300 puede conectar líneas de banda ancha como ADSL, cable, SHDSL , y otras, pero también a su vez a líneas de banda estrecha como ISDN. 6.3.2 Gateway i3 Vood Este switch viene provisto de conexiones duales VoIP para teléfonos analógicos , más un acceso simultaneo para otros servicios IP, como el email o Internet. Soporta cualquier tipo de conexión de banda ancha y los protocolos H.323, SIP y MGCP, e dispone de control y gestión de QoS, VLAN y limitación de ratio. Utiliza una variante de kernel 2.6 de Linux. i3 Vood Gateway 6.4 Hub 6.4.1 Wiscore Tenon Este hub de banda ancha basado en Linux incorpora firewall, email, web i servidor ftp. Su sistema operativo es LEAF. Además, incorpora una tarjeta de memoria CompactFlash de 128 MB que puede ser usada para actualizar los diferentes componentes del dispositivo. Wiscore Tenon 19 6.5 Otros 6.5.1 Toshiba Wireless Mobility Server Toshiba's Computer Systems Group (Irvine, CA) ha introducido recientemente el servidor wireless móvil Magnia SG20 basado en Linux. Su tamaño es reducido ya que se ha diseñado para ser muy portable. El Magnia SG20 está pensado para pequeñas y medianas oficinas, con empleados con gran necesidad de movilidad, oficinas remotas en grandes organizaciones, oficinas caseras, y otras aplicaciones que requieran mucha movilidad. Internamente, el Magnia SG20 está basado en un procesador Intel Celeron 566Mhz con 512 MB ECC SDRAM (128 MB es estándar). El sistema viene con un o dos discos duros EIDE de 15 o 30 GB. Cuenta con el estándar 802.11g para su acceso wireless. SG20 20 7. CONCLUSIONES El objetivo de este trabajo es dar una visión general del papel que puede desempeñar la plataforma Linux como base de los ”sistemas empotrados” y dar a conocer los diferentes componentes software construidos sobre ella. Su portabilidad, fiabilidad y robustez permiten plantearla como una solución seria a la hora de introducirlo en este tipo de sistemas. Se puede decir que se disponen de los ingredientes necesarios para considerar el sistema operativo Linux como un importante componente software para utilizar en los sistemas empotrados. Y de hecho es algo que actualmente se esta dando, ya que existe mas Linux empotrado de lo que aparentemente pueda parecer. Sin ir mas lejos un alto porcentaje de la investigación que se lleva a cabo en el desarrollo de sistemas empotrados utiliza Linux, y en multitud de los equipos de red actuales Linux esta bastante bien posicionado Con la reciente aparición de la versión 2.6 del kernel de Linux, la posición de Linux en el mundo de los sistemas empotrados ha quedado cimentada. Con esta nueva versión Linux se posiciona como un buen competidor frente a los principales opciones de RTOS como VxWorks. Linux 2.6 introduce muchas nuevas características que le hacen un excelente sistema operativo para la computación empotrada. Una de las cualidades de los sistemas empotrados, es el hacer pasar desapercibido al usuario aquello que llevan dentro, y este hecho junto con la falta de documentación hace complicado ver realmente que software lleva en su interior un determinado sistema empotrado. Si se piensa en cualquier dispositivo empotrado (switch, routers, teléfonos móviles..) resulta fácil imaginarse que muchas de la complejidad de sus tareas recaen sobre componentes software que se ejecutan sobre un determinado sistema operativo. Sin embargo en dispositivos de muy pequeños dispositivos y mucho menos sofisticados como controladores de temperatura, alarmas, etc. existe la duda de si precisan de un sistema operativo, y en ocasiones resulta complicado resolver esa duda por la falta de información. Linux ofrece un sistema operativo muy moldeable y ajustable debido a la modularidad de diseño de su kernel, al que puedes añadir y quitar piezas de una manera muy sencilla, reduciendo o aumentando su funcionalidad y tamaño. Además el hecho de disponer del código fuente facilita que se pueda conseguir la total optimización del código al dispositivo en el que residirá. Linux también contempla algo que otros sistemas no consideran importante y es el hecho de poder actualizar el software del dispositivo. De esta forma si un usuario desea tener una versión mas moderna de un editor de mensajes SMS en su viejo móvil pueda hacerlo aunque vaya mas despacio, sin necesidad de tener que actualizar el terminal. Linux y el resto de proyectos Open Source que se regalan bajo licencia GPL liberan a las empresas de las ataduras que provocan las licencias propietarias. El software propietario constituye una especie de ”caja oscura” sobre la que no se tiene control alguno, se desconoce su interior y lo único puede se puede hacer con ella es 21 utilizarla. Cada instalación realizada sobre un determinado dispositivo lleva asociada además el coste de la licencia software, y eso hará que se encarezca el producto final que se esta desarrollando. En algunos dispositivos como son los servers, resultaría interesante que el usuario pudiese adquirir únicamente el hardware, lo físico del dispositivo, y después que el usuario pudiera decidir que software introducir, de manera que no tenga que adquirir y pagar el ”pack” completo de hardware y software. Al proporcionar de manera libre y abierta un sistema robusto, conocido y de alta calidad como es el caso del kernel de Linux, es mas probable que proliferen nuevas empresas especializadas en el desarrollo del software de sistemas empotrados como Montavista, que no tienen que partir de cero. Se potencia de esta forma la libre competencia que favorecerá la calidad del producto final que le llega al consumidor. Desde el punto de vista de desarrollo, se apunta hacia un nuevo concepto de ”miniaturización del software” mediante se trabaja en la reducción de tamaño y en la optimización de código para conseguir mas rapidez de ejecución de muchas de las tecnologías software implementadas en los últimos tiempos. Se debe prescindir del funcionalidades extras para hacer que todo ocupe menos tamaño. El tema de seguridad y la estabilidad también merece su reflexión. Si se piensa en el actual panorama de Windows, por ejemplo, sistema operativo en entornos abiertos de red en el que un dia si y otro también numerosos virus y gusanos están dejando al descubierto sus múltiples debilidades, los mas alarmistas se preguntan por el impacto que puede llegar a tener uno de estos fallos en el usuario final cuando por culpa de uno de estos gusanos su teléfono envíe SMS automáticamente a todos sus contactos. Sin embargo el tema de la licencia GPL esta resultando un problema para los actuales modelos de mercado para los que cuestan aplicar la filosofía ”Dad gratis lo que gratis recibisteis” y comienzan a aparecer violaciones de la GPL como ha ocurrido con la compañía de KISS con sus reproductores DivX y la aplicación MPlayer. Las empresas siguen sin ver claro la manera de sacar dinero con el Open Source. Otro problema al que se enfrenta Linux es el del soporte para los nuevos hardware de aquellas compañías que no proporcionan drivers adecuados para este sistema operativo, lo que provoca que haya que esperar un tiempo hasta que ese driver se desarrolle. 22 8. BIBLIOGRAFIA • Abbott, Doug – “Linux for embedded and real-time applications” • Lombardo, John – “Embedded Linux” • www.linuxdevices.com • http://es.tldp.org/ • www.linux.org • http://www.embeddedlinuxinterfacing.com/ • http://www.laplazamenor.com/linux/distribuciones.htm • http://www.embedded-linux.org • http://www.linux-es.org/ • http://www.linuxiso.org • www.linuxembedded.com 23 ÍNDICE 1. INTRODUCCIÓN ......................................................................................................... 2 1.1 CARACTERIZACIÓN DE UN SISTEMA EMPOTRADO ..................................................... 2 2. DISPOSITIVOS DE COMUNICACIONES COMPLEJOS ........................................... 3 2.1 ROUTER ................................................................................................................... 3 2.2 FIREWALL ................................................................................................................ 3 2.3 SWITCH .................................................................................................................... 3 2.4 HUB ......................................................................................................................... 4 2.5 NECESIDAD DE UN SO EMPOTRADO EN ESTOS DISPOSITIVOS ................................... 4 2.5.1 Linux.................................................................................................................. 5 3. PARTICULARIDADES DE SO PARA DISPOSITIVOS DE COMUNICACIONES .... 6 3.1 CARACTERÍSTICAS HABITUALES HARDWARE ........................................................... 6 3.1.1 Procesador ......................................................................................................... 6 3.1.2 Memorias ........................................................................................................... 6 3.2 SISTEMAS OPERATIVOS EN TIEMPO REAL ................................................................. 7 3.3 KERNEL ................................................................................................................... 8 3.3.1. El Kernel de Linus Torvalds ............................................................................... 8 3.4 LIBRERÍAS C EMPOTRADAS ...................................................................................... 8 3.4.1 Principales librerías ........................................................................................... 9 3.5 JAVA ........................................................................................................................ 9 4. SO HABITUALES EN ESTOS EQUIPOS .................................................................. 11 4.1 UCLINUX ............................................................................................................... 11 4.1.1 Diferencias entre Linux y uCLinux ..................................................................... 11 5. DISTRIBUCIONES DE LINUX .................................................................................. 13 5.1 BLUECAT LINUX.................................................................................................... 13 5.2 RT-LINUXRTLINUXPRO ....................................................................................... 13 5.3 FLIGHTLINUX ........................................................................................................ 14 5.4 WHITE DWARF LINUX ........................................................................................... 14 5.5 ETLINUX ................................................................................................................ 14 5.6 COOLLINUX ........................................................................................................... 14 5.7 PEEWEELINUX ...................................................................................................... 15 6. ESTUDIO DE MERCADO .......................................................................................... 16 6.1 ROUTER ................................................................................................................. 16 6.1.1 D-Link DSL-G604T ........................................................................................... 16 6.1.2 SnapGear VPN ................................................................................................. 16 6.2 FIREWALL .............................................................................................................. 17 6.2.1 InterJak 200 ..................................................................................................... 17 6.2.2 CyberGuard PCI............................................................................................... 18 6.3 SWITCH .................................................................................................................. 18 6.3.1 SG300 .............................................................................................................. 18 6.3.2 Gateway i3 Vood .............................................................................................. 19 6.4 HUB ....................................................................................................................... 19 6.4.1 Wiscore Tenon .................................................................................................. 19 24 6.5 OTROS ................................................................................................................... 20 6.5.1 Toshiba Wireless Mobility Server ....................................................................... 20 7. CONCLUSIONES ....................................................................................................... 21 8. BIBLIOGRAFIA ......................................................................................................... 23 25