Подтвердить что ты не робот

Самый простой способ использования DMA в Linux

Я EE и проект для uni. Я разрабатываю фильтрацию изображений и видео с помощью аппаратного обеспечения на FPGA (Xilinx ZYNQ). У этого устройства также есть двухъядерный процессор ARM A9, и, что еще важнее, Контроллер DMA ARM Primecell PL330

Я использую Yocto для создания базового linux environement, который я могу использовать на процессоре с веткой ядра ядра Xilinx.

Теперь, если я правильно понял, я не могу напрямую использовать API-интерфейс ядра DMA, но мне пришлось бы написать собственный драйвер ядра, и здесь проблема, так как у меня недостаточно знаний ядра для этого (и, в частности, для настройки сборки для настраиваемого модуля)...

есть ли какая-то библиотека/API/что-нибудь действительно, что может сделать передачу DMA из пользовательского пространства? (в частности, это было бы от памяти к периферийному устройству памяти (порт AXI4 между PS и PL на zynq)

UPDATE

После некоторых поздних ночных экспериментов я получил базовый модуль ядра hello world для правильной загрузки, поэтому, я думаю, я пойду правильно и напишу небольшую прошивку с драйверами устройства, которая берет кусок данных из пользовательского пространства (часть изображения в этом случае) и передать его в FPGA-часть, если IC-прогиб DMA api

Я расскажу о своих успехах или неудачах;)

4b9b3361

Ответ 1

Одним из возможных вариантов может быть использование интерфейса UIO (см. также статья в блоге)

В ссылке есть пример кода, но общая структура кода:

  • у вас есть небольшой модуль ядра, который обрабатывает инициализацию IO и предоставляет DMA. (См. документация)
  • ваша программа пользовательского пространства затем обрабатывает все IO, которые вам нужны, чтобы заставить его работать. (См. Также пример кода)

Поскольку вы не указали, что хотите, я не могу быть более конкретным. Но вам нужно понять, как инициализировать вашу память в ядре (см. Тег wiki для документов на LDD3 отлично).

Ответ 2

Конечно, для этой конкретной платформы есть драйвер dmaengine. Все, что вам нужно сделать, это создать небольшой модуль ядра, предоставляющий пользователю пространство доступа к API-интерфейсу dmaengine.

Пожалуйста, прочитайте: клиент dmaengine

Ответ 3

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

Итак, я начал работу над Connectal Framework для решения этой проблемы. Connectal предоставляет общий драйвер устройства для ПЛИС Zynq и для FPGA Xilinx или Altera, подключенных через PCI Express. Драйвер устройства позволяет программному обеспечению пользовательского режима отображать карту интерфейса управления оборудованием и обмениваться памятью (через DMA) с оборудованием. Он также предоставляет MMU для программируемой логики, так что приложения и программируемая логика могут использовать одни и те же линейные смещения в объекты общей памяти.

Connectal использует Bluespec Systems Verilog для своих аппаратных библиотек, что может затруднить использование фреймворка или драйверов устройств в вашем приложении, но оно доступно, и мы будем рады объяснить и документировать более подробно аппаратный интерфейс.

Консоль доступна в github:

Соответствующие драйверы находятся здесь:

Есть несколько альтернатив: