Linux PCIe DMA драйвер - PullRequest
       71

Linux PCIe DMA драйвер

0 голосов
/ 09 июля 2019

В настоящее время я пишу драйвер для устройства PCIe, который должен отправлять данные в систему Linux с использованием DMA. Насколько я понимаю, моему устройству PCIe требуется контроллер DMA (мастер DMA) и моя система Linux (подчиненный DMA). В настоящее время устройство PCIe не имеет контроллера DMA и не должно иметь его. Это смущает меня.

A. Возможно ли следующее?

  1. Устройство PCIe отправляет прерывание
  2. Ожидание прерывания в драйвере Linux
  3. Начать передачу DMA из регистров PCIe с отображенной памятью в систему DMA Linux.
  4. Чтение данных из памяти в пользовательском пространстве

У меня все для этого настроено, единственное, что мне не хватает, это как перенести данные из регистров PCIe в память.

B. В какой системный вызов (или серию) мне нужно позвонить для передачи DMA?

C. Возможно, мне нужно настроить DMA в системе Linux, но то, что я нахожу, указывает на код, который предполагает наличие подчиненного устройства, например, struct dma_slave_config.

Вариант использования: сбор данных с устройства PCIe и предоставление их в память пользователям.

Любая помощь очень ценится. Заранее спасибо!

1 Ответ

2 голосов
/ 17 июля 2019

DMA, по определению, полностью не зависит от процессора и любого программного обеспечения (то есть ядра ОС), работающего на нем. DMA - это способ для устройств выполнять чтение и запись в память хоста без участия центрального процессора хоста.

Обычно DMA работает примерно так: программное обеспечение выделяет доступную область DMA в памяти и разделяет физический адрес с устройством, скажем, выполняя запись в память в адресном пространстве, связанном с одним из BAR устройства. Затем устройство выполнит чтение или запись DMA для этого блока памяти. По завершении этой операции устройство выдаст прерывание для драйвера устройства, чтобы оно могло обработать данные и / или освободить память.

Если ваше устройство не имеет возможности выдавать DMA для чтения или записи в память хоста, вам придется взаимодействовать с ним только с использованием процессора. Дискретные контроллеры DMA давно не существовали.

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