Interpretación de la arquitectura de desacoplamiento del árbol de dispositivos de Linux-V1.0

Términos y abreviaturas

Este documento utiliza los siguientes términos y siglas

Dts: DTS es Device Tree Source, que es un archivo de texto utilizado para describir información de hardware. Generalmente, es información fija, que no se puede cambiar ni superponer.

Dtsi: puede entenderse como la parte pública de dts, y es muy flexible para agregar y cambiar. Dtsi está incluido en dts.

Dtb: binario compilado por Dtb

Dtbo: binario compilado por Overlay

dtbo-base: especifica qué dtb es la base para cubrir la superposición.

Nodo: el nodo del árbol.

propiedad: propiedad

1. Introducción al árbol de dispositivos

1. Origen del árbol de dispositivos

El código fuente del kernel de Linux se llenó anteriormente con una gran cantidad de configuraciones relacionadas con la plataforma (Dispositivo de plataforma), y la mayoría de estos códigos eran desordenados y repetitivos, lo que hizo que los mantenedores del código y del kernel de la arquitectura ARM tuvieran dificultades para publicar. una nueva versión Tanto trabajo que Linus Torvalds declaró "Gaah. Chicos, todo esto de ARM es un dolor de cabeza" en la lista de correo de ARM Linux el 17 de marzo de 2011, lo que hizo que toda la comunidad de ARM tuviera que reconsiderar Teniendo en cuenta la configuración de la plataforma, la comunidad ARM adoptó el árbol de dispositivos (DT). Cabe señalar que el árbol de dispositivos era originalmente parte del método de comunicación utilizado por el firmware de desarrollo (Open Firmware) para transferir datos al programa cliente (generalmente un sistema operativo). En tiempo de ejecución, el programa cliente descubre la topología del dispositivo a través del árbol de dispositivos, por lo que no es necesario codificar la información del hardware en el programa.

2. El papel del árbol de dispositivos

El árbol de dispositivos es una estructura de datos que describe el hardware, e incluso se puede considerar como una gran estructura (la estructura es la plataforma y los miembros son los dispositivos específicos). Cabe señalar que el árbol de dispositivos no puede resolver todos problemas de configuración de hardware (por ejemplo: reconocimiento de máquinas), solo proporciona un lenguaje para extraer la configuración de hardware del código fuente del kernel de Linux.

Las razones principales por las que Linux usa el árbol de dispositivos son las siguientes

A: Identificación de la plataforma

B: Configuración en tiempo real

C: Implantación del dispositivo

2. Destino de desacoplamiento del árbol de dispositivos

La modificación relacionada con el proveedor de destino es completamente independiente, y está prohibido modificar en el dtsi original del soc, y solo se permite que exista en forma de dtbo;

El objetivo 2 es el mismo que el proyecto de referencia dtbo para compartir binario

3. Diseño del marco de desacoplamiento del árbol de dispositivos

Principio de identificación del árbol de dispositivos y principio co-binario del árbol de dispositivos

Las dos variables de número de proyecto (Project No) y PCB ID coinciden completamente con los dos atributos "dtsi_No" y "pcb_No" en dtbo al mismo tiempo, y se puede encontrar el archivo dtbo correspondiente. Y dtbo se puede empaquetar en dtbo.img a través del control de Makefile, para que se realice el co-binario.

4. Estructura del código de árbol del dispositivo

5. Reglas de superposición del árbol de dispositivos

El contenido de esta sección son las reglas nativas del mecanismo de superposición, que se enumeran para ayudar a los ingenieros de controladores a resolver varios problemas anormales.

Regla 1: para la configuración del mismo nodo, la configuración en dts anulará la configuración en dtsi;

Regla 2: Para la modificación de un nodo, referenciarlo primero y luego modificarlo, por ejemplo, la definición de un nodo nativo es la siguiente:

Si necesita agregar un nuevo nodo al nodo de memoria reservada o modificar directamente las propiedades del nodo de memoria reservada, primero debe hacer referencia al nodo de memoria reservada (tenga en cuenta que el nombre de referencia del nodo y el nombre del nodo pueden ser inconsistentes )

En el caso anterior, se hace referencia al nodo de memoria reservada, se elimina el atributo de rangos, se elimina el nodo hyp_mem y se agrega el nodo kboot_uboot_logmem;

Regla 3: "&nombre de nodo" en dtsi tendrá efecto solo si se hace referencia al nodo declarado; de lo contrario, el punto de referencia no será válido; por ejemplo: el nodo fstab debajo del nodo de firmware se define de la siguiente manera

firmware: el contenido antes de ":" en el firmware es una declaración de referencia. Solo se puede citar en otro lugar después de haber sido declarado. El nodo fstab en Firmware no tiene una declaración de referencia, por lo que no se puede hacer referencia a él en otros lugares. Si desea modificar los atributos en el nodo fstab, consulte el nodo de firmware y luego modifique los atributos en él, el caso es el siguiente:

Para la configuración del mismo nodo, el contenido del archivo dts sobrescribirá el de dtsi.

 Información a través del tren: ruta de aprendizaje de la tecnología del código fuente del kernel de Linux + video tutorial del código fuente del kernel

Aprendizaje a través del entrenamiento: código fuente del kernel de Linux, ajuste de memoria, sistema de archivos, gestión de procesos, controlador de dispositivo/pila de protocolo de red

6. Medios de depuración

En el proceso de depuración, si no se cumple la expectativa, debe determinar si la modificación se ha compilado en el dtbo.img correspondiente y luego debe descompilar dtbo.img.

1. Herramienta de descompilación

El código de la herramienta de descompilación viene con él, y solo necesita inicializar las variables de entorno para usarlo. Las instrucciones de inicialización son las siguientes:

2. Descompilar dtb.img

dtc-I dtb -O dts dtb.img -o dtsi.txt

3.  Descompilar dtbo.img

mkdtimgdump dtbo.img -b dtbo
dtc -I dtb -O dts dtbo.00 -o dtsi.txt

Autor original: Kernel Craftsman
Fuente: Interpretación de Linux Device Tree Decoupling Architecture-V1.0

 

 

Supongo que te gusta

Origin blog.csdn.net/youzhangjing_/article/details/131791600
Recomendado
Clasificación