2015-11-19 7 views
5

Ich schreibe ein Kernel-Modul, das einige zusammenhängende Speicher zuordnen und die entsprechenden virtuellen und physikalischen Adressen zurückgeben wird.Wie bekomme ich Gerät von Cdev

Ich registriere das Modul als cdev, Speicherplatz mit dma_alloc_coherent() zuweisen und ich wollte es mit dma_common_mmap() mmap.

dma_common_mmap() erfordert einen Zeiger auf struct device: Wie kann ich es erhalten?

Antwort

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

Diese Funktion behandelt sowohl die Zuordnung als auch die Zuordnung des Puffers. Die ersten beiden Argumente sind die Gerätestruktur und die Größe des benötigten Puffers. Die Funktion gibt das Ergebnis der DMA-Zuordnung an zwei Stellen zurück. Der Rückgabewert der Funktion ist eine virtuelle Kerneladresse für den Puffer, die vom Treiber verwendet werden kann. Die zugehörige Busadresse wird unterdessen in dma_handle zurückgegeben.

+0

Haben Sie jemals geschafft, dma_alloc_coherent und mmap zu arbeiten. Ich kann das nicht tun. Ich musste meine eigenen Lese-/Schreibfunktionen schreiben. – user1876942

Verwandte Themen