Experimentando con Linux embebido (I)

Tux embedded systemHoy en día existe un gran auge en lo referente a sistemas embebidos, y sobre todo, a los que usan Linux embebido. Actualmente muchas cosas necesitan un computador para funcionar. Cosas como microondas, maquinas de hacer café, lavadoras, o sin ir más lejos, automóviles o teléfonos móviles, todos ellos  usan alguna forma de sistema embebido. En esencia, un sistema embebido se compone de una o dos tarjetas que contiene todo lo necesario para funcionar como un computador autónomo. Sus puntos fuertes son la autonomía, el bajo consumo energético y su pequeño tamaño. Estas tecnologias estan a nuestro alcance, y nos ofrecen la oportunidad de experimentar y adaptar hardware existentes a nuestras necesidades particulares.

 

Algunos antecedentes

Hasta no hace pocos años los sistemas embebidos usaban software propietario, mejor conocidos como firmwares. La dificultad de estos diseños iniciales era la necesidad de emprender el desarrollo de un nuevo firmware cada vez que se cambiaba el procesador base, o este evolucionaba con alguna mejora en su conjunto de instrucciones. Adicionalmente, la creación de aplicaciones que proporcionan la funcionalidad al sistema embebido, eran desarrolladas a la medida, y en muchas ocasiones, con la funcionalidad mínima necesaria. Esto inevitablemente incrementaba los costos de diseño, desarrollo y mantenimiento.

Pero en los últimos años ha proliferado mucho el desarrollo de sistemas embebidos usando como sistema operativo versiones reducidas y adaptadas de Linux (específicamente el kernel) para los actuales procesadores, sobre todo los de arquitectura ARM. Evidentemente esto tiene sus ventajas. A nivel del fabricante de los procesadores, es la oportunidad de ofrecer un producto más completo y con mas herramientas que faciliten un desarrollo rápido, dado que es el propio fabricante quien proporciona el código fuente del kernel Linux y los drivers necesarios para controlar el hardware que compone o acompaña a dichos procesadores. Por otro lado, y quizá para nosotros la razón más importante, es la oportunidad de poder experimentar y/o modificar la funcionalidad de estos dispositivos agregando nuestro propio hardware y software.

Para quien desee experimentar con sistemas embebidos, la primera opción sería adquirir un sistema de desarrollo de algún fabricante reconocido. Existen diferentes opciones en precio y prestaciones, las más básicas empezando en 100$, pasando por sistemas de prestaciones medias entre 300$ y 500$, y llegando hasta los más completos con precios superiores a los 1000$.

 

¿Qué opciones hay?

En mi caso (y creo el de muchos) hacer la inversión a título personal en algunos de estos sistemas de desarrollo se hace claramente prohibitivo, mas si la idea inicial es aprender a modificar y adaptar el sistema operativo, el hardware, o desarrollar alguna aplicación.

En dicho caso existe una alternativa más económica, como puede ser usar algún viejo aparato que use Linux embebido, tales como routers, unidades multimedia, receptores de tv, etc… equipos que no tengamos en uso y/o no nos importe darle otro uso. Muchos de estos equipos usan alguna versión embebida de Linux y puede servir perfectamente para nuestros experimentos. Esto es valido siempre y cuando el fabricante del procesador de dichos equipos proporcioné el apoyo necesario para el desarrollo del firmware, específicamente: (a) código fuente del kernel; (b) herramientas de compilación ; (c) drivers para el hardware asociado al procesador y (d) especificaciones técnicas del procesador.

En mi caso, encontré una buena opción en un router de la marca Comtrend, modelo HG 536+, el cual adquirí de segunda mano por muy poco. Este router se basa en el chipset de Broadcom BCM96348, usando un procesador ADSL+ BCM6348 de 256MHz, y la tarjeta base tiene 8MB de memoria FLASH y 16MB de RAM, además de tener 4 puertos Ethernet y un interfaz WiFI Broadcom 802.11b/g via MiniPCI. El fabricante de este equipo ofrece el código fuente del firmware, el cual está basado el Linux. Este equipo está bastante bien documentado en diferentes sitios en la red,  y tiene una buena base de usuarios que lo han adaptado y modificado a gusto. De hecho, una modificación firmware muy popular es OpenWrt, la cual permite obtener mejores prestaciones funcionales respecto al firmware original.

 

Haciendo modificaciones

Si deseamos poder hacer experimentos a nivel del firmware con este router, será necesario agregar algo de hardware adicional, el cual no ha sido colocado en la tarjeta base. Tal como esta, el router permite cambios y actualizaciones de firmware desde su página de web de configuración, la cual se accede mediante el navegador vía Ethernet en la dirección  http://192.168.1.1 (si el router tiene la configuración original). Este es un interfaz de alto nivel lo suficientemente amigable, pero cuando se empiece a hacer cambios y adaptaciones a nivel de kernel, lo más probable es que no dispongamos de dicho interfaz.

Lo ideal es tener acceso al Common Firmware Environment (CFE), que es el bootloader que nos  permitirá interactuar con el microprocesador. Para ello, es necesario tener acceso a este vía puerto serial RS232.

El router Comtrend HG 536+ no incorpora el conector para RS232, pero lo necesario para activarlo está disponible en la tarjeta base. En este primer artículo abordaremos las modificaciones necesarias a la tarjeta para agregar dicho puerto serial, así como los puertos USB Host y Slave que también están disponibles.

 

Agregando componentes

Lo primero es localizar que zonas de la tarjeta tiene los puntos de conexión para los puertos. Gracias a la información encontrada en Adslzone.net [1] [2] [3] esta operación se facilito bastante.

Para mantener las cosas ordenadas, decidí colocar todos los componentes extras necesarios en dos pequeñas tarjeta perforadas, una interior con los componentes que faltan, adaptada para tal fin al espacio disponible en el interior del router, y otra exterior en donde irán los conectores de los puertos RS232 y USB.

La lista de componentes utilizados para ambas tarjetas es la siguiente:

Tarjeta interior:

Esta tarjeta contiene todos los  componentes pasivos y activos necesarios para completar la funcionalidad de los  puertos serial y USB.

 

1.       Tarjeta perforada de 5cm x 2.5cm

2.       Adaptador TTL-RS232 MAX 232N

3.       Regulador 5V LM7805

4.       4 resistencias de 15K 1/8W

5.       2 condensadores 0.33uF 16V cerámico o poliéster

6.       4 condensadores 1uF tántalo o poliéster

7.       1 condensador de 1uF 16V electrolítico

8.       1 condensador de 470uF 16V electrolítico

9.       Pines de conexión macho 4×2 (8 pines)

10.   2 conectores hembra 4×2 (8 pines)

11.   Cable plano de 10 cm, 8 hilos

 

Las resistencias son para completar el circuito de los puertos USB, en la web de Adslzone.net está bien explicado cómo proceder a la incorporación de estas en la placa base.

Interface RS232-TTL

En el caso del puerto RS232 del router, este está implementado con niveles TTL, así que, para poder usarlo con un puerto RS232 estándar de PC es necesario agregar un adaptador de niveles TTL<->RS232. En este caso, con un MAX232 es suficiente.

 

Tarjeta interior lado soldadura

 

Tarjeta interior lado componentes

Tarjeta exterior:

Esta tarjeta contiene los conectores físicos para los puertos RS232, y USB Host y Slave, los cuales se comunican con la tarjeta interior por medio de un cable plano.

 

1.       Tarjeta perforada de 5cm x 2.5cm

2.       Conector DB9 macho

3.       Conector USB A

4.       Conector USB B

5.       Pines de conexión macho 4×2 (8 pines)

6.       2 conector hembra 4×2 (8 pines)

7.       Condensador cerámico de 10nF

8.       Condensador electrolítico de 1uF 25V

9.       Cable plano 15 cm, 8 hilos

 

El material de trabajo necesario es:

 

1.       Soldador punta fina de 20W o 25W

2.       Estaño 70/30 (de ser posible sin core de resina)

3.       Cinta desoldadora

4.       Pinza

5.       Trozos de cable

6.       Mucha paciencia 😀

Tarjeta exterior lado soldadura

Tarjeta exterior lado componentes

 

 

Montaje e interconexión

La tarjeta interior se conecta por medio de puentes de cable hacia los puntos de soldadura en donde irían físicamente los componentes faltantes. Es necesario indicar que para esta tarea se use un soldador de 25 W o menos, con punta muy fina, y esta debe limpiarla constantemente mediante una esponja húmeda. Los puntos de soldadura son muy pequeños, hechos para componentes SMD y son muy frágiles. También es buena idea tener a mano cinta desoladora, y por nada del mundo se le ocurra usar pasta de soldadura.

 

Montaje y cableado tarjeta interior 01

 

Montaje y cableado tarjeta interior 02

El siguiente paso es modificar la platina plástica posterior para que contenga un conector doble de 8 pines que permitirá comunicar la  tarjeta interior con la tarjeta exterior. Para ello usando una cuchilla se hace un par de pequeños agujeros en la platina y se coloca a presión el conector.

 

Conector

Conector y chasis

Interconexion tarjeta interior al router

Interconexion tarjeta interior al router vista lateral

 

A continuación se fabrica el cable plano, de la longitud necesaria (en mi caso unos 15 cm) colocando en ambos extremos un conector hembra de 8 pines.

Finalmente se interconectar ambas tarjetas por medio del cable plano. Debe cuidar el orden de los pines para que no haya confusión en las conexiones. Una buena idea hubiera sido usar un conector algo más grande, de 10 pines, y convertir un par de ellos en pines llave para garantizar la conexión con el cable de una sola forma predeterminada.

 

Conexcion tarjeta exterior al router

Prueba de conexion al PC

 

 

Probando el puerto serie

Una vez se ha verificado que todo está correctamente conectado y no hay errores, se procede a probar el conector serial (115200 bps, 8N1).

 

 

 

 

Con esto tenemos activado el acceso al procesador por medio del bootloader.

En el próximo articulo se abordara el uso de las herramientas software necesarias para modificar y recompilar el kernel del router.

 

Tambien le puede interesar...