2015-11-19 24 views
5

Sto scrivendo un modulo del kernel che assegnerà una memoria coerente e restituirà gli indirizzi virtuali e fisici corrispondenti.Come ottenere il dispositivo da cdev

Sto registrando il modulo come cdev, allocando lo spazio con dma_alloc_coherent() e volevo farlo in mmap utilizzando dma_common_mmap().

dma_common_mmap() richiede un puntatore a struct device: come posso ottenerlo?

risposta

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

Questa funzione gestisce sia l'assegnazione che la mappatura del buffer. I primi due argomenti sono la struttura del dispositivo e la dimensione del buffer necessario. La funzione restituisce il risultato della mappatura DMA in due punti. Il valore restituito dalla funzione è un indirizzo virtuale del kernel per il buffer, che può essere utilizzato dal driver. L'indirizzo bus associato, nel frattempo, viene restituito in dma_handle.

+0

Sei mai riuscito a far funzionare dma_alloc_coherent e mmap. Non posso farlo. Ho dovuto scrivere le mie funzioni di lettura/scrittura. – user1876942