Es común -entre los aficionados a la electrónica- la pregunta de si es posible correr Linux en un microcontrolador de 8 bits. Usualmente la respuesta es no e incluso, salpicada de algunas burlas. Parte de la dificultad son las necesidades de Linux en términos de hardware. Se dice que se necesita una arquitectura de 32 bits y al menos un megabyte de RAM para poner el kérnel. Sin embargo, he aquí a alguien que decidió demostrar la factibilidad de poner Linux en máquinas de 8 bits. Sin duda asombroso.

El proyecto se basa en usar un microprocesador ATmega1284p. También el autor de este proyecto tuvo éxito al armar una tarjeta similar usando el procesador ATmega644a. El sistema arranca Linux 2.6.34. De hecho,puede cargarse Ubuntu completo, incluyendo -si se tiene tiempo- X y Gnome.

Pero ¿cómo se solucionó el problema de la memoria? Es cierto que Linux requiere de muchos megabytes y un procesador de 32 bits. Para lidiar con el problema de la memoria, se usó un SIMM de memoria, de los que son comunes en máquinas 80286. El autor escribió el código para acceder y refrescar la memoria dentro de las especificaciones (se requiere en todo SDRAM el refrescar constantemente la memoria para no perder datos). La interrupción que refresca la memoria se da cada 62 ms y toma 1.5ms “comiéndose” el 3% del uso del procesador. El RAM se accede byte por byte y por ende, se tiene un máximo de 300 Kbytes por segundo de acceso.

Pero más difícil parece ser el poder ejecutar código de 32 bits en un procesador de 8 bits. El autor, Dmitry, decidió escribir un emulador para ARM. La arquitectura de dicho procesador le es familiar al autor, por lo que no le costó mucho trabajo escribir dicha pieza de software. ¿Por qué escribir el emulador en lugar de portar uno? La respuesta de Dmitry es estupenda: “porque es divertido”. Pero aparte de lograr arrancar Linux en 8 bits, la tarjeta que armó (y diseñó) Dmitry permite comunicarse con el mundo real mediante un puerto serial.

Pero ¿qué tan rápido es? Dmitry aclara que su máquina con Linux de 8 bits no es la más rápida del mercado. Toma 2 horas, sí, dos horas, en bootear hasta que da el prompt de bash. Tomó 4 horas más para bootear Ubuntu. Iniciar X todavía es más lento. La velocidad de reloj emulada es de unos 6.5 KHz. Curiosamente, una vez que el sistema ha arrancado, se puede usar (relativamente), tomando un minuto, quizás menos, en obtener una respuesta de algún comando escrito.

Para el autor, su proyecto es quizás la máquina más barata, lenta, simple de ensamblar a mano, con el menor número de partes, que se puede tener para ejecutar Linux. El autor ha puesto a disposición de quien deseé, toda la información necesaria para hacerse de esta máquina de 8 bits con Linux. En mi opinión, un esfuerzo asombroso.

El video demostrativo a continuación:

Referencias:

Blog de Dmitry