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
.dtscorrectif sur le fork Linuxregetinterruptfaire correspondre les numéros codés en dur dans la machine polyvalente QEMU (qui représente le SoC)compatiblecorrespond auplatform_driver.namedans 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
-dtbargument
- 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
dtcpour 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 !