Capítulo 1 - Introducción

Autor: Emiliano P. López - Santa Fe (Argentina)

Motivación

Los sistemas embebidos se han masificado y extendido de tal modo que es usual encontrar un dispositivo de estas características en cualquier hogar. Equipos reproductores de video, cable-modems, reproductores portátiles de música, routers adsl, etc. son algunos de los dispositivos comúnmente comercializados.
Estos artefactos realizan un conjunto limitado de operaciones, permitiendo al usuario modificar determinados parámetros para adaptarlos a su uso. Estos equipos responden en función de la configuración que el usuario ha elegido, y el límite de estas modificaciones se ve acotado por las posibilidades que permite el sistema de origen, desarrollado en la mayoría de los casos por los mismos fabricantes del hardware.
Desde el punto de vista del usuario el manejo y configuración de estos sistemas no es mas que una caja negra donde bajo ciertas modificaciones en los parámetros se modifica el comportamiento del equipo.
Si bien esta es una característica distintiva de los sistemas embebidos, es también una limitante. El sistema de origen no puede ser modificado libremente, por ende, nos encontraremos imposibilitados de otorgar al equipo de características particulares.
En la actualidad, los sistemas embebidos, en particular los routers, además de las características de comunicaciones como interfases ethernet (802.3), wireless (802.11) y serie (RS-232) poseen recursos de hardware (microprocesadores, memoria RAM y ROM) capaces de ejecutar un sistema operativo que ha sido diseñado para ejecutarse en una computadora de escritorio.
Un sistema operativo de estas características, como GNU/Linux, puede ser modifificado libremente para ser embebido en dispositivos de este tipo. Esta alternativa es posible debido a que GNU/Linux esta dispobible para una gran arquitectura de hardware (MIPS, ARM, PowerPC, SPARC, i386, etc.) y fundamentalmente porque es un sistema operativo libre, distribuido bajo la Licencia Pública Gerenal GNU (GPL, del inglés Gernal Public Licence).
En la actualidad hay un creciente uso de GNU/Linux como sistema embebido en dispositivos de redes, telefonos celulares inteligentes (smart phones), etc. debido a su gran estabilidad, flexibilidad y actualización continua.

Este proyecto realiza la implementación de un sistema GNU/Linux en un dispositivo router de arquitectura MIPS con el fin de otorgar no solo funcionalidades adicionales a las usuales en este tipo de equipos sino además brindar un entorno flexible y dinámico, que permita al usuario una modificación constante según su campo de aplicación y según sus necesidades puntuales.

Objetivos

Objetivos generales

  • Adquirir nuevos conocimientos relacionados con sistemas operativos, sistemas embebidos, electrónica y comunicaciones bajo entornos GNU/Linux.
  • Vincular los conocimientos adquiridos en el trascurso de la carrera para realizar un aporte ingenieril.

Objetivos específicos

  • Determinar los componentes del hardware: Para realizar la compilación del kernel y sistema en general que correrá en el equipo destino, es necesario conocer exactamente qué componentes de hardware posee el dispositivo.
  • Configurar y compilar el kernel: Configurar el kernel para dar soporte a los diferentes componentes de hardware y a los protocolos necesarios, obteniendo como resultado un kernel compacto, robusto y veloz.
  • Construir el sistema de archivos raíz: En función del campo de aplicación del equipo es necesario acotar el sistema de archivos. Los protocolos y funciones que deseemos otorgar al dispositivo, esto incluye los archivos binarios, las librerías y sus dependencias.
  • Configurar el sistema y sus servicios: Ajustar el sistema para que se desempeñe de manera esperada y corriendo los servicios previstos.
  • Documentación: Realizar una completa y detallada documentación de las etapas llevadas a cabo a fin de que este documento sirva como referencia para llevar adelante proyectos de esta naturaleza.

Antecedentes de sistemas GNU/Linux embebido

