Conexión de la placa Spartan 3A Starter Kit a Linux

Llegó por fin la FPGA y lo primero ha sido intentar programarla desde Linux. Yo gasto Fedora 17 (voy una versión atrasado), con una versión de núclero 3.x. Con la placa viene la versión 13.4 de ISE (la herramienta de Xilinx). Durante la instalación aparece un error acerca del controlador del cable, un tal windrvr. Rebuscando entre los ficheros de C, parece ser que está pensado para la versión 2.6 del núcleo exclusivamente. Buscando por aquí y sobre todo por allá, acabo enterándome de lo que pasa:

Resulta que no hace falta el windrvr, con que esté libusb instalado basta. Pero, al conectar el cable Linux debe instalarle el firmware. Eso se hace con el demonio udev. El programa de instalación de ISE ya lo ha dejado todo casi hecho en el directorio /etc/udev/rules.d pero con una sintáxis incorrecta. Parece ser que a algún iluminado se le ocurrió que había que cambiar BUS por SUBSYSTEM, SYSFS por ATTR, y TEMPNODE a minúsculas: tempnode. A saber la de gente que estará mareada por culpa del tipo ese.

El fichero /etc/udev/rules.d/xusbdfwu.rules corregido para mi cable queda así:

ATTR{idVendor}=="03fd", ATTR{idProduct}=="0008", MODE="666"
SUBSYSTEM=="usb", ACTION=="add", ATTR{idVendor}=="03fd", ATTR{idProduct}=="000d",
RUN+="/sbin/fxload -v -t fx2 -I /usr/share/xusb_emb.hex -D $tempnode"

El fichero dice que cuando se conecte al USB el dispositivo 03FD:000D, se ejecute el comando fxload, que es el que carga el firmware. Con el nuevo firmware el dispositivo pasa a ser reconocido como 03FD:0008 y en ese caso se aplica la primera línea, que hace referencia a los permisos. Para que ISE pueda acceder al cable hay que darle permiso a todo el mundo. Eso se hace con la línea acabada en MODE=”666” del fichero. Aun así, si se está usando SELinux no funciona. Seguro que se puede añadir la excepción para SELinux lo acepte pero yo he preferido pasar SELinux al modo permisivo.

Tras hacer todas estas cosas, el cable funciona correctamente con ISE en Linux 3.x.

Anuncios

2 comentarios

  1. Nota para Ubuntu 14.04LTS:

    Hay que instalar fxload para que se cargue el firmware:
    sudo apt-get install fxload
    Hay que copiar el archivo xusb_emb.hex al sitio correspondiente
    sudo ln /opt/Xilinx/13.4/ISE_DS/common/bin/lin64/xusb_emb.hex /usr/share/xusb_emb.hex

  2. Nota para Ubuntu Mate 16.04 LTS:

    Usar el controlador usb-driver-HEAD-2d19c7c.tar.gz. Seguir las instrucciones del fichero README atentamente.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: