Mmap DMA когерентная память в пространстве пользователя - PullRequest
0 голосов
/ 05 ноября 2018

Я пытаюсь отобразить согласованную память DMA, которую я выделил в драйвере ядра, в пространство пользователя. Там я использую mmap(), а в драйвере ядра я использую dma_alloc_coherent(), а затем remap_pfn_range() для переназначения страниц.

Цель отображения памяти DMA в пространство пользователя - минимизировать доступ ioctl к ядру. Хост должен выполнить довольно большое количество последовательных обращений к памяти DMA, и я хочу получить к нему доступ непосредственно в пространстве пользователя, а не тратить время, используя бесчисленные операции ioctl().

mmap() возвращает EPERM (1) - Операция не разрешена .

Я нашел это сообщение: mmap: Операция не разрешена

Ответ:

Звучит так, как будто ядро ​​скомпилировано с CONFIG_STRICT_DEVMEM включен. Это функция безопасности для предотвращения доступа пользователя к (возможно, чувствительная) физическая память выше 1 МБ (IIRC). Вы, возможно возможность отключить это с помощью sysctl dev.mem.restricted.

Это единственная полезная информация, которую я нашел. Тем не менее, я вижу 2 вопроса:

1) Я выделил для тестирования только 4k. Согласно приведенному выше утверждению, только физическая память> 1 МБ должна быть проблемой. Я все еще не могу mmap (во всяком случае, для окончательного драйвера мне потребуется гораздо больше памяти dma, но перекомпиляция ядра не может быть решением моей проблемы), что приводит меня к 2)

2) Кроме того, перекомпиляция ядра не возможна, поскольку драйвер должен работать без специальной настройки ядра.

Есть идеи по этому поводу? Я ценю помощь.

Я использую Ubuntu 16.04.1 , ядро: 4.10.0-40-generic

РЕДАКТИРОВАТЬ: РЕШЕНО

Я сделал ошибку копирования-вставки, в результате чего ret = -1. Таким образом, функция .mmap в драйвере ядра, которая вызывает remap_pfn_range, возвращает -1 вместо 0. Это привело к сбою mmap () в пользовательском пространстве

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...