LINUX.ORG.RU

Сообщения maniac85

 

Разработка PCI драйвера и функции, хелп!

Здравствуйте уважаемые форумчане.

У меня задача написать драйвер для PCI-E платы и измерить скорость передачи данных.

Если кто знает, подскажите пожалуйста, как правильно измерять скорость передачи данных из компьютера в память платы и наоборот? Каковы основные принципы, шаги решения этой проблемы?

Заранее спасибо.

>>>

maniac85
()

PCI-DMA срочно!

Пишу драйвер для передачи данных с памяти на плате через шину PCI express и запись в файл, Стандартное считывание было с медленной скоростью, поэтому решил делать через DMA-функции, Нашел в интернете следующий текст: ----------------------------- Dynamic DMA Mapping

Direct memory access in Linux for AMD64 technology requires the use of the dynamic DMA mapping API. This API provides a way to efficiently map 64-bit physical addresses to 32-bit Single Address Cycle PCI addresses, so that hardware that only supports 32-bit accesses can be used in 64-bit systems. A full description of the dynamic DMA mapping API is beyond the scope of this document. Device driver developers who need to use DMA should read DMA-mapping.txt in the /usr/src/linux/Documentation directory. ------------------------------ Нашел у себя эту документацию и прочитал. Там было написано что главным является добавление #include <linux/pci.h>

Код программы: ---------------------------- #include <linux/pci.h> #include <pci/pci.h> #include <stdio.h> #include <sys/mman.h> int main (int argc, char *argv[]) { struct pci_dev *dev; u64 device_mask; struct pci_dev *pdev; int pci_dma; int pci_consistent; pci_dma = pci_set_dma_mask(*pdev, device_mask); pci_consistent = pci_set_consistent_dma_mask(*pdev, device_mask);

return 0;

} ------------------------------ # gcc -o beta beta.c -lpci -lz beta.c:(.text+0xa4): undefined reference to `pci_set_dma_mask' beta.c:(.text+0xec): undefined reference to `pci_set_consistent_dma_mask' collect2: ld returned 1 exit status ------------------------------- Вот что выдал компилятор, Тоесть эти функции в pci.h не определены, Поискал на компьютере заголовочные файлы содержащие эти функции; >> Выяснилось что функции DMA описаны в следующих файлах: /usr/src/linux-source-2.6.22/include/linux/PCI.h /usr/src/linux-headers-2.6.22-14-generic/include/linux/PCI.h /usr/src/linux-headers-2.6.22-14/include/asm-generic/pci-dma-compat.h /usr/src/linux-headers-2.6.22-14/include/asm-generic/dma-mapping.h /usr/src/linux-source-2.6.22/include/asm-i386/dma-mapping.h /usr/src/linux-source-2.6.22/include/asm-i386/pci.h -------------------------------- Теперь суть проблемы: стандарно #include </usr/src/linux-source-2.6.22/include/asm-i386/dma-mapping.h> dma-mapping.h добавить нельзя, потамучто внутри него прописаны другие заголовки типа такого:

dma-mapping.h source: ................................. #include <asm/cache.h> #include <asm/io.h> #include <asm/scatterlist.h> #include <asm/bug.h> .................................

которые компилятор уже не найдет, а внутри этих прописаны следющие и так до бесконечности, ------------------------------------------------------------------------------- ------------------------------

Вопросы:

1) Есть ли какой-то способ добавить эти заголовки внутри кода программы или при компиляции? 2) Если нужно для этого написать специальный Makefile какой может быть простой пример для компиляции программы и автоматического добавления заголовочных файлов?

Старался изложить как можно подробнее суть проблемы, Жду ответов, заранее благодарен за помощь спецам!

>>>

maniac85
()

PCI express DMA

В слот PCI express вставлена карта, на ней имеется память ДДР. Нужно считать данные из памяти карты на компьютер (записать в файл или вывести на терминал). Покачто понял что нужно использовать DMA для б`ольшей скорости передачи данных. Подскажите пожалуйста опытные спецы, какими функциями можно реализовать эту задачу. У меня уже каша в голове нифига не работает. Или хотябы скиньте работающий пример чтобы можно было разобраться. Заранее спасибо!

>>>

maniac85
()

RSS подписка на новые темы