IngoberWiki

Omnia sunt communia

Herramientas de usuario

Herramientas del sitio


dispositivos_ingobernables_device_tree

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anterior Revisión previa
Próxima revisión
Revisión previa
dispositivos_ingobernables_device_tree [2018/04/05 16:09]
pietre
dispositivos_ingobernables_device_tree [2018/11/03 17:57] (actual)
pietre
Línea 1: Línea 1:
-====== Árbol ​de dispositivos ​======+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.
  
-Esta página describe cómo escribir un árbol ​de dispositivos para una nueva máquina. Se pretende proporcionar una visión general ​de los conceptos de árbol de dispositivos y cómo se utilizan para describir una máquina.+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).
  
-Para obtener una descripción técnica completa del formato del árbol ​de dispositivos, ​consulte la especificación ePAPR v1.1. La especificación ​de ePAPR cubre con mucho más detalle ​que los temas básicos cubiertos ​en esta páginaconsúltelo su en caso de necesitar mas información que no esté cubierto por esta páginaEl ePAPR está siendo actualizado con un nuevo nombre ​de Device tree Specification Documentation.+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 operativopero también pueden generar un árbol de dispositivos ​en las primeras etapas ​de arranqueComo 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.
  
-  - Formato ​de datos básico +**Formatos ​de árbol ​de dispositivos**
-  - Conceptos básicos +
-  - Máquina ​de ejemplo +
-    - Estructura inicial +
-    - CPU +
-    - Nombres de nodos +
-    - Dispositivos +
-    - Descripción de la propiedad compatible +
-  - Cómo funciona el direccionamiento +
-    - Dirección de la CPU +
-    - Dispositivos con memoria asignada +
-    - Dispositivos sin memoria asignada +
-    - Rangos (traducción de direcciones) +
-  - Cómo funcionan las interrupciones +
-    - Datos específicos del dispositivo +
-  - Nodos especiales +
-    - aliases Node +
-    - Nodo elegido +
-  - Temas avanzados +
-    - Máquina de muestra avanzada +
-    - PCI Host Bridge +
-      - Numeración del bus PCI +
-      - Traducción de direcciones PCI +
-    - Mapeo Avanzado de Interrupciones +
-  - Notas +
-         +
-         +
-==== 1 Formato de datos básico ====+
  
 +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.
  
-El árbol ​de dispositivos es una estructura ​de árbol ​simple ​de nodos y propiedadesLas propiedades son pares clave-valor,​ y el nodo puede contener tanto las propiedades como los nodos secundarios. Por ejemplo, el siguiente es un árbol ​simple ​en el formato .dts:+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 plataformaLos 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
  
-/dts-v1/;+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.
  
-/ { 
-    node1 { 
-        a-string-property = "A string";​ 
-        a-string-list-property = "first string",​ "​second string";​ 
-        // hex is implied in byte arrays. no '​0x'​ prefix is required 
-        a-byte-data-property = [01 23 34 56]; 
-        child-node1 { 
-            first-child-property;​ 
-            second-child-property = <1>; 
-            a-string-property = "​Hello,​ world";​ 
-        }; 
-        child-node2 { 
-        }; 
-    }; 
-    node2 { 
-        an-empty-property;​ 
-        a-cell-property = <1 2 3 4>; /* each number (cell) is a uint32 */ 
-        child-node1 { 
-        }; 
-    }; 
-}; 
  
 +===Árbol de dispositivos:​ Resumido===
  
-Este árbol ​es obviamente bastante inútil porque no describe nada, pero muestra la estructura ​de nodos propiedadesAquí tenemos:+El árbol de dispositivos son un conjunto de archivos .dts y .dtsi que se encuentran arch/​arm/​boot/​dts en la carpeta del código fuente del kernel de linux. 
 +se editan con un editor de textos simple como gedit leafpad o geany, ​
  