El sistema operativo GNU/Linux, tal como lo conocemos, realiza su primera aparición en 1991 cuando se le suma al proyecto creado por Richard Stallman en 1983, denominado GNU (acrónimo recursivo que significa GNU is Not Unix) el kernel desarrollado por Linus Torvals. Luego de que Richard Stallman crea la Fundación de Software Libre (FSF, del inglés Free Software Foundation) se da origen a la Licencia Pública General GNU (GPL, del inglés GNU General Public Licence) posibilitando el desarrollo de software libre en el sistema de copyright. Esta licencia permitía a cualquier persona, programador o no, acceder al código fuente para realizar aportes y modificaciones libremente, manteniendo este software modificado la misma licencia. Este modelo de desarrollo de código abierto fomenta una comunidad que se retroalimenta con la colaboración, a través de internet, de todos los programadores alrededor del mundo. Este es el principal motivo que justifica el continuo crecimiento y expansión de GNU/Linux.
Si bien GNU/Linux ha sido desarrollado para funcionar en servidores y computadoras de escritorio, en lo últimos años y debido a su código abierto se ha ido diversificando su campo de aplicación.
Así fue como en 1996 surgió un proyecto de investigación denominado RT-Linux para implementar GNU/Linux en sistemas de tiempo real, utilizando un kernel pequeño y compacto. Un año mas tarde, el proyecto uClinux, comenzaba con el objetivo de utilizar GNU/Linux en procesadores sin unidades de administración de memoria (MMU, del inglés Memory Management Unit), es a partir de esta fecha y durante los 6 años subsiguientes que se comienza a utilizar ampliamente GNU/Linux en sistemas embebidos.
Raghavan [2] realiza una breve descripción de los acontecimientos mas relevantes relacionados con los sistemas embebidos basados en GNU/Linux:

Año 1999

  • En la Conferencia de Sistemas Embebidos (ESC, del inglés Embedded Systems Conference) de Septiembre de 1999 companias como Lineo, FSM Labs, MontaVista y Zentropix anuncian su soporte a sistemas Linux embebidos.
  • Rick Lehrbaum comienza el portal de Linux embebido: Linuxdevices.com
  • BlueCat Linux fue anunciada como la primer distribución comercial de Linux embebido

Año 2000

Una gran cantidad de compañías adoptan Linux embebido en sus lineas de productos

  • Samsung lanza Yopy, una PDA con Linux embebido.
  • Ericsson lanza el HS210, un teléfono con pantalla que combina conectividad inalámbrica con acceso a internet, telefonía y funciones de correo electrónico.
  • Atmel anuncia el lanzamiento de un dispositivo de único chip basado en Linux, el AT75C310, que incluye soporte para VoIP y audio.

El desarrollo de herramientas y utilitarios para utilizar en el desarrollo de sistemas Linux embebidos

  • Busybox
  • Goahead
  • Trolltech
  • ViewML

Otro hecho mas que importante fue la fundación del Consorcio de Linux Embebido (ELC, del inglés Embedded Linux Consortium) conformada por corporaciones como Intel e IBM cuyo objetivo fue facilitar el uso de Linux y de código abierto en áreas de sistemas embebidos.
Ese mismo año el Laboratorio de Desarrollo de Código Abierto (OSDL, del inglés Open Source Development Lab) es fundado por HP, Intel, IBM y NEC con el objetivo de dar soporte empresarial a soluciones Linux.

Año 2001

El gran anuncio de este año fue la liberación del kernel 2.4, la cual luego fue adoptada en la mayoría de las distribuciones embebidas de Linux.

  • Sharp Electronics introduce PDAs basadas en Linux.
  • Se libera uClibc 0.9.8, uClibc es una parte integral de la mayoría de las distribuciones de Linux embebido.
  • Fue conformado el Consorcio Eclipse, formado por grandes compañías como IBM, SuSE, Red Hat, Borland con el objetivo de proveer un entorno de desarrollo para sistemas embebidos.

Año 2002-2004

