Как использовать DMA в Linux для связи со старой картой PCILinux

Anonymous
Как использовать DMA в Linux для связи со старой картой PCI

Сообщение Anonymous »

У меня есть очень старая карта PCI с DPRAM. Предполагается, что Linux отображает DPRAM таким образом, чтобы к нему можно было получить доступ через DMA. Я продолжаю находить статьи, которые помогут мне сделать еще один шаг вперед в этом процессе, но я не могу найти ничего, что давало бы комплексное решение для последних версий ядра.
На данный момент процесс примерно таков: :

[*]Найдите адрес устройства с помощью lspci (например, 04:0e.0)
[*]Запрос /proc/iomem, чтобы получить адрес памяти устройства из предыдущего шага.
[*]Используйте этот код, чтобы попытаться получить сопоставленное местоположение в памяти для DMA.

Код: Выделить всё

int file = open("/dev/mem", O_RDWR);
int addr_from_proc_iomem = 0xb1400000;
void* data = mmap(nullptr, data_size, PROT_READ | PROT_WRITE, MAP_SHARED, file, addr_from_proc_iomem );
Используя отдельное программное обеспечение, которое обращается к карте PCI через последовательный кабель, я вижу, что карта обновляет память, которая должна быть видна в отображенной области памяти, но когда я читаю сопоставленную память, я вижу только нули.
Знает ли кто-нибудь полный пример драйвера Linux, который делает то, что я пытаюсь сделать (чтение DPRAM через DMA в Linux)? Или у вас есть указатели на шаги, которые мне не хватает. Я использую Debian с ядром 6.1.

Подробнее здесь: https://stackoverflow.com/questions/790 ... d-pci-card

Вернуться в «Linux»