Install xilinx platform usb in Ubuntu 16.04 x64

17,918

Solution 1

I solved this problem by this enviroment setting.

#Xilinx ISE path *****************
LM32_TOOLS=/opt/gcc-lm32/bin
XILINX=/opt/Xilinx/14.7/ISE_DS
export XILINX
HOST_PLATFORM=lin64
export HOST_PLATFORM
XILINX_BIN=${XILINX}/ISE/bin/${HOST_PLATFORM}
export XILINX_BIN
PATH=${PATH}:${XILINX_BIN}:${LM32_TOOLS}
XILINX_EDK=${XILINX}/ISE/EDK/bin/lin64
export XILINX_EDK
XILINX_CSE_TCL=${XILINX}/ISE/cse/tcl
#XILINX_CSE_TCL=/usr/lib/tclx8.4/
export XILINX_CSE_TCL
XIL_IMPACT_USE_LIBUSB=1
export XIL_IMPACT_USE_LIBUSB
XIL_IMPACT_USE_WINDRIVER=1
export XIL_IMPACT_USE_WINDRIVER
#export XILINX_USB_DEV= "001:005"
#export LD_PRELOAD="/usr/share/libusb.so"
#export LD_PRELOAD="/opt/Xilinx/usb-driver/libusb-driver.so";
export XKEYSYMDB=/usr/share/X11/XKeysymDB
export DISPLAY=:0
echo "XILINX ISE enviroment seted"
echo ""

PATH=$PATH:/opt/Xilinx/14.7/ISE_DS/ISE/bin/lin64/:/opt/Xilinx/14.7/ISE_DS/EDK/bin/lin64/

the gole is here:

XIL_IMPACT_USE_LIBUSB=1
export XIL_IMPACT_USE_LIBUSB

also you should install your dongle driver before.

Solution 2

The above answers did not work for me, the following was the simplest and is based on what the guys at arch linux did (https://wiki.archlinux.org/index.php/Xilinx_ISE_WebPACK#Xilinx_Platform_Cable_USB-JTAG_Drivers)

$ cd /opt/Xilinx/
$ sudo git clone git://git.zerfleddert.de/usb-driver
$ cd usb-driver/
$ apt install fxload libusb-dev
$ sudo make
$ ./setup_pcusb /opt/Xilinx/14.7/ISE_DS/ISE
$ sudo udevadm control --reload-rules

Unplug and replug - and you should see a red light.

You may need to set the following env variable after sourcing a settings file.

$ export LD_PRELOAD=/opt/Xilinx/usb-driver/libusb-driver.so
$ impact

Solution 3

Immediate build fix (not a solution)

For your specific build problem the installer is trying to build a driver. In order to do so, it needs the kernel source for your currently running kernel to build against. The command to get it is:

sudo apt-get install linux-source

This will solve the immediate build problem, but the WinDriver still won't build properly. According to the release documentation, the ISE 14.7 version is declared compatible only with RHEL Workstation 5 & 6 (32 & 64-bit) and SUSE Enterprise 11 (32 and 64-bit) among all Linux distros. Age-wise that's around the level of Ubuntu 9.04. The kernel has changed very significantly since then, going from kernel version 2.6.32 in RHEL 6.9 to kernel version 4.4.0 in Ubuntu 16.04.1. The WinDriver hasn't been maintained by Xilinx, so it won't build/work with the newer kernel version.

Potential Workaround

The only semi-workaround I've been able to find in trying to solve this same problem is if you are using a DLC9 or earlier JTAG device. In that case you can find instructions for building and using a user-space driver in place of the WinDriver with the instructions found here under the "Using Xilinx USB JTAG Programmers under Linux (Installing Cable Drivers)" heading. Make sure to read the README from the git project it points you to because if your JTAG device isn't one of those supported, or you missing some of the instructions (like setting LD_PRELOAD), the driver built from the git project won't work for your JTAG device.


A condensed version of the linked instructions with some of the buried information explicitly specified:
Create the driver

sudo apt-get install gitk git-gui libusb-dev build-essential libc6-dev-i386 fxload libusb-dev
cd /opt/Xilinx     #or some directory to build the driver in
sudo git clone git://git.zerfleddert.de/usb-driver
cd usb-driver
sudo make
sudo cp -a /opt/Xilinx/14.7/ISE_DS/ISE/bin/lin64/xusb*.hex /usr/share/
sed -e 's/[$]TEMPNODE/%N/' -e 's/SYSFS/ATTRS/g' -e 's/BUS="usb",/SUBSYSTEM="usb", ENV{DEVTYPE}=="usb_device",/' -e 's/MODE=/MODE:=/' /opt/Xilinx/14.7/ISE_DS/ISE/bin/lin64/xusbdfwu.rules >xusbdfwu-new.rules
sudo cp xusbdfwu-new.rules /etc/udev/rules.d/
sudo udevadm control --reload

Detach and re-attach the JTAG device.
Run the tools (necessary on every run)

source /opt/Xilinx/14.7/ISE_DS/settings64.sh
export PATH=/opt/Xilinx/14.7/ISE_DS/ISE/bin/lin64:$PATH
export LD_PRELOAD=/opt/Xilinx/usb-driver/libusb-driver.so
impact

EDIT:

Working Solution

The only known working solution I've found is to also install a newer version of the Xilinx LabTools and manually install the cable drivers from that. Depending on the device you're going to be working with, you need to pick a version of the LabTools that is at least 2014.4, but not so new that it no longer supports your chip type (which I assume is why you're using 14.7). You'll still need the kernel source as well, like my original solution pointed out. After installing LabTools (without trying to install drivers), run the following:

cd /opt/Xilinx/SDK/2014.4/data/xicom/cable_drivers/lin64/install_script/install_drivers
sudo ./install_drivers
sudo ./setup_pcusb
sudo su -
cd /etc/udev/rules.d
sed -i -e 's/MODE=/MODE:=/g' 52-xilinx*.rules
exit
sudo udevadm control --reload

Disconnect and reconnect your JTAG device, and run impact with the following command in a throw-away terminal from a directory where you want the project dropped:

source /opt/Xilinx/14.7/ISE_DS/settings64.sh
source /opt/Xilinx/SDK/2014.4/settings64.sh
impact

The impact tool isn't provided by 2014.4, so it will end up executing the 14.7 version, but all libraries provided by the 2014.4 version will be used instead if they exist.

Share:
17,918

Related videos on Youtube

Mohammad Farahani
Author by

Mohammad Farahani

Updated on September 18, 2022

Comments

  • Mohammad Farahani
    Mohammad Farahani over 1 year

    I install ise14.7 correctly and then try flow this guide for installing Platform cable. all step was correct. my ls usb command output is like this

    $ lsusb
    Bus 002 Device 022: ID 03fd:0008 Xilinx, Inc. Platform Cable USB II
    Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
    Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
    Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    

    You can see my OS knows a xilinx usb device is attached and usbdev works correctly. but my cable doesn't work. Then I see output in impact that says :

    Active mode is BS
    Project: '/home/faryad_mfa/Desktop/Projects/GE_TS_XILINX/GE_TS_XILINX.ipf' loaded.
    GUI --- Auto connect to cable...
    INFO:iMPACT - Digilent Plugin: Plugin Version: 2.4.4
    INFO:iMPACT - Digilent Plugin: no JTAG device was found.
    AutoDetecting cable. Please wait.
    *** WARNING ***: When port is set to auto detect mode, cable speed is set to default 6 MHz regardless of explicit arguments supplied for setting the baud rates
    PROGRESS_START - Starting Operation.
    If you are using the Platform Cable USB, please refer to the USB Cable Installation Guide (UG344) to install the libusb package.
    Connecting to cable (Usb Port - USB21).
    Checking cable driver.
     Linux release = 4.4.0-42-generic.
    WARNING:iMPACT -  Module windrvr6 is not loaded. Please reinstall the cable drivers. See Answer Record 22648.
    Cable connection failed.
    Connecting to cable (Parallel Port - parport0).
     Linux release = 4.4.0-42-generic.
    ...
    

    after that I try to install driver using xilinx help document at this link.

    I type this command in terminal

    sudo ./install_drivers
    

    and get some error:

    --Driver versions in this package: windrvr=900, xpc4drvr=1041
    --Script name = ./install_drivers
    --HostName = mehrkavir-Lab2
    --Current working dir = /opt/Xilinx/install_drivers
    --Script location = /opt/Xilinx/install_drivers
    --Kernel version = 4.4.0-42-generic.
    --Arch = x86_64.
    --Installer version = 1053
    --Unsetting ARCH environment variable.
    --User has root permission.
    --File /lib/modules/misc/install_windrvr6 does not exist.
    --Installing USB drivers------------------------------------------
    --File /etc/hotplug/usb/xusbdfwu.fw/xusbdfwu.hex exists.
    ./setup_pcusb: 94: ./setup_pcusb: Bad substitution
    --File /sbin/fxload exists.
    --Installing windrvr6---------------------------------------------
    --Checking version.
    --File /lib/modules/4.4.0-42-generic/kernel/drivers/misc/windrvr6.ko does not exist.
    --File LINUX.4.4.0-42-generic.x86_64/windrvr6.ko does not exist.
    --Setting source version to 900.
    --File LINUX.4.4.0-42-generic.x86_64/windrvr6.ko is newer than the destination file.
    checking for cpu architecture... x86_64
    checking for WinDriver root directory... /opt/Xilinx/install_drivers/linux_drivers/windriver64
    checking for linux kernel source... found at /lib/modules/4.4.0-42-generic/build
    checking for lib directory... ln -sf $(ROOT_DIR)/lib/$(SHARED_OBJECT)_32.so /usr/lib/$(SHARED_OBJECT).so; ln -sf $(ROOT_DIR)/lib/$(SHARED_OBJECT).so /usr/lib64/$(SHARED_OBJECT).so
    checking which directories to include... -I/lib/modules/4.4.0-42-generic/build/include
    checking linux kernel version... hello.c:1:30: fatal error: linux/utsrelease.h: No such file or directory
    compilation terminated.
    not found
    configure: error: can't find kernel version
    make: *** No rule to make target 'clean'.  Stop.
    make: *** No targets specified and no makefile found.  Stop.
    make: *** No rule to make target 'install'.  Stop.
    --make windrvr install rc= 2
    --install_windrvr6 rc = 2
    --Module windrvr6 is not running.
    --Module xpc4drvr is not running.
    --Note: By default, the file permission of /dev/windrvr6 is enabled for the root user only
      and must be changed to allow access to other users.
    
    --Return code = 2
    

    I feel there's a problem with my kernel version based on this line

    checking which directories to include... -I/lib/modules/4.4.0-42-generic/build/include
    checking linux kernel version... hello.c:1:30: fatal error: linux/utsrelease.h: No such file or directory
    
    1. What I should do to install driver correctly?

    2. Are there any alternative ways to install this driver?

    • mtalexan
      mtalexan almost 7 years
      This is an ongoing problem. According to Xilinx, the only supported Linux versions for 14.7 were a single older RedHat, CentOS, and SUSE version. The equivalent age for Ubuntu is around 9.04. The WinDriver is trying to build against kernel source, which you also seem to be missing and would need to be selected with apt-get linux-source. As Mohammad pointed out, the WinDriver hasn't been updated to work with modern kernels though.
    • mtalexan
      mtalexan over 4 years
      It turns out there's a bug in the windrvr/configure.usb and windrvr/configure.wd that doesn't properly support the kernel headers directory being the only directory. They unnecessarily force all kernel source to be present. If you fix the check on if test -d $KERN_SRC so the innermost if statement results in KERN_SRC=$KERN_DIR rather than 3 lines of errors, you only need to install kernel headers apt install linux-headers-generic, it will perform the build and find these files it currently reports as missing. It then errors out with current kernels "are too new".
  • WinEunuuchs2Unix
    WinEunuuchs2Unix over 7 years
    You can improve your answer by providing instructions for downloading and installing.
  • mtalexan
    mtalexan almost 7 years
    In trying to get 14.7 to work, I used the 2013.4 installer. The digilent installer is missing whole directories in that version, but is identical to the 14.7 installer except for the digilent.adept.runtime version that it installs. That doesn't work either.
  • mtalexan
    mtalexan over 4 years
    I'm hoping it's just an age-based problem, but this has no impact any time I've tried it. The poster's error is a build error in locating the kernel source during the build of the driver and is unaffected by the XIL_IMPACT_USE_LIBUSB=1 option (build system never looks at it). The impact tool itself seems to completely ignore it as well.
  • mtalexan
    mtalexan over 4 years
    These solutions no longer work, the windrvr is now too old relative to modern kernels. However the solution by hqqn still does work since it seems to be maintained by the Arch community.
  • Joshua
    Joshua over 2 years
    This worked for me on a Debian 10 32 bit in VirtualBox on 64 bit w7. I was needing to program Spartan 6 efuse key and needed a 32 bit os. Thank you for your answer. You do have to change to Gnome classic or Mate for the gui to function.