web-dev-qa-db-fra.com

Comment programmer les fichiers d'arborescence de périphériques Linux .dts?

Je vais lancer un Linux sur ma carte de développement, et j'ai besoin d'un fichier dts (fichier d'arborescence de périphériques) pour décrire l'ensemble du matériel. Mais je ne connais que très peu la syntaxe de ce fichier qui ne suffit pas pour faire fonctionner Linux correctement sur la carte.

Ce que je sais maintenant, c'est seulement comment décrire le numéro d'interruption d'une unité, la fréquence, l'adresse, l'unité parentale et son type de pilote compatible (comme décrit ci-dessous):

ps7_scuwdt_0: ps7-scuwdt@f8f00620 {
                        compatible = "xlnx,ps7-scuwdt-1.00.a";
                        device_type = "watchdog";
                        interrupt-parent = <&ps7_scugic_0>;
                        interrupts = < 1 14 769 >;
                        reg = < 0xf8f00620 0xe0 >;
                } ;

Une autre utilisation ou grammaire avancée ne m'est pas familière.

17
Ezio

Jetez un œil aux dts de la planche qui ressemble le plus à votre dev-board. Utilisez-le comme référence et modifiez les dts en fonction des différences entre le tableau de référence et votre tableau de développement.

Vérifiez également les éléments suivants:
- Projet de documentation de l'arborescence des périphériques sur eLinux (possède une vaste collection de liens pour commencer la lecture).
- Série d'articles sur les bases de l'arborescence des appareils.
- Procédure pas à pas de migration vers l'arborescence des périphériques.

19
TheCodeArtist

Minimal reg + interrupt exemple avec périphérique virtuel QEMU

Notre exemple ajoutera le nœud d'arborescence de périphériques suivant à l'arborescence de périphériques versatilepb que QEMU utilisera en raison de -M versatilepb:

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

Ensuite, en utilisant un module de noyau Linux pour interagir avec l'appareil, nous testerons les fonctionnalités DTS:

  • enregistre les adresses
  • IRQ
  • lire les propriétés personnalisées du pilote

Ce sont les principaux composants de l'exemple:

  • Linux polyvalent .dts patch sur Linux fork
    • reg et interrupt correspondent à des numéros codés en dur dans la machine polyvalente QEMU (qui représente le SoC)
    • compatible correspond à platform_driver.name dans le module du noyau, et informe le noyau du module qui gérera ce périphérique
    • nous transmettons également une propriété personnalisée au pilote: lkmc-asdf = <0x12345678>;, qui se lit avec of_property_read_u32
    • l'arborescence des périphériques est transmise au firmware de QEMU avec le -dtb argument
  • Fourche QEMU:
  • module du noya Écrit en mémoire sur la sonde pour tester les choses, ce qui génère également une IRQ.

Les arborescences de périphériques ont beaucoup plus de fonctionnalités que nous n'avons pas couvertes, mais cet exemple devrait vous aider à démarrer et vous permettre facilement de jouer avec les nouvelles fonctionnalités qui arrivent.

Autres ressources:

Prenons un exemple et je vais expliquer chacun d'eux comme ci-dessous

auart0: serial@8006a000 {
compatible = "fsl,imx28-auart", "fsl,imx23-auart";
reg = <0x8006a000 0x2000>;
interrupts = <112>;
dmas = <&dma_apbx 8>, <&dma_apbx 9>;
dma-names = "rx", "tx";
};

Propriétés requises:
- compatible: Devrait être "fsl, -auart". Les SoC pris en charge incluent imx23 et imx28.
- reg: adresse et longueur du registre défini pour le périphérique
- interruptions: doit contenir les numéros d'interruption auart
- dmas: DMA spécificateur, composé d'un phandle vers DMA nœud de contrôleur et AUART DMA canal ID.
- noms-dma: "rx" pour le canal RX, "tx" pour le canal TX.

Remarque: Chaque port auart doit avoir un alias correctement numéroté dans le nœud "alias".
Pour plus de propriétés avancées, veuillez consulter ce lien, il est très utile
Explication de l'arborescence des périphériques

J'espère que ça aide!

3
PAL

Complémentaire aux autres réponses:

Gardez à l'esprit qu'il y a aussi une section pour les devicetrees dans la source officielle du noyau sous root/Documentation/devicetree ( https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/devicetree?h=v5.2-rc5 ) .

0
h0ch5tr4355