-un único nodo raíz: "/"​ +Estos archivos se han de modificar para configurar ​un archivo concreto para tu objetivo, ya sea una tablet, ​un teléfono móvil, ​un gps o cualquier dispositivo arm que queramos hacer funcionar con Linux
-un par de nodos secundarios:"​node1"​ y "​node2"​ +
-un par de nodos hijos de node1: "​child-node1"​ and "​child-node2"​ +
-un montón de propiedades dispersas a través del árbol.+
  
 +Cuando tenemos configurado el archivo o los archivos para tu objetivo hay que compilarlo,
  
-Las propiedades son pares clave-valor simples donde el valor puede estar vacío ​contener un flujo de bytes arbitrario. Aunque los tipos de datos no están codificados en la estructura de datos, existen algunas representaciones de datos fundamentales que pueden expresarse en un archivo ​de origen de árbol de dispositivos.+Yo conozco 2 opciones, compilar ​el árbol entero ​solo un archivo. ​
  
 +a la hora de compilar el kernel se compilar también todo el árbol con la orden dtbs
  
-Las cadenas de texto(string(null terminated) se representan con comillas dobles+''​make -j$(nprocARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage modules dtbs  
 +''​
  
-''​string-property = "a string";''​+Si se realiza cualquier cambio en el árbol después de compilar el kernel solo se tiene que invocar:
  
 +''​make -j$(nproc) ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- dtbs'' ​
  
-Cell son enteros sin signo de 32 bits delimitados por corchetes angulares: 
-cell-property = <0xbeef 123 0xabcd1234>;​ 
  
-Los datos binarios (binary) se delimitan con corchetes:+==Árbol de dispositivosDocumentación oficial==
  
-''​binary-property = [0x01 0x23 0x45 0x67];''​+Para poder leer la documentación oficial del árbol de dispositivos que se aplica en el kernel de linux puede hacerlo online ​
  
-Los datos de diferentes representaciones se pueden ​concatenar juntos usando ​una coma:+https://​www.kernel.org/​doc/​Documentation/​devicetree/​ 
 + 
 +También puede descargar el código fuente ​de linux y poder leer los archivos de documentación en la carpeta "​Documentaction/​devicetree/​bindings y así poder empezar a sentirse hacker!! ​  
 + 
 + 
 +Podríamos identificar 3 tipos de archivos del árbol, (estas denominaciones me las estoy inventando por que no tienen conceptos asociativos validos en ingles) 
 + 
 +dts de definición de modelo 
 + 
 +dts de definición de gama 
 + 
 +dtsi de definición de subarquitectura 
 + 
 +Esta separación ha sido casual o practica, no esta documentada esta practica en los manuales oficiales del árbol de dispositivos,​  
 + 
 +**dts de definición de modelo:** 
 + 
 +Estos archivos hacer referencia a un modelo determinado,​ es decir si samsung tuviese el interés de pasar sus tablets a linux (que utopia) tendría que hacer todo un árbol de dispositivos propio, los del ultimo nivel serían estos ficheros que harían referencia a un modelo exacto, con un RAM,​CPU,​NAND,​Wi-Fi concreto. 
 + 
 +**dts de definición de gama** 
 + 
 +Estos archivos ​pueden ​ser dts o dtsi, y si continuamos con el mismo ejemplo de samsung estos ficheros harían referencia a una gama entera de la que se diferenciasen componentes como Wi-Fi ,usb y controlador de energía, pero que mantienen siempre el mismo tipo de procesador,  
 + 
 +**dtsi de definición de subarquitectura** 
 + 
 +Estos ficheros compondrían los componentes de subarquitectura,​ por ejemplo todas las tablets samsung de 32 bits, definen los conceptos básicos del procesador, las dependencias de estos ficheros suelen ser archivos .c
  
-''​mixed-property = "a string",​ [0x01 0x23 0x45 0x67], <​0x12345678>;''​ 
  
-Las comas también se utilizan para crear listas de cadenas 
-string-list = "red fish", "blue fish"; 
dispositivos_ingobernables_device_tree.1522937341.txt.gz · Última modificación: 2018/04/05 16:09 por pietre