Este artículo técnico detalla el proceso de instalar NixOS en un dispositivo Steam Link, un hardware de Valve que utiliza un procesador Arm. El objetivo es crear un sistema operativo ligero y de bajo consumo que permanezca activo continuamente. El autor identifica que el principal obstáculo técnico es que el cargador de arranque del Steam Link solo permite ejecutar kernels firmados por Valve. Para superar esta limitación, se emplea la técnica de kexec, que permite cargar un nuevo kernel sobre el existente sin reiniciar el sistema.
El desafío específico radica en que el kernel original del Steam Link no incluye la funcionalidad kexec. La solución propuesta consiste en compilar un módulo de kernel minimalista que añade la llamada de sistema kexec al sistema en ejecución. El texto describe el proceso de compilación de este módulo, destacando la necesidad de adaptar el código fuente al kernel antiguo (versión 3.8.13) y resolver conflictos de compilación con GCC moderno, como la eliminación de flags de endurecimiento por defecto.
El proceso de construcción involucra la creación de un entorno de compilación cruzado (cross-compile) para la arquitectura armv7l. Se utiliza un fork de NixOS para generar el initrd y el kernel personalizado. Además, se integran parches específicos para corregir errores de compatibilidad en el kernel de Valve, permitiendo que el módulo kexec se compile correctamente. Una vez generado el módulo, se combina con el nuevo initrd y el kernel, utilizando el blob del árbol de dispositivos (device tree) oficial de Linux para la configuración del hardware. Este enfoque permite a los usuarios de Linux experimentar con distribuciones personalizadas en hardware de consola, aprovechando la conectividad Ethernet, WiFi y Bluetooth del dispositivo.
