Linux en equipos de comunicaciones

Anuncio
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
Descargar