Se produce el mayor avance de Linux en el mercado de sistemas embebidos.

  • Motorola anuncia su teléfono movil A760 que utiliza Linux como sistema operativo embebido.
  • Linux alcanza mayor penetración en el mercado de dispositivos de redes como gatways, routers, y equipos inalámbricos SOHO (del inglés, Small Office-Home Office).

El avance de GNU/Linux como sistema operativo embebido en los últimos años ha sido adoptado por la mayoría de las compañias. AMD, ARM, TI, Motorola, Intel, entre otras, han preferido utilizar GNU/Linux en sus diferentes plataformas de hardware.
Esta tendencia se ve reflejada en el estudio realizado en los útimos años por Linuxdevices [1] en la figura 1.

embedded_OS_sourcing_trends.jpg

La breve reseña sobre la evolución de GNU/Linux como sistema operativo embebido da cuenta de la tendencia del mercado de los sistemas embebidos. Esta situación alentadora, motiva el rumbo de este proyecto final de tesis de grado.

Descripción general de la propuesta

En el área de redes de datos existen equipos de pequeño y mediano porte, usualmente denominados SOHO, utilizados como gatways o routers para brindar conectividad entre pequeñas redes y hacia internet llevando a cabo tareas de enrutamiento, filtrado, redireccionamiento de direcciones IP y puertos, etc. Estas tareas son ejecutadas por el software y sistema operativo de fábrica.
Estos equipos internamente poseen placas denominadas SBC (del inglés, Single Board Computer) con recursos de hardware suficientes como para correr un sistema operativo de escritorio como GNU/Linux.

La propuesta general de este proyecto consiste en implementar un router en un SBC Routerboard 532 ejecutando como sistema operativo embebido GNU/Linux.
El equipo seleccionado posee interfaces de red ethernet, serie RS-232, buses mini-PCI que posibilitan la conexión de placas wireless, y una ranura para la conexión de memorias compact flash (TII y III).
Para llevar a cabo la propuesta se realizará la configuración y compilación del sistema en una PC de escritorio corriendo GNU/Linux y luego se realizará la transferencia del mismo hacia la memoria compact flash para que finalmente sea conectado a la placa SBC, configurando esta para que realice la búsqueda y arranque del sistema operativo desde la memoria compact flash.

De este modo, cuando el dispositivo sea energizado, luego de realizar las tareas de control e inicialización de hardware buscará el sistema operativo almacenado en la memoria compact flash, en vez de realizar el arranque típico del sistema origen desde su memoria NAND.

Una vez en funcionamiento el sistema GNU/Linux en el SBC Routerboard 532, se procederá a instalar y configurar los diferentes servicios necesarios para brindar tareas de enrutamiento y funciones básicas de filtrado.

Por último, se optimizará el sistema y probará bajo diferentes circunstancias con el fin de evaluar su desempeño y estabilidad.

Otra tarea, no menos importante, es la documentación de todos los pasos y los resultados obtenidos en cada una de las diferentes etapas, de modo que las acciones realizadas sirvan de guia y como base de conocimientos para la elaboración de proyectos de esta naturaleza.

De modo específico, las etapas son las siguientes:

1- Implementar un entorno de compilación cruzada.

La arquitectura de hardware que poseen las computadoras de escritorio, tipo PC, difieren por completo de la que poseen los dispositivos SBC. Sin embargo, para desarrollar sistemas embebidos es necesario realizar tareas de compilación que requieren recursos de procesamiento y memoria que los SBC no poseen. Por este motivo, es necesario realizar en una PC de escritorio la compilación del sistema Linux que luego será ejecutado en el SBC. Este tipo de compilación se denomina compilación cruzada, y a diferencia de la compilación nativa en donde se utiliza la misma arquitectura de hardware tanto para la compilación como para la ejecución, aquí, mediante la PC de escritorio (sistema host o huesped) se producen ejecutables para un sistema de otra arquitectura (sistema target u objetivo).
Para realizar estas tareas, se implementara bajo Linux un entorno de compilación cruzada, instalando y configurando las librerías C (glibc, uClibc), el compilador de C (gcc) y utilitarios para binarios (binutils) a fin de compilar/enlazar/enzamblar programas.
Llevar a cabo este proceso es una ardua tarea debido a que estos tres elementos mencionados son desarrollos independientes y cada uno posee su repositorio con decenas de versiones disponibles, hallar este triplete herramientas cuyas versiones sean compatibles, para luego configurarlas e instalarlas correctamente es el primer paso para comenzar las pruebas de compilación del sistema de archivos y del kernel.

