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.