IngoberWiki

Omnia sunt communia

Herramientas de usuario

Herramientas del sitio


dispositivos_ingobernables_device_tree

¡Esta es una revisión vieja del documento!


  1. Que es el árbol de dispositivos
  2. Perspectiva del usuario: Iniciar con el árbol de dispositivos.
  3. Sintaxis y compilación del Basic Device Tree.
  4. Ejemplo simple de fragmento de árbol de dispositivo.
  5. Organización general de un árbol de dispositivos.
  6. Ejemplos de uso del árbol de dispositivos.
  7. Consideraciones generales sobre el Árbol de dispositivos en Linux.

En informática, un árbol de dispositivos (también escrito device tree) 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 GPU, 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

dispositivos_ingobernables_device_tree.1540810715.txt.gz · Última modificación: 2018/10/29 11:58 por pietre