Jetez un œil au dts de la carte qui ressemble le plus à votre carte de développement. Utilisez-le comme référence et apportez des modifications au dts en fonction des différences entre la carte de référence et votre carte de développement.
Consultez également les éléments suivants :
- Projet de documentation Device-tree sur eLinux (possède une vaste collection de liens pour commencer à lire).
- Série d'articles sur les bases de l'arborescence des appareils.
- Procédure pas à pas pour migrer vers l'arborescence des appareils.
Minimale reg
+ interrupt
exemple avec un périphérique virtuel QEMU
Notre exemple ajoutera le nœud d'arborescence de périphériques suivant au versatilepb
arborescence de périphériques que QEMU utilisera en raison de -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>;
};
Ensuite, en utilisant un module du noyau Linux pour interagir avec l'appareil, nous testerons les fonctionnalités DTS suivantes :
- enregistre les adresses
- IRQ
- lire les propriétés personnalisées du pilote
Voici les principaux composants de l'exemple :
- Linux polyvalent
.dts
correctif sur le fork Linuxreg
etinterrupt
faire correspondre les numéros codés en dur dans la machine polyvalente QEMU (qui représente le SoC)compatible
correspond auplatform_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 est lu avecof_property_read_u32
- l'arborescence des périphériques est transmise au micrologiciel de QEMU avec le
-dtb
argument
- Fourchette QEMU :
- dispositif qui lit un registre et génère des interruptions
- insérer l'appareil dans
-M versatilepb
- module du noyau Écrit en mémoire sur la sonde pour tester les éléments, ce qui génère également une IRQ.
Les arborescences d'appareils ont de nombreuses autres fonctionnalités que nous n'avons pas couvertes, mais cet exemple devrait vous aider à démarrer et vous permettre de jouer facilement avec toutes les nouvelles fonctionnalités qui apparaissent.
Autres ressources :
- tutoriel elinux indispensable :http://elinux.org/Device_Tree_Usage
- jouer avec
dtc
pour des questions purement syntaxiques. Par exemple, il montre comment les nœuds sont simplement fusionnés par chemin :https://unix.stackexchange.com/a/375923/32558 - https://unix.stackexchange.com/questions/118683/what-is-a-device-tree-and-a-device-tree-blob
Prenons un exemple et je vais vous expliquer chacun d'eux comme ci-dessous
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";
};
Propriétés requises :
- compatible :Doit être "fsl,-auart". Les SoC pris en charge incluent imx23 et imx28.
- reg :Adresse et longueur du registre défini pour l'appareil
- interruptions :doit contenir les numéros d'interruption auart
- dmas :spécificateur DMA, composé d'un nœud de contrôleur DMA et d'un ID de canal AUART DMA.
- 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 "aliases".
Pour plus de propriétés à l'avance, veuillez vous rendre sur ce lien, il est très utile
Explication de l'arborescence des appareils
J'espère que cela vous aidera !