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:08]
pietre se ha restaurado la vieja versión (2018/03/21 03:15)
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 administrar esos componentes,​ incluyendo la CPU o GPU, la memoria, los buses y los periféricos.
-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 ​cómo se utilizan para describir una máquina.+
  
-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ágina, consúltelo su en caso de necesitar mas información que no esté cubierto por esta página. El ePAPR está siendo actualizado con un nuevo nombre ​de Device tree Specification Documentation.+La razón principal para la existencia ​de Device Tree en Linux es proporcionar una forma de describir el hardware ​no detectableEsta 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.
  
-Formato ​de datos básico +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 Referenceincluidos algunos Apple Macintosh).
-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 +
-El árbol de dispositivos es una estructura de árbol simple de nodos y propiedades. Las propiedades son pares clave-valory el nodo puede contener tanto las propiedades como los nodos secundarios. Por ejemploel siguiente es un árbol simple en el formato ​.dts:+
  
-/dts-v1/;+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 operativoel 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.
  
-  node1 { +**Formatos de árbol de dispositivos**
-      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 { +
-      }; +
-  }; +
-};+
  
-Este árbol ​es obviamente bastante inútil porque no describe nadapero muestra la estructura ​de nodos y propiedades. ​Aquí tenemos:+Un árbol ​de dispositivos puede contener cualquier tipo de datosya 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.
  
-un único nodo raíz: “/” un par de nodos secundarios:​“node1” y “node2” a un par de nodos hijos de node1: “child-node1” and “child-node2” un montón ​de propiedades dispersas a través ​del árbol.+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.
  
-Las propiedades son pares clave-valor simples donde el valor puede estar vacío o contener ​un flujo de bytes arbitrarioAunque 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.+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 arranquepero 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
  
-Las cadenas ​de texto(string) (null terminated) se representan con comillas dobles+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.
  
-string-property = “a string”; 
  
-Cell son enteros sin signo de 32 bits delimitados por corchetes angularescell-property ​<0xbeef 123 0xabcd1234>;​+===Árbol ​de dispositivosResumido===
  
-Los datos binarios (binary) ​se delimitan ​con corchetes:+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, ​
  
-binary-property = [0x01 0x23 0x45 0x67];+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
  
-Los datos de diferentes representaciones ​se pueden ​concatenar juntos usando ​una coma:+Cuando tenemos configurado el archivo o los archivos para tu objetivo hay que compilarlo,​ 
 + 
 +Yo conozco 2 opciones, compilar el árbol entero o solo un archivo.  
 + 
 +a la hora de compilar el kernel ​se compilar también todo el árbol con la orden dtbs 
 + 
 +''​make -j$(nproc) ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage modules dtbs  
 +''​ 
 + 
 +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''​  
 + 
 + 
 +==Árbol de dispositivos:​ Documentación oficial== 
 + 
 +Para poder leer la documentación oficial del árbol de dispositivos que se aplica en el kernel de linux puede hacerlo online  
 + 
 +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.1522937287.txt.gz · Última modificación: 2018/04/05 16:08 por pietre