2015-11-19 2 views
5

J'écris un module noyau qui va allouer de la mémoire cohérente et retourner les adresses virtuelles et physiques correspondantes.Comment obtenir un périphérique à partir de cdev

Je suis en train d'enregistrer le module en tant que cdev, en allouant de l'espace avec dma_alloc_coherent() et je voulais le mmap en utilisant dma_common_mmap().

dma_common_mmap() nécessite un pointeur vers struct device: comment l'obtenir?

Répondre

0
void *dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle, int flag); 

Cette fonction gère à la fois l'allocation et le mappage du tampon. Les deux premiers arguments sont la structure du périphérique et la taille du tampon nécessaire. La fonction renvoie le résultat du mappage DMA à deux endroits. La valeur de retour de la fonction est une adresse virtuelle du noyau pour le tampon, qui peut être utilisée par le pilote. L'adresse de bus associée, quant à elle, est renvoyée dans dma_handle.

+0

Avez-vous déjà réussi à faire fonctionner dma_alloc_coherent et mmap? Je ne peux pas faire ça. Je devais écrire mes propres fonctions de lecture/écriture. – user1876942