IngoberWiki

Omnia sunt communia

Herramientas de usuario

Herramientas del sitio


dispositivos_ingobernables_device_tree

¡Esta es una revisión vieja del documento!


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

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

dispositivos_ingobernables_device_tree.1523921598.txt.gz · Última modificación: 2018/04/17 01:33 por pietre