Мне нужно найти способ легко инициировать операции прямого доступа к памяти по моей команде, чтобы облегчить аппаратную отладку. Можно ли инициализировать DMA read
на существующем устройстве PCI (например, звуковой карте или сетевой карте) в моем Linux, записав непосредственно в его регистры? Или мне нужно написать собственный драйвер и вызвать его insmod
?
Как заставить устройство PCI инициировать операцию DMA?
Ответы (1)
Не существует стандартного способа запуска операции прямого доступа к памяти. Как правило, вам необходимо подготовить буфер DMA на хосте и настроить регистры DMA на вашем устройстве, загрузить адреса DMA, размеры и т. д.
Однако единого стандарта регистров DMA для устройств PCI не существует. Вам необходимо найти спецификацию вашего устройства PCI. В этой спецификации найдите главу DMA (это также называется «главным доступом» PCI, а не «целевым доступом»).
Там вы найдете: - Поддерживается ли разброс-сборка или непрерывный прямой доступ к памяти. - Как настроить регистры DMA, один из них обычно называется DMA CSR - "DMA command/status register". - Если устройство поддерживает сложную структуру DMA (один или несколько кольцевых буферов, цепочка дескрипторов DMA и т. д.)
Но хорошо то, что многие PCI-устройства поддерживают DMA 0-го размера. Который не выполняет никакого доступа к памяти, а просто вызывает прерывание «DMA Complete». Это может быть очень удобным местом для начала для вас.
rmmod
использовать исходный драйвер и insmod
свой?
- person qweruiop; 06.03.2014