Как заставить устройство PCI инициировать операцию DMA?

Мне нужно найти способ легко инициировать операции прямого доступа к памяти по моей команде, чтобы облегчить аппаратную отладку. Можно ли инициализировать DMA read на существующем устройстве PCI (например, звуковой карте или сетевой карте) в моем Linux, записав непосредственно в его регистры? Или мне нужно написать собственный драйвер и вызвать его insmod?


person qweruiop    schedule 05.03.2014    source источник


Ответы (1)


Не существует стандартного способа запуска операции прямого доступа к памяти. Как правило, вам необходимо подготовить буфер DMA на хосте и настроить регистры DMA на вашем устройстве, загрузить адреса DMA, размеры и т. д.

Однако единого стандарта регистров DMA для устройств PCI не существует. Вам необходимо найти спецификацию вашего устройства PCI. В этой спецификации найдите главу DMA (это также называется «главным доступом» PCI, а не «целевым доступом»).

Там вы найдете: - Поддерживается ли разброс-сборка или непрерывный прямой доступ к памяти. - Как настроить регистры DMA, один из них обычно называется DMA CSR - "DMA command/status register". - Если устройство поддерживает сложную структуру DMA (один или несколько кольцевых буферов, цепочка дескрипторов DMA и т. д.)

Но хорошо то, что многие PCI-устройства поддерживают DMA 0-го размера. Который не выполняет никакого доступа к памяти, а просто вызывает прерывание «DMA Complete». Это может быть очень удобным местом для начала для вас.

person Alexey Polonsky    schedule 05.03.2014
comment
Да, кажется, нет другого выхода, кроме как написать для этого PCI-драйвер. Но проблема в том, что у меня на самом деле нет дополнительного устройства PCI. Я не знаю, можно ли использовать любую существующую карту PCI? Могу ли я просто rmmod использовать исходный драйвер и insmod свой? - person qweruiop; 06.03.2014
comment
вы можете rmmod другой модуль, если это загружаемый модуль, т.е. не скомпилированный как часть ядра, а как автономный загружаемый модуль. Если вы видите модуль в «lsmod», вы можете его выгрузить. - person Alexey Polonsky; 06.03.2014