2- Configurar y compilar el kernel y el sistema de archivos
Una vez hemos creado satisfactoriamente el entorno de compilación cruzada para la arquitectura de hardware que posee nuestro SBC, necesitamos proceder con la configuración del kernel de Linux, dando soporte para el hardware que disponemos y para los servicios de red que pretendemos brindar (firewall, proxy, etc).
Luego de esta configuración se procede a realizar la compilación, obteniendo un kernel ejecutable para el sistema target u objetivo.
En esta etapa se producen gran cantidad de errores de configuración que surgen al momento de prueba del kernel en el hardware destino, esto demanda mucho tiempo por ende, como herramientas de soporte utilizaremos emuladores, a fin de encontrar errores rápidamente realizando de manera más ágil y menos engorrosa el proceso de depuración.
Otra tarea seguida a las previamente nombradas, consiste en crear el arbol de directorios y subdirectorios del Linux que luego almacenaremos en conjunto con el kernel en el equipo objetivo.

3- Transferir el sistema al equipo objetivo
Esta etapa, a diferencia de las anteriores, no presenta mayores inconvenientes. La transferencia del sistema Linux desde el equipo host al target puede realizarse tanto por una conexión de red como utilizando una memoria compact flash.
En las pruebas iniciales y por una cuestión de practicidad y agilidad la transferencia se realizará por red, mediante un servidor FTP en el sistema host y utilizando desde el SBC el arranque bajo BOOTP.

4- Arrancar el SBC iniciando el sistema desde la memoria compact flash
Cuando se haya obtenido un sistema estable, almacenaremos el sistema Linux en una memoria compact flash, configurando el equipo para que en el arranque realice la búsqueda del sistema desde esta memoria. Para esto disponemos de un lector de memorias compact flash conectado a la PC mediante el puerto USB.

5- Configurar servicios mínimos para brindar conectividad y enrutamiento
Una vez que el sistema se encuentra funcionando de manera estable en el equipo SBC, se procede a realizar la instalación y configuración de paquetes necesarios para brindar conectividad y filtrado a aquellos equipos que se conecten al SBC, protocolos básicos de enrutamiento y firewall. A partir de esto y en función del espacio disponible en la memoria compact flash se irán instalando diferentes servicios y soporte para algunos lenguajes interpretados, como python por ejemplo.

6- Realizar pruebas de desempeño y estabilidad
Las pruebas realizadas en etapas anteriores se encontraban en condiciones ideales, alejadas del ambiente real de trabajo donde puede recibir cientos o miles de pedidos, en donde cada acceso o traspaso por el equipo genera logs de actividad y consume recursos.
Por este motivo, para simular condiciones reales, se someterá al sistema a situaciones controladas (banco de pruebas) de tráfico medio y excesivo a fin de evaluar su estabilidad y desempeño.

7- Optimizar el sistema
En base a los resultados anteriores se realizarán pequeñas modificaciones, tanto en los servicios como en la configuración del kernel, a fin de mejorar el desempeño y estabilidad.

Es importante aclarar que, en excepción de la primera etapa, cada uno de estos pasos previamente descriptos no son estrictamente secuenciales, sino que se produce una retroalimentación con etapas previas y posteriores, incluso, sin ser estas subsiguientes. Gráficamente lo observamos en la siguiente figura.

etapas.png
Bibliography
1. Linuxdevices.com
2. P. Raghavan, A. Lad, S. Neelakandan - Embedded Linux System Design and Development
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License