GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo programar archivos de árbol de dispositivos Linux .dts?

Eche un vistazo a los dts de la placa que más se parezcan a su placa de desarrollo. Úselo como referencia y realice cambios en el dts de acuerdo con las diferencias entre la placa de referencia y su placa de desarrollo.

También echa un vistazo a lo siguiente:
- Proyecto de documentación Device-tree en eLinux (tiene una gran colección de enlaces para empezar a leer).
- Serie de artículos sobre los conceptos básicos del árbol de dispositivos.
- Tutorial de migración al árbol de dispositivos.


Mínimo reg + interrupt ejemplo con dispositivo virtual QEMU

Nuestro ejemplo agregará el siguiente nodo del árbol de dispositivos al versatilepb árbol de dispositivos que utilizará QEMU debido a -M versatilepb :

[email protected] {
    compatible = "lkmc_platform_device";
    reg = <0x101e9000 0x1000>;
    interrupts = <18>;
    interrupt-controller;
    #interrupt-cells = <2>;
    clocks = <&pclk>;
    clock-names = "apb_pclk";
    lkmc-asdf = <0x12345678>;
};

Luego, mediante el uso de un módulo del kernel de Linux para interactuar con el dispositivo, probaremos las siguientes características de DTS:

  • registra direcciones
  • IRQ
  • leer propiedades personalizadas desde el controlador

Estos son los componentes principales del ejemplo:

  • Linux versátil .dts parche en la bifurcación de Linux
    • reg y interrupt números de coincidencia codificados en la máquina versátil QEMU (que representa el SoC)
    • compatible coincide con el platform_driver.name en el módulo del kernel e informa al kernel qué módulo manejará este dispositivo
    • también pasamos una propiedad personalizada al controlador:lkmc-asdf = <0x12345678>; , que se lee con of_property_read_u32
    • el árbol de dispositivos se pasa al firmware de QEMU con el -dtb argumento
  • Bifurcación QEMU:
    • dispositivo que lee un registro y genera interrupciones
    • insertar dispositivo en -M versatilepb
  • módulo kernel Escribe en la memoria en la sonda para probar cosas, lo que también genera una IRQ.

Los árboles de dispositivos tienen muchas más funciones que no hemos cubierto, pero este ejemplo debería ayudarlo a comenzar y permitirle jugar fácilmente con cualquier función nueva que surja.

Más recursos:

  • tutorial indispensable de elinux:http://elinux.org/Device_Tree_Usage
  • juega con dtc para cuestiones puramente sintácticas. Por ejemplo, muestra cómo los nodos simplemente se fusionan por ruta:https://unix.stackexchange.com/a/375923/32558
  • https://unix.stackexchange.com/questions/118683/what-is-a-device-tree-and-a-device-tree-blob

Tomemos un ejemplo y explicaré cada uno de ellos a continuación

auart0: [email protected] {
compatible = "fsl,imx28-auart", "fsl,imx23-auart";
reg = <0x8006a000 0x2000>;
interrupts = <112>;
dmas = <&dma_apbx 8>, <&dma_apbx 9>;
dma-names = "rx", "tx";
};

Propiedades requeridas:
- compatible:debe ser "fsl,-auart". Los SoC compatibles incluyen imx23 e imx28.
- reg :Dirección y longitud del registro establecido para el dispositivo
- interrupciones:debe contener los números de interrupción auart
- dmas:especificador de DMA, que consiste en un nodo controlador de phandle to DMA y un ID de canal AUART DMA.
- nombres dma:"rx" para el canal RX, "tx" para el canal TX.

Nota:Cada puerto auart debe tener un alias correctamente numerado en el nodo "aliases".
Para propiedades más avanzadas, por favor vaya a este enlace, es muy útil
Explicación del árbol de dispositivos

¡Espero que ayude!


Linux
  1. Cómo cifrar archivos con gocryptfs en Linux

  2. Cómo instalar un controlador de dispositivo en Linux

  3. Cómo cambiar el nombre de los archivos en Linux

  4. Cómo comprimir varios archivos en Linux

  5. Cómo crear archivos Proc de Linux en el programa C usando LKM

Cómo truncar archivos (vacíos) en Linux

Cómo contar archivos en el directorio en Linux

Cómo desfragmentar su sistema Linux

Cómo cambiar el nombre de los archivos usando la línea de comandos en Linux

Cómo cambiar el nombre de un archivo (s) en Linux

Cómo comprimir un archivo en Linux