martes, 14 de septiembre de 2010

Dos casos de como extender módulos de Linux para temas particulares

Router linux: SyncLink + HDLC + Frame Relay?


Alla por el 2000, cuando internet por banda ancha no existia (en gran medida), en el lugar donde trabajaba decidimos contratar una linea dedicada de telefónica.

Para no comprar un costoso router, la idea era conectarla directamente al servidor linux.
Inicialmente desde la empresa de comunicaciones me habían confirmado que era una linea punto-a-punto común, con protocolo PPP, entonces compramos una placa SyncLink serie sincrónica de alta velocidad para conectar al "modem" de telefonica.

Lamentablemente no funcionó, ya que en realidad el servicio se conectaba directamente a la red Frame Relay, por lo que la placa por si sola (un puerto serie), no era suficiente (por algún malentendido no nos habían enviado la información técnica correcta... menos mal que no compramos un router más caro).

Si mal no recuerdo, en su momento, Linux soportaba levantar un canal DLCI de Frame Realy (con hardware especial), pero no había un módulo con la disciplina de linea HDLC para poder hacerlo desde un dispositivo serie.

Afortunadamente, gracias a que todos los fuentes del sistema operativo estan disponibles, no fue dificil armar un controlador que permitiera establecer este tipo de comunicación (mediante una interfaz de red "especial").

Subí este driver (es un par de archivos relativamente simples, incluyendo módulo, herramienta en modo usuario, scripts de configuración y compilación), por si alguien les puede ser de utilidad, pero creo que esto ya esta soportado en el kernel (de una manera más integrada):

hldc_fr_synclink.zip


Mis disculpas por no haber sido más prolijo en su momento y haberlo documentado mejor, incluyendo los créditos completos para los autores originales de cada porción de código tomada como base.

Picotux: "microcomputador" Linux


Allá por 2005, para un proyecto de control de acceso, donde se debía controlar varios dispositivos físicos (barreras, molinetes, sensores) y lectoras de tarjetas, experimenté con Picotux, una minicomputadora con linux embebido para aplicaciones empotradas.

Dicho aparato es bastante útil, sobre todo porque la conexión de red, memoria flash y capacidad de procesamiento superan por lejos a los microcontroladores convencionales, con la ventaja de que al tener GNU/Linux no solo se pueden administrar y programar remotamente, sino que también es posible usar muchos paquetes de software libre/código abierto (servidores web, protocolos de red, lenguajes de programación, etc.).

En mi opinión, la característica más importante fue, nuevamente, poder modificar el kernel de linux (núcleo del sistema operativo), para agregar funcionalidad particular, en este caso, convertir dos puertos "TTL" (GPIO pins) en serie, para poder controlar más de una lectora.
Gracias a tener disponibles las fuentes del sistema operativo y controladores (y varios ejemplos similares), con un poco de esfuerzo fue posible desarrollar un controlador para puertos serie (UART) por software (conocido como bit-banging) a muy bajo costo (comparado a tener que desarrollarlo por hardware).

También, por si alguien les puede ser de utilidad, subí este driver (un archivo bastante sencillo):
netarm_gpio_swuart.c

Conclusión


Mi idea de comentarlo aquí es solo a modo ilustrativo, de como el linux puede hacer una diferencia cuando tenemos que solucionar cierto tipo de temas particulares.

Además, creo que es un buen punto para educación, por ejemplo en materias como Sistemas Operativos y Redes, posibilitando profundizar y mejorar los contenidos teoricos y prácticos, de manera simple, con temas concretos usando software libre.

Si bien con otros sistemas operativos (no abiertos) se puede desarrollar drivers/controladores, en general no se tiene un acceso completo al código fuente para ver como estan hechas soluciones similares o como se debe comportar en determinados casos (o directamente modificar el sistema operativo para cubrir una necesidad particular), lo que puede impactar en el presupuesto y viabilidad de una solución.

No hay comentarios:

Publicar un comentario en la entrada

Licencia y Aviso Legal

CC BY-SACopyright (C) 2009 - 2013 Mariano Reingart reingart@gmail.com - Visite el sitio http://reingart.blogspot.com/ para novedades. Salvo indicación contraria, el texto de esta página está disponible bajo la Licencia Creative Commons Atribución Compartir Igual 3.0 Unported; podrían ser aplicables cláusulas adicionales.

Se solicita mantener el aviso de copyright (enlazando al texto original), compartir las obras derivadas bajo la misma licencia, y si es, posible comunicando al autor cualquier mejora. No utilizar logotipos ni marcas sin la debida autorización de sus titulares.

Toda información es proporcionada a Titulo Informativo y se entrega como está, sin garantías explícitas ni implicitas de ningún tipo, incluyendo sin limitación, pérdida de ganancias, interrupción de negocios, pérdida de programas u otros datos en sistemas de computación o cualquier otro reclamo. Al usarla acepta hacerlo bajo su propia responsabilidad, conociendo la normativa y reglamentaciones existentes. En caso de controversias respecto del presente, usted acepta presentarlas y resolverlas exclusivamente en la jurisdicción de los Tribunales Ordinarios Civiles y Comerciales del Departamento Judicial de Morón, Provincia de Buenos Aires, Argentina, renunciando expresamente a cualquier otro fuero que pudiere corresponder.