2015-11-19 6 views
5

Я пишу модуль ядра, который будет выделять некоторую связную память и возвращать соответствующие виртуальные и физические адреса.Как получить устройство из cdev

Я регистрирую модуль как cdev, выделяя пространство dma_alloc_coherent(), и я хотел его использовать, используя dma_common_mmap().

dma_common_mmap() требуется указатель на struct device: как я могу его получить?

ответ

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

Эта функция обрабатывает как распределение, так и отображение буфера. Первые два аргумента - структура устройства и размер необходимого буфера. Функция возвращает результат сопоставления DMA в двух местах. Возвращаемое значение функции - это виртуальный адрес ядра для буфера, который может использоваться драйвером. Соответствующий адрес шины, между тем, возвращается в dma_handle.

+0

Удалось ли вам заставить dma_alloc_coherent и mmap работать. Я не могу этого сделать. Я должен был написать свои собственные функции чтения/записи. – user1876942