Mon ami et moi essayons d'écrire un pilote de périphérique pour un périphérique virtuel (lire : pas PCI ou USB) pour un cours de systèmes d'exploitation avancés. Nous utilisons Ubuntu 16.04. Notre tâche consiste à invoquer l'IOCTL dans notre pilote et à lui donner un tampon source rempli de valeurs RVB (un tableau d'entiers), un tampon de destination vide et une longueur. Nous devons invoquer le contrôleur DMA pour transférer le contenu du tampon source dans le tampon de destination, puis appliquer une transformation linéaire aux valeurs en place dans le tampon de destination.
Nous avons réussi à effectuer les transformations sans DMA et nous avons alloué avec succès un canal DMA à notre dispositif. Le problème que nous rencontrons est que nous n'arrivons pas à trouver une fonction partout qui décrit l'initiation d'un transfert en utilisant le DMA. Nous voulons qu'il lève une interruption à la fin du transfert (le pilote ne doit pas attendre la fin du transfert).
Pour être clair avec ce que nous demandons, nous aimerions simplement savoir où nous pouvons trouver les définitions des fonctions décrivant ce processus. Nous ne demandons pas de code ou une méthode exacte pour accomplir cette tâche ; nous aimerions simplement savoir quelles fonctions peuvent être utilisées et/ou dans quel fichier d'en-tête les trouver. Nous avons parcouru linux/dma-mapping.h apparemment ad nauseam. Nous avons aussi regardé LDD3 pendant un moment, mais il semble qu'il passe en revue le processus de configuration du DMA sans donner beaucoup d'informations sur les fonctions à utiliser pour commencer réellement le transfert DMA.