¡Esta es una revisión vieja del documento!
En informática, un árbol de dispositivos (también escrito devicetree) es una estructura de datos que describe los componentes de hardware de una computadora particular para que el núcleo (kernel)del sistema operativo pueda usar y administrar esos componentes, incluyendo la CPU o CPU, la memoria, los buses y los periféricos.
La razón principal para la existencia de Device Tree en Linux es proporcionar una forma de describir el hardware no detectable. Esta información fue previamente codificada en código fuente. El árbol de dispositivos se obtuvo a partir de estaciones de trabajo y servidores basados en SPARC a través del proyecto Open Firmware.
La especificación actual de Devicetree está dirigida a sistemas más pequeños, pero todavía se usa con algunos sistemas de clase servidor (por ejemplo, los descritos por Power Architecture Platform Reference, incluidos algunos Apple Macintosh).
Las computadoras personales con la arquitectura x86 generalmente no usan árboles de dispositivos, confiando en cambio en varios protocolos de configuración automática para descubrir el hardware. Los sistemas que usan árboles de dispositivos generalmente pasan un árbol de dispositivos estáticos (quizás almacenados en ROM) al sistema operativo, pero también pueden generar un árbol de dispositivos en las primeras etapas de arranque. Como ejemplo, Das U-Boot y kexec pueden pasar un árbol de dispositivos cuando se inicia un nuevo sistema operativo. En sistemas con un gestor de arranque que no admite árboles de dispositivos, se puede instalar un árbol de dispositivos estáticos junto con el sistema operativo; el kernel de Linux es compatible con este enfoque.
La especificación Devicetree está actualmente gestionada por una comunidad llamada devicetree.org, que está asociada, entre otros, a Linaro y Arm.
Formatos de árbol de dispositivos
Un árbol de dispositivos puede contener cualquier tipo de datos, ya que internamente es un árbol de nodos y propiedades con nombre. Los nodos contienen propiedades y nodos secundarios, mientras que las propiedades son pares nombre-valor.
Los datos de Device Tree se pueden representar en varios formatos diferentes. Se deriva del formato de árbol de dispositivo utilizado por Open Firmware para encapsular la información de la plataforma. Los datos del árbol del dispositivo normalmente se crean y mantienen en un formato legible para humanos en archivos fuente .dts y archivos de inclusión de fuentes .dtsi. El sistema de compilación de Linux preprocesa la fuente con cpp.
La fuente del árbol del dispositivo se compila en un formato binario contenido en un archivo blob .dtb. El formato de los datos en el archivo blob .dtb se conoce comúnmente como Árbol de dispositivos aplanado (FDT). El sistema operativo Linux usa los datos del árbol del dispositivo para buscar y registrar los dispositivos en el sistema. Se accede al FDT sin procesar durante las primeras fases de arranque, pero se expande a una estructura de datos interna del kernel conocida como Árbol de dispositivos expandidos (EDT) para un acceso más eficiente para fases posteriores del arranque y una vez que el sistema se ha completado arrancando
Actualmente, el kernel de Linux puede leer la información del árbol del dispositivo en las arquitecturas ARM, x86, Microblaze, PowerPC y Sparc. Existe interés en extender el soporte para los árboles de dispositivos a otras plataformas, para unificar el manejo de la descripción de la plataforma en las arquitecturas del kernel.
Perspectiva del usuario: antes del árbol de dispositivos
El núcleo contiene la descripción completa del hardware. El gestor de arranque carga un único archivo binario, la imagen del núcleo, y lo ejecuta (uImage o zImage)
El gestor de arranque prepara información adicional, llamada ATAGS, cuya dirección se pasa al núcleo a través del registro r2. Contiene información como el tamaño y la ubicación de la memoria, kernel línea de comando,etc. el gestor de arranque le dice al kernel en qué placa se está arrancado a través de un entero tipo máquina, pasado en el registro r1.
Comando U-Boot:
bootm <kernel img addr>
Variable de Barebox: bootm.image
Perspectiva del usuario: arrancar con un árbol de dispositivos
El kernel ya no contiene la descripción del hardware,este se ubica en un binario separado: el blob del árbol del dispositivo, El gestor de arranque carga dos binarios: la imagen del núcleo y la DTB La imagen I Kernel permanece uImage o zImage DTB ubicado en arch/arm/boot/dts,uno por placa, El gestor de arranque pasa la dirección DTB a través de r2. Es se supone que debe ajustar el DTB con información de memoria,kernel,línea de comando, y potencialmente otra información.No más tipo de máquina.
Comando U-Boot:
bootm <kernel img addr> - <dtb addr>
Variables de Barebox:
bootm.image, bootm.oftree
El árbol del dispositivo aplanado es …
El árbol de dispositivos aplanado (FDT) es una estructura de datos. Nada mas.
Describe una configuración de hardware de la máquina. Se deriva del formato de árbol de dispositivo utilizado por Open Firmware. El formato es expresivo y capaz de describir la mayoría de los aspectos del diseño de la placa, incluyendo:
el número y tipo de CPU
direcciones base y tamaño de RAM
buses y puentes
conexiones de dispositivos periféricos
controladores de interrupción y conexiones de línea IRQ
multiplexación de pines
Al igual que las imágenes initrd, una imagen FDT puede vincularse estáticamente en el núcleo o pasarse al kernel en el momento del inicio.
El árbol del dispositivo aplanado no es …
no es una solución para todos los problemas del puerto de la placa
Nada eliminará todos los controladores específicos de la placa para placas personalizadas y complejas.
no es una interfaz de firmware
Puede ser parte de una interfaz de firmware genérica, pero por sí solo el árbol de dispositivos es solo una estructura de datos.no reemplaza ATAGS … pero una imagen FDT se puede pasar a través de un ATAG.
no pretende ser una interfaz universal.
Es una estructura de datos útil que resuelve varios problemas, pero si el uso del mismo sigue o no depende del autor del puerto de la placa.
no es un cambio invasivo
No hay requisito para utilizar el enfoque FDT en un puerto de la placa.
Se requiere Device Tree para el nuevo soporte de placa en la arquitectura ARM.
No es necesario convertir puertos de placa existentes.Sin necesidad de modificar el firmware existente