Перейти к содержанию
    

PCIe под Linux

Имеется плата на Virtex-5 с прошивкой XAPP1052 - Bus Master. Плата опознается в системе, и дальше хотелось бы начать с ней работать - погонять данные, посмотреть скорость. ОС Ubuntu 12.04 x64 (есть также Windows 7, но конечной целью все же стоит работа с PCIe под линуксом).

С xapp1052 идут примеры драйвера и тестовой проги, однако пока при попытке запуска скрипта по инструкции выдает ошибки:

 

root@user-PH67A-D3-B3:~/xbmd# ./run_bmd.csh 
gtk-builder-convert xbmd_app.glade xbmd_app.xml
WARNING: duplicate id "menuitem"
WARNING: duplicate id "new_menu_item"
Wrote xbmd_app.xml
make -C /lib/modules/3.2.0-23-generic/build M=/root/xbmd  modules
make[1]: Entering directory `/usr/src/linux-headers-3.2.0-23-generic'
  CC [M]  /root/xbmd/xbmd.o
/root/xbmd/xbmd.c: In function ‘XPCIe_Write’:
/root/xbmd/xbmd.c:208:3: warning: format ‘%d’ expects argument of type ‘int’, but argument 3 has type ‘size_t’ [-Wformat]
/root/xbmd/xbmd.c:210:3: warning: format ‘%d’ expects argument of type ‘int’, but argument 3 has type ‘size_t’ [-Wformat]
/root/xbmd/xbmd.c: In function ‘XPCIe_Read’:
/root/xbmd/xbmd.c:237:3: warning: format ‘%d’ expects argument of type ‘int’, but argument 3 has type ‘size_t’ [-Wformat]
/root/xbmd/xbmd.c: At top level:
/root/xbmd/xbmd.c:430:5: error: unknown field ‘ioctl’ specified in initializer
/root/xbmd/xbmd.c:430:5: warning: initialization from incompatible pointer type [enabled by default]
/root/xbmd/xbmd.c:430:5: warning: (near initialization for ‘XPCIe_Intf.aio_read’) [enabled by default]
/root/xbmd/xbmd.c: In function ‘XPCIe_init’:
/root/xbmd/xbmd.c:441:3: error: implicit declaration of function ‘pci_find_device’ [-Werror=implicit-function-declaration]
/root/xbmd/xbmd.c:441:8: warning: assignment makes pointer from integer without a cast [enabled by default]
/root/xbmd/xbmd.c:479:64: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
/root/xbmd/xbmd.c:507:3: warning: passing argument 2 of ‘request_irq’ from incompatible pointer type [enabled by default]
include/linux/interrupt.h:134:1: note: expected ‘irq_handler_t’ but argument is of type ‘void (*)(int,  void *, struct pt_regs *)’
/root/xbmd/xbmd.c:531:70: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
/root/xbmd/xbmd.c:540:71: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
/root/xbmd/xbmd.c: In function ‘XPCIe_ReadMem’:
/root/xbmd/xbmd.c:715:24: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
/root/xbmd/xbmd.c:729:7: warning: return makes pointer from integer without a cast [enabled by default]
/root/xbmd/xbmd.c: In function ‘XPCIe_WriteMem’:
/root/xbmd/xbmd.c:769:23: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
cc1: some warnings being treated as errors
make[2]: *** [/root/xbmd/xbmd.o] Error 1
make[1]: *** [_module_/root/xbmd] Error 2
make[1]: Leaving directory `/usr/src/linux-headers-3.2.0-23-generic'
make: *** [all] Error 2
crw-r--r-- 1 root root 241, 1 Dec 22 12:27 /dev/xbmd
+ /sbin/insmod xbmd.ko
insmod: can't read 'xbmd.ko': No such file or directory

 

были ли у кого-нибудь успешные попытки запуска программ из данного аппноута? Есть ли какие-нибудь еще варианты примеров, с которых можно было бы начать изучение PC-части интерфейса по линуксом? Или проще самому почитать и пробовать писать с нуля свои драйвер и прогу?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Касательно "какие-нибудь еще варианты примеров":

Мы тут давеча делали PCI Express controller for Xilinx HARD core for Virtex5, Virtex6, Spartan6 - PCIe_DS_DMA

кроме HDL там так же есть дрова и пример проги в репозитарии.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Kuzmi4, благодарю, буду смотреть, как с регистрацией разберусь.

Если кто еще столкнется с проблемой запуска дефолтного драйвера от xapp1052, решение нашлось на форуме xilinx (для Linux):

в файле xbmd.c заменить 3 строчки:

 

ioctl:      XPCIe_Ioctl
...
int XPCIe_Ioctl(struct inode *inode,
                struct file *filp,
                unsigned int cmd,
                unsigned long arg)
...
gDev = pci_find_device (PCI_VENDOR_ID_XILINX, PCI_DEVICE_ID_XILINX_PCIE, gDev);

на

unlocked_ioctl:      XPCIe_Ioctl
...
int XPCIe_Ioctl(struct file *filp,
                unsigned int cmd,
                unsigned long arg)
...
gDev = pci_get_device (PCI_VENDOR_ID_XILINX, PCI_DEVICE_ID_XILINX_PCIE, gDev);

 

под win7 получилось перекомпилить драйвер в WDK и исправить соответствубщий .inf файл под 64 бита, но после установки драйвера при запуске тестовой проги вылетает BSOD. Об этом опять же на форуме xilinx говорилось, решения вроде как найти не удалось

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...