Je travaille avec le noyau 3.18 sur ARM. Je lis les données d'une caméra pour laquelle j'écris le pilote. -je utiliser ce qui suit pour mettre en place la mémoire:Où puis-je obtenir vm_area_struct pour remap_pfn_range?
cpu_handle = dma_alloc_coherent(NULL, dma_size, &dma_handle, GFP_KERNEL | GFP_DMA);
Cela fonctionne très bien. J'utilise le même module de noyau pour lire la mémoire après que la caméra a livré les données et que je puisse voir les images.
Maintenant je veux démarrer une application d'espace utilisateur pour lire les mêmes données. Je pense que le chemin à parcourir est remap_pfn_range
. Je continue de chercher des exemples, mais une chose qu'ils ne décrivent jamais est l'endroit où je trouve le vm_area_struct. Je suppose que cela doit venir de l'application de l'utilisateur non? Pour le premier argument, il est dit "user vma to map to". Alors, comment puis-je obtenir un pointeur sur cette structure?
Si votre pilote a alloué le tampon avec 'dma_alloc_coherent()', il devrait implémenter les requêtes 'mmap()' pour ce tampon via 'dma_mmap_coherent()', pas en appelant 'remap_pfn_range()' directement. – Notlikethat
Merci pour ce conseil. dma_mmap_coherent semble être la voie à suivre. – pgibbons