Xilinx-USB-Treiber

From KIP Wiki
Revision as of 14:58, 24 September 2007 by Smanz (talk | contribs)
⧼kip-jumptonavigation⧽⧼kip-jumptosearch⧽

Wer Probleme hat unter Linux die Treiber von Xilinx zu installieren, der sollte mal einen Blick hierauf werfen. Ich hab versucht kurz zusammen zu schreiben wie es bei mir auf einem 64 bit Linux geklappt hat die alternativen Treiber zu installieren, vielleicht hilfts ja jemandem. --Smanz 18:03, 3 July 2007 (CEST)

Ubuntu 7.04

(optional)

Ubuntu 7.04 hat ein paar features, die man normalerweise nicht will.

  • GCC und co.:
sudo apt-get install build-essential
  • /bin/sh sollte auf /bin/bash und nicht auf /bin/dash zeigen:
sudo ls -l /bin/sh

und falls der Link aus dash zeigt:

sudo rm /bin/sh
sudo ln -s /bin/bash /bin/sh
  • /usr/bin/gmake gibts nicht und sollte verlinkt werden:
sudo ln -s /usr/bin/make /usr/bin/gmake
  • vim-tiny durch den richtigen vim esetzen:
apt-get install vim
 
# für Syntax highlighting: 
echo sy on >> ~/.vimrc

Die Bibliothek bauen

  • libusb-dev installieren (vielleicht optional auf 64 bit Rechnern):

Ich bin mir nicht sicher, ob man das auf 64 bit Rechnern wirklich braucht, da man später ja eigentlich 32 bit Treiber kompilieren wird, aber es war mein erster Versuch und deshalb hatte ich auch die 64 bit libs drauf.

sudo apt-get install libusb-dev
wget http://git.zerfleddert.de/cgi-bin/gitweb.cgi/usb-driver?a=snapshot;h=HEAD
  • Für 64 bit Rechner braucht man auch noch die 32 bit libs:
wget http://de.archive.ubuntu.com/ubuntu/pool/main/libu/libusb/libusb-dev_0.1.12-2_i386.deb
# daraus muss man irgendwie die data.tar.gz und 
# daraus wiederum die libusb.a extrahieren und 
# diese dann nach /usr/lib32/ kopieren
  • Die Quellen entpacken:
tar xzf usb-driver-HEAD.tar.gz
cd usb-driver
  • Kompilieren:

Auf 64 bit Rechnern:

make lib32

Auf 32 bit Rechnern:

make
  • Die Bibliothek ins System kopieren:
sudo cp libusb-driver.so /usr/local/lib/

Firmware

  • Die Firmware runterladen:
wget ftp://ftp.xilinx.com/pub/utilities/fpga/xusbdfwu-1025.zip
  • Auspacken und an die richtige Stelle kopieren:
unzip xusbdfwu-1025.zip
sudo cp xusbdfwu.hex /usr/share
  • fxload installieren:
apt-get install fxload
  • Die firmware Automatisch per udev aufs board laden:

Eine Datei /etc/udev/rules.d/xusbdfwu.rules mit dem folgenden Inhalt anlegen:

SYSFS{idVendor}=="03fd", SYSFS{idProduct}=="0008", NAME="windrvr6"
BUS=="usb", ACTION=="add", SYSFS{idVendor}=="03fd",SYSFS{idProduct}=="0007", RUN+="/sbin/fxload -v -t fx2 -I /usr/share/xusbdfwu.hex -D $TEMPNODE"
BUS=="usb", ACTION=="add", SYSFS{idVendor}=="03fd",SYSFS{idProduct}=="0009", RUN+="/sbin/fxload -v -t fx2 -I /usr/share/xusbdfwu.hex -D $TEMPNODE"
BUS=="usb", ACTION=="add", SYSFS{idVendor}=="03fd",SYSFS{idProduct}=="000b", RUN+="/sbin/fxload -v -t fx2 -I /usr/share/xusbdfwu.hex -D $TEMPNODE"
BUS=="usb", ACTION=="add", SYSFS{idVendor}=="03fd",SYSFS{idProduct}=="000d", RUN+="/sbin/fxload -v -t fx2 -I /usr/share/xusbdfwu.hex -D $TEMPNODE"
BUS=="usb", ACTION=="add", SYSFS{idVendor}=="03fd",SYSFS{idProduct}=="000f", RUN+="/sbin/fxload -v -t fx2 -I /usr/share/xusbdfwu.hex -D $TEMPNODE"
ACTION=="add", BUS=="usb", SYSFS{idVendor}=="03fd", MODE="666"

Nicht vergessen udev neu zu starten:

/etc/init.d/udev restart

Sobald man nun das Board per USB verbindet, wird die Firmware hochgeladen.

Xilinx Softwarte anpassen

(Xilinx Pfad anpassen)

Dieser Abschnitt ist für 64 bit Rechner wichtig, da es nicht funktioniert einfach allen binaries die libusb-driver.so zu prelinken.

Es gibt wohl drei binaries, die mit dem USB-Kabel kommunizieren: /opt/xilinx/bin/lin/_impact (man beachte das "_") /opt/xilinx/bin/lin/cse und /opt/xilinx/bin/lin/xmd. Diese benötigen die oben erstellte libusb-driver.so geprelinkt.

  • Die binary umbenennen:
cd /opt/xilinx/bin/lin
mv _impact _impact.bin
  • Erstelle ein Skript /opt/xilinx/bin/lin/_impact mit folgendem Inhalt:
#!/bin/sh
#
# Preload driver binary
LD_PRELOAD=/usr/local/lib/libusb-driver.so $0.bin $*
  • Die richtigen Rechte vergeben:
chmod +x /opt/xilinx/bin/lin/_impact
  • Die obigen drei Punkte für /opt/chipscope/bin/lin/cse und /opt/edk/bin/lin/xmd wiederholen.

Chipscope reparieren

Es kann sein, dass Chipscope Probleme mit den eigenen tcl hat. Abhilfe schafft:

cp -r /opt/xilinx/chipscope/xilinx/bin/lib /opt/xilinx/chipscope/bin/


Nützliche Skripte

Das USB-Kabel zurücksetzen

(Xilinx Pfad anpassen)

Folgendes Skript kann man z.B. in /usr/local/bin/usbreset speichern:

#!/bin/bash
 
echo "setmode -bs" > /tmp/impact.keys
echo "cleancablelock" >> /tmp/impact.keys
echo "exit">> /tmp/impact.keys
echo "">> /tmp/impact.keys
 
 
. /opt/xilinx/8.2i/settings.sh
impact -batch < /tmp/impact.keys
 
rm /tmp/impact.keys
 
# clean up impact's mess
rm _impact.cmd _impactbatch.log

Ein Bitfile auf den FPGA laden

(Xilinx Pfad anpassen)

Folgendes Skript kann man z.B. in /usr/local/bin/usbupload speichern und dann mit usbupload <bitfile> <devicenummer> ein bitfile hochladen. Falls keine Devicenummer angegeben wurde wird der Defaultwert 3 verwendet (passend für das XUP-Board):

#!/bin/bash
 
if [ -z "$2" ] ; then
 DEVICE=3
else
 DEVICE=$2
fi
 
echo "setMode -bscan" > /tmp/usbdownload
echo "setCable -p auto" >> /tmp/usbdownload
echo "identify" >> /tmp/usbdownload
echo "assignfile -p $DEVICE -file $1" >> /tmp/usbdownload
echo "program -p $DEVICE" >> /tmp/usbdownload
echo "quit" >> /tmp/usbdownload
 
. /opt/xilinx/8.2i/settings.sh
impact -batch < /tmp/usbdownload 
 
rm /tmp/usbdownload
 
# clean up impact's mess
rm _impactbatch.log _impact.cmd

Links

Folgende Links waren nützlich: