Как получить устройство от cdev

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

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

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


person suppamax    schedule 19.11.2015    source источник


Ответы (2)


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

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

person lemme kick it    schedule 14.12.2015
comment
Вам когда-нибудь удавалось заставить работать dma_alloc_coherent и mmap. Я не могу это сделать. Мне пришлось написать свои собственные функции чтения/записи. - person user1876942; 08.06.2016

Взгляните на int cdev_device_add(struct cdev *cdev, struct device *dev)

Вы можете найти рабочий пример на linux-source/drivers/gpio/gpiolib.c

person Limag    schedule 08.05.2021