GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie programmiert man Linux .dts-Gerätebaumdateien?

Sehen Sie sich die dts des Boards an, das Ihrem Dev-Board am ähnlichsten ist. Verwenden Sie dies als Referenz und nehmen Sie Änderungen an den dts entsprechend den Unterschieden zwischen dem Referenzboard und Ihrem Entwicklungsboard vor.

Überprüfen Sie auch Folgendes:
- Gerätebaum-Dokumentationsprojekt bei eLinux (hat eine riesige Sammlung von Links, um mit dem Lesen zu beginnen).
- Artikelserie zu den Grundlagen des Gerätebaums.
- Exemplarische Vorgehensweise für die Migration zum Gerätebaum.


Minimum reg + interrupt Beispiel mit dem virtuellen QEMU-Gerät

Unser Beispiel fügt den folgenden Gerätebaumknoten zu versatilepb hinzu Gerätebaum, den QEMU aufgrund von -M versatilepb verwenden wird :

[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>;
};

Dann testen wir die folgenden DTS-Funktionen, indem wir ein Linux-Kernel-Modul verwenden, um mit dem Gerät zu interagieren:

  • registriert Adressen
  • IRQs
  • benutzerdefinierte Eigenschaften aus dem Treiber lesen

Dies sind die Hauptkomponenten des Beispiels:

  • Linux vielseitig .dts Patch auf Linux-Fork
    • reg und interrupt Übereinstimmungsnummern, die in der vielseitigen QEMU-Maschine (die das SoC darstellt) fest codiert sind
    • compatible entspricht dem platform_driver.name im Kernel-Modul und teilt dem Kernel mit, welches Modul dieses Gerät handhaben wird
    • Wir übergeben auch eine benutzerdefinierte Eigenschaft an den Treiber:lkmc-asdf = <0x12345678>; , die mit of_property_read_u32 gelesen wird
    • Der Gerätebaum wird mit dem -dtb an die Firmware von QEMU übergeben Argument
  • QEMU-Fork:
    • Gerät, das ein Register liest und Interrupts generiert
    • Gerät in -M versatilepb einsetzen
  • Kernel-Modul Schreibt bei Sonde in den Speicher, um Dinge zu testen, was auch einen IRQ generiert.

Gerätebäume haben viele weitere Funktionen, die wir nicht behandelt haben, aber dieses Beispiel sollte Ihnen den Einstieg erleichtern und es Ihnen ermöglichen, leicht mit neuen Funktionen herumzuspielen, die auftauchen.

Weitere Ressourcen:

  • unverzichtbares Elinux-Tutorial:http://elinux.org/Device_Tree_Usage
  • Spielen Sie mit dtc herum bei rein syntaktischen Fragen. Beispielsweise zeigt es, wie Knoten einfach nach Pfad zusammengeführt werden:https://unix.stackexchange.com/a/375923/32558
  • https://unix.stackexchange.com/questions/118683/what-is-a-device-tree-and-a-device-tree-blob

Nehmen wir ein Beispiel und ich werde jedes davon wie folgt erklären

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";
};

Erforderliche Eigenschaften:
- compatible :Sollte "fsl,-auart" sein. Zu den unterstützten SoCs gehören imx23 und imx28.
- reg :Adresse und Länge des Registersatzes für das Gerät
- interrupts :Sollte die auart-Interrupt-Nummern enthalten
- dmas:DMA-Spezifizierer, bestehend aus einem Phandle zum DMA-Controller-Knoten und einer AUART-DMA-Kanal-ID.
- DMA-Namen:"rx" für RX-Kanal, "tx" für TX-Kanal.

Hinweis:Jeder auart-Port sollte einen korrekt nummerierten Alias ​​im "aliases"-Knoten haben.
Für weitere fortgeschrittene Eigenschaften gehen Sie bitte zu diesem Link, es ist sehr nützlich
Erläuterung des Gerätebaums

Hoffe es hilft!


Linux
  1. So verschlüsseln Sie Dateien mit gocryptfs unter Linux

  2. So installieren Sie einen Gerätetreiber unter Linux

  3. So benennen Sie Dateien unter Linux um

  4. So komprimieren Sie mehrere Dateien unter Linux

  5. Wie mounte ich ein Gerät unter Linux?

So kürzen Sie (leere) Dateien in Linux

So zählen Sie Dateien im Verzeichnis in Linux

So defragst du dein Linux-System

So benennen Sie Dateien über die Befehlszeile in Linux um

So benennen Sie eine Datei (en) in Linux um

So komprimieren Sie eine Datei unter Linux