2014-08-14 Xilinx USB Cable driver на 14.04

Материал из SRNS
Перейти к: навигация, поиск

Как поставить драйвер к коробочке Xilinx под linux на примере Kubuntu 14.04 64bit

XILINX-USB-JTAG-MOVED.jpg

Содержание

Симптомы

При установке Xilix ISE 14.7 распаковка драйверов завершается ошибкой:

--Installing windrvr6---------------------------------------------
--Checking version.
--File /lib/modules/3.13.0-34-generic/kernel/drivers/misc/windrvr6.ko does not exist.
--File LINUX.3.13.0-34-generic.x86_64/windrvr6.ko does not exist.
--Setting source version to 1301.
--File LINUX.3.13.0-34-generic.x86_64/windrvr6.ko is newer than the destination file.
USE_KBUILD = no
checking for cpu architecture... x86_64
checking for WinDriver root directory... /opt/Xilinx/14.7/ISE_DS/common/bin/lin64/install_script/install_drivers/linux_drivers/windriver64
checking for linux kernel source... found at /lib/modules/3.13.0-34-generic/build
not found
make -f makefile.wd clean
make[1]: Entering directory `/opt/Xilinx/14.7/ISE_DS/common/bin/lin64/install_script/install_drivers/linux_drivers/windriver64/windrvr'
make[1]: Leaving directory `/opt/Xilinx/14.7/ISE_DS/common/bin/lin64/install_script/install_drivers/linux_drivers/windriver64/windrvr'

make -f makefile.wd
make[1]: Entering directory `/opt/Xilinx/14.7/ISE_DS/common/bin/lin64/install_script/install_drivers/linux_drivers/windriver64/windrvr'
make[1]: Leaving directory `/opt/Xilinx/14.7/ISE_DS/common/bin/lin64/install_script/install_drivers/linux_drivers/windriver64/windrvr'

make -f makefile.wd
make[1]: Entering directory `/opt/Xilinx/14.7/ISE_DS/common/bin/lin64/install_script/install_drivers/linux_drivers/windriver64/windrvr'
make[1]: Leaving directory `/opt/Xilinx/14.7/ISE_DS/common/bin/lin64/install_script/install_drivers/linux_drivers/windriver64/windrvr'

--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.

--real rc=2

--Driver installation failed.

--Digilent Return code = 0
--Xilinx Return code = 1
--Return code = 1

Лечение

Ставим ia32libs (возможно, это необязательный пункт, см. ниже):

sudo -i
cd /etc/apt/sources.list.d
echo "deb http://old-releases.ubuntu.com/ubuntu/ raring main restricted universe multiverse" >ia32-libs-raring.list
apt-get update
apt-get install ia32-libs

Удаляем на всякий случай ссылку на old-releases репозиторий:

sudo rm ia32-libs-raring.list

Качаем Git и библиотеки:

sudo apt-get install fxload gitk git-gui build-essential libc6-dev-i386

Качаем заголовочные файлы для libusb (в репозитории есть пакеты для 0.1 и 1.0, ставил все, не знаю какой именно помог)

sudo apt-get install libusb-dev

Качаем сорцы драйвера:

sudo git clone git://git.zerfleddert.de/usb-driver

Согласно мануалам требуется собрать 32-битную библиотеку libusb-driver.so, выполнив команду

sudo make lib32

Но у меня эта библиотека не захотела собираться в 32-битную версию, вероятно из-за 64-битного libusb:

/usr/bin/ld: cannot find -lusb

Зато 64 разрядная версия собирается:

sudo make

Поэтому есть подозрение, что установку ia32libs и libc6-dev-i386 можно пропустить.

Далее воспользуемся результатом компиляции:

./setup_pcusb /opt/Xilinx/14.7/ISE_DS/ISE/

На что получаем

You are not root, trying sudo...
Looking for USB cable files: /opt/Xilinx/14.7/ISE_DS/ISE//bin/lin64
Copying firmware to /usr/share:
«/opt/Xilinx/14.7/ISE_DS/ISE//bin/lin64/xusbdfwu.hex» -> «/usr/share/xusbdfwu.hex»
«/opt/Xilinx/14.7/ISE_DS/ISE//bin/lin64/xusb_emb.hex» -> «/usr/share/xusb_emb.hex»
«/opt/Xilinx/14.7/ISE_DS/ISE//bin/lin64/xusb_xlp.hex» -> «/usr/share/xusb_xlp.hex»
«/opt/Xilinx/14.7/ISE_DS/ISE//bin/lin64/xusb_xp2.hex» -> «/usr/share/xusb_xp2.hex»
«/opt/Xilinx/14.7/ISE_DS/ISE//bin/lin64/xusb_xpr.hex» -> «/usr/share/xusb_xpr.hex»
«/opt/Xilinx/14.7/ISE_DS/ISE//bin/lin64/xusb_xse.hex» -> «/usr/share/xusb_xse.hex»
«/opt/Xilinx/14.7/ISE_DS/ISE//bin/lin64/xusb_xup.hex» -> «/usr/share/xusb_xup.hex»
Installing udev rules:
done

Делаем символьную ссылку:

cd /lib/x86_64-linux-gnu/
sudo ln -s libusb-0.1.so.4 libusb.so

Вставляем USB-хвост коробочки в PC, загорается заветная лампочка:

20140814 Impact.png

Bonus

librxtxSerial.so

При прошивке zc702 через Digilent JTAG падает XSDK (Eclipse) с сообщением:

#
# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGSEGV (0xb) at pc=0x00007f0b3346624d, pid=18275, tid=139686081586944
#
# JRE version: 6.0_21-b06
# Java VM: Java HotSpot(TM) 64-Bit Server VM (17.0-b16 mixed mode linux-amd64 )
# Problematic frame:
# C  [librxtxSerial.so+0x724d]  read_byte_array+0x3d
#
# An error report file with more information is saved as:
# /home/korogodin/hs_err_pid18275.log
#
# If you would like to submit a bug report, please visit:
#   http://java.sun.com/webapps/bugreport/crash.jsp
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
#

Лечение:

sudo apt-get install librxtx-java

sudo mv /opt2/Xilinx/14.7/EDK/eclipse/lin64/eclipse/plugins/gnu.io.rxtx.linux.x86_64_2.1.7.3_v20071015/os/linux/x86_64/librxtxSerial.so /opt2/Xilinx/14.7/EDK/eclipse/lin64/eclipse/plugins/gnu.io.rxtx.linux.x86_64_2.1.7.3_v20071015/os/linux/x86_64/librxtxSerial.so.orig

sudo ln -sf /usr/lib/jni/librxtxSerial.so /opt/Xilinx/14.7/EDK/eclipse/lin64/eclipse/plugins/gnu.io.rxtx.linux.x86_64_2.1.7.3_v20071015/os/linux/x86_64/librxtxSerial.so

libstdc++

При загрузке XSDK имеем ошибку:

/opt/Xilinx/14.7/ISE_DS/common/lib/lin64/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by /usr/lib/x86_64-linux-gnu/libproxy.so.1)
Failed to load module: /usr/lib/x86_64-linux-gnu/gio/modules/libgiolibproxy.so

Лечение - дать ссылку на текущую библиотеку дистрибутива:

sudo ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6 /opt/Xilinx/14.7/ISE_DS/common/lib/lin64/libstdc++.so.6

C_FCLK_CLK0_FREQ should be

XPS загружается с настройками локали системы, в итоге при парсинге своих файлов неправильно интерпретирует запятые. Например вместо внешнего клока 33.33333 МГц ожидает 33 МГц. Это приводит к ошибкам при сборке bitsteam вида:

Running DRC Tcl procedures for OPTION SYSLEVEL_DRC_PROC...
ERROR:EDK:3900 - issued from TCL procedure "zynqconfig_do" line 34
   processing_system7_0 (processing_system7) - MHS file editing for Zynq related
   parameters is not allowed. Please use Zynq tab in XPS for PS configuration.
    Value of parameter C_FCLK_CLK0_FREQ (51000000) in MHS conflicts with the
   setting in Zynq tab. Value of C_FCLK_CLK0_FREQ should be 50000000  
Chipscope Integrate Controller, instance 'chipscope_icon', exists in System
ERROR:EDK:440 - platgen failed with errors!
gmake: *** [implementation/system_processing_system7_0_wrapper.ngc] Error 2
ERROR:EDK -  
   Error while running "gmake -f system.make netlist".
ERROR: [Edk 24-166] (generate_target): Failed to execute XPS script. Please check for any errors reported by the XPS application in the console: [/home/korogodin/project_1/project_1.srcs/sources_1/edk/system/__xps/pa/_system_synth.tcl]

Лечение - перед запуском ПО изменить настройки локали:

unset LANG
unset LC_ALL

cs_common.sh vs ChipScope

При запуске ChipScope используется скрипт cs_common.sh, который обрабатывается /bin/sh. Но в Ubuntu/Kubuntu /bin/sh ссылка на /bin/dash, который этот скрипт обработать не может. В итоге ChipScope не стартует с ошибкой:

/opt/Xilinx/14.7/ISE_DS/ISE/bin/lin64/unwrapped/analyzer: 72: /opt/Xilinx/14.7/ISE_DS/ISE/bin/lin64/unwrapped/cs_common.sh: XIL_DIRS[0]=/opt/Xilinx/14.7/ISE_DS/ISE/: not found
/opt/Xilinx/14.7/ISE_DS/ISE/bin/lin64/unwrapped/analyzer: 73: /opt/Xilinx/14.7/ISE_DS/ISE/bin/lin64/unwrapped/cs_common.sh: count++: not found
/opt/Xilinx/14.7/ISE_DS/ISE/bin/lin64/unwrapped/analyzer: 152: /opt/Xilinx/14.7/ISE_DS/ISE/bin/lin64/unwrapped/cs_common.sh: Syntax error: Bad for loop variable

Лечение - переконфигурировать симлинки:

First step.
    ls -l /bin/sh
and you will see
    lrwxrwxrwx 1 root root 4 2010-10-13 02:29 /bin/sh -> dash

Second.
    sudo dpkg-reconfigure dash
Select <no>
retype
    ls -l /bin/sh
and you will see
    lrwxrwxrwx 1 root root 4 2010-10-13 02:29 /bin/sh -> bash

[ Хронологический вид ]Комментарии

(нет элементов)

Войдите, чтобы комментировать.

Персональные инструменты
Пространства имён

Варианты
Действия
SRNS Wiki
Рабочие журналы
Приватный файлсервер
QNAP Сервер
Инструменты