El problema fundamental que aborda esta propuesta es la fragmentación y la complejidad en la descripción del hardware para sistemas ARM, específicamente en el contexto de laptops con procesadores Qualcomm Snapdragon ejecutando Linux. Históricamente, los sistemas ARM han dependido de Device Trees (DTs) para describir su hardware a nivel de kernel, un mecanismo que, aunque flexible, exige la creación y mantenimiento de DTs específicos para cada variante de hardware. Esto contrasta con el ecosistema x86, donde ACPI (Advanced Configuration and Power Interface) es el estándar de facto para la enumeración y configuración de hardware.
La proliferación de laptops ARM, especialmente aquellas diseñadas para Windows (WoA), que ya utilizan ACPI, ha expuesto una brecha. Linux en estas plataformas se ve forzado a usar DTs, incluso cuando la información ACPI ya está presente y es utilizada por el sistema operativo propietario. Esta dualidad genera una sobrecarga de ingeniería y retrasa el soporte de hardware. La propuesta de un modo híbrido DT-ACPI busca tender un puente entre estos dos mundos, permitiendo que el kernel de Linux aproveche la información ACPI existente mientras se mantiene la compatibilidad con el arranque basado en DT, con la visión a largo plazo de migrar completamente a ACPI para simplificar el soporte de hardware en el futuro.
Arquitectura del Sistema
La arquitectura propuesta introduce un 'modo híbrido DeviceTree-ACPI' dentro del kernel de Linux. Actualmente, cuando el kernel arranca con un Device Tree (DT) poblado, el subsistema ACPI se deshabilita por completo (acpi_disabled=1). La serie de parches de Hans de Goede modifica este comportamiento. En lugar de deshabilitar ACPI, el kernel ahora parsearía las tablas ACPI y haría que los 'fwnodes' (firmware nodes) de ACPI estuvieran disponibles para los drivers de dispositivo, incluso si el sistema se inició a través de un DT.
Esto implica cambios en el código de arch/arm64 para relajar la restricción de deshabilitar ACPI cuando un DT está presente. Los drivers de dispositivo pueden entonces consultar tanto el Device Tree como las tablas ACPI para obtener información sobre el hardware. Por ejemplo, un driver de teclado o touchpad podría ser instanciado usando datos de ACPI en lugar de su descripción en el DT. Este enfoque permite una coexistencia donde el DT sigue siendo la fuente primaria de verdad para el arranque y la configuración básica, pero ACPI puede complementar o incluso reemplazar la descripción de componentes periféricos. La meta es que, a medida que las tablas ACPI en las laptops Snapdragon mejoren, se pueda eliminar gradualmente la necesidad de DTs específicos, permitiendo un arranque ACPI-only similar al de x86.
Flujo de Arranque con Modo Híbrido DT-ACPI
- 1 Bootloader Carga el kernel de Linux y el Device Tree (DT) en memoria.
- 2 Kernel ARM64 Init Arranca el kernel, detecta el DT poblado.
- 3 ACPI Subsystem En lugar de deshabilitar ACPI, se parsean las tablas ACPI.
- 4 Firmware Nodes (fwnodes) Los fwnodes de ACPI se hacen disponibles para los drivers.
- 5 Device Drivers Los drivers pueden consultar DT y/o ACPI para instanciar dispositivos.
- 6 Hardware Instantiation Dispositivos como teclado/touchpad se instancian vía ACPI.
| Capa | Tecnología | Justificación |
|---|---|---|
| orchestration | Linux Kernel | Plataforma operativa principal que gestiona la interacción entre hardware y software, y donde se implementan los mecanismos de Device Tree y ACPI. |
| storage | Device Tree (DT) | Mecanismo declarativo para describir el hardware del sistema ARM al kernel, utilizado tradicionalmente en SBCs y laptops Snapdragon. vs ACPI (en el contexto ARM) |
| storage | ACPI (Advanced Configuration and Power Interface) | Estándar de la industria para la configuración de hardware, gestión de energía y enumeración de dispositivos, predominante en x86 y usado por Windows en ARM. vs Device Tree (en el contexto ARM) |
Trade-offs
Ganancias
- ▲ Facilidad de soporte de hardware
- ▲ Reducción de la duplicación de esfuerzos de descripción de hardware
- △ Compatibilidad con sistemas WoA existentes
Costes
- △ Aumento de la complejidad del kernel (manejo de dos sistemas de descripción)
- △ Posible ambigüedad en la fuente de verdad del hardware
Fundamentos Teóricos
El desafío de la descripción de hardware en sistemas embebidos y ARM tiene raíces en la necesidad de flexibilidad y eficiencia. Los Device Trees, introducidos por Open Firmware y estandarizados por el proyecto Device Tree Specification, surgieron como una solución para describir el hardware de manera declarativa, desacoplando el kernel del conocimiento específico de la placa. Esto se alinea con principios de diseño de sistemas distribuidos donde la configuración debe ser externa y flexible.
Por otro lado, ACPI, desarrollado por Intel, Microsoft y Toshiba en 1996, representa un enfoque más dinámico y programático para la configuración y gestión de energía. Si bien ACPI es ubicuo en el mundo x86, su adopción en ARM ha sido más lenta debido a la diversidad de hardware y la preferencia histórica por DTs. La propuesta híbrida refleja un compromiso pragmático, buscando la interoperabilidad entre dos paradigmas de descripción de hardware. Este problema se relaciona con la teoría de la configuración de sistemas y la abstracción de hardware, donde la elección entre un modelo declarativo (DT) y uno programático (ACPI) implica diferentes trade-offs en complejidad, flexibilidad y portabilidad.