This will apply to some extent to other linux distributions. Particularly if you are using a new 2.6.16 kernel. Many of the problems are not specific to debian. Install was complicated by:
Before doing the install, consider upgrading the kernel to 2.6.16, the X server to X.org, glibc, and gnome from the unstable distribution before you start. You don't need to do these to install ISE. But you will probably be upgrading those at some point and at least one (the kernel upgrade) will break ISE later. I list those because those are drastic, and scary, upgrades and they will seem even more scary when you have ISE installed. I say scary because they involve removing many packages, including some that appear essential, as well as upgrading and installing others. But many new packages, including other CAD software, will require those upgrades. The "stable" distribution is so old that it is probably less stable than the new "unstable" distribution; installing many new packages will have dependencies that make radical upgrades. And if you are running engineering software on Linux, you are likely to want recent versions. If you use the proprietary nvidia video card drivers and motherboard sound drivers, they will need to be reinstalled after the kernel upgrade (download from nvidia, debian packages are broken). The video card driver also seems to get trashed by apt-get during some other upgrades resulting in X hanging on startup - rerun the nvidia installer. [UPDATE: nvidia needs to keep being reinstalled, after every reboot, because of a bug in the driver that rerunning the installer happens to hide not because APT is messing with files; however, the kernel upgrade really will break the Xilinx drivers]
See also: HOWTO_Xilinx (gentoo-wiki)
This log includes many missteps or unsuccessful attempts, many of which have been commented out.
###
### Xilinx ISE Webpack 8.1i (Engineering FPGA CAD software)
###
# www: http://www.xilinx.com/
# installed: 2006-05-10 mrw
# note: this spanned several days and some installs of other softwar
# listed below happened concurrently
# register online, first to get registration code via emailp
cd /dist
wget http://direct.xilinx.com/direct/webpack/81/WebPACK_81i_SFD.sh
# note: did not need libcurl symlink from previous version install
# ln -s /usr/lib/libcurl.so.3 /usr/lib/libcurl.so.2
# rm /usr/lib/libcurl.so.2
# did not need to trick DISPLAY variable
# older versions needed: export DISPLAY=:0
sh WebPACK_81i_SFD.sh
# interactive
# confirm license agreements
# install directory /opt/Xilinx/webpack8.1i/
# update environment: no
# will probably try to mess with /etc/rc.local (which doesn't exist)
# environment will be written in settings.sh, anyway
# summary:
# Install Location : /opt/Xilinx/webpack8.1i/
# LMC_HOME = ${XILINX}/smartmodel/${PLATFORM}/installed_lin
# PATH = ${XILINX}/bin/${PLATFORM}
# LD_LIBRARY_PATH = ${XILINX}/bin/${PLATFORM}:/usr/X11R6/lib
# XILINX = /opt/Xilinx/webpack8.1i/
# NPX_PLUGIN_PATH = ${XILINX}/java/${PLATFORM}/jre/plugin/i386/ns4
# CPLD
# Design Environment Tools
# Virtex4
# Cable Drivers (Important OS Info Below)
# Virtex/VirtexE/Spartan2/Spartan2E
# Virtex2/Virtex2P/Spartan3/Spartan3E
# Standalone Programming Tools
# ignore error
# Session management error: Authentication Rejected, reason : None
# of the authentication protocols specified are supported and host-based
# authentication failed
# ignore error:
# Error cannto run process
# /opt/Xilinx/webpack8.1i/.xinstall/install_driverscript
# insmod: error inserting
# '/lib/modules/misc/windrvr6.o': -1 Invalid module format
# we will have to recompile windrv manually for new kernel
# install completed
# test (as ordinary user) if program, excluding driver, works:
opt/Xilinx/webpack8.1i/bin/lin/ise
# ok
# oddly, gschem (another running program) segfaulted but did not repeat
# Cable drivers
# online support articles #22648 (2.6 kernels) and #18612 (2.4 kernels) apply
cd /dist
wget ftp://ftp.xilinx.com/pub/utilities/M1_workstation/linuxdrivers.2.6.tar.gz
cd /usr/local/src
mkdir xilinx
cd xilinx
mkdir linuxdrivers2.6
cd linuxdrivers2.6/
tar zxvf /dist/linuxdrivers.2.6.tar.gz
mv linuxdrivers.2.6/* .
rmdir linuxdrivers.2.6
# read ahead, this didn't work
cd windrvr
./configure
make
# error: syntax error before KBUILD_BASENAME
# occurs in ten places in two files, all kernel includes
# KBUILD_BASENAME is defined in makefile
# http://gentoo-wiki.com/Talk:HOWTO_Xilinx
# looks ike we need -D"KBUILD_BASENAME=KBUILD_STR(windrvr6)"
cp makefile makefile.orig
# note shell/make/perl escaping of "#" and of the backslash that escapes it
# this command gets processed by the shell, perl, then make, then the shell
# before cc is actually called.
perl -p -i -n -e 's/-DKBUILD_MODNAME=windrvr6/-D"KBUILD_STR(s)=\\#s" -D"KBUILD_BASENAME=KBUILD_STR(windrvr6)" -D"KBUILD_MODNAME=KBUILD_STR(windrvr6)"/' makefile
make install
# FATAL: Error inserting windrvr6 (/lib/modules/2.6.16-1-686/kernel/drivers/misc/windrvr6.ko): Unknown symbol in module, or unknown parameter (see dmesg)
insmod /lib/modules/2.6.16-1-686/kernel/drivers/misc/windrvr6.ko
dmesg
# windrvr6: no version for "struct_module" found: kernel tainted.
# windrvr6: Unknown symbol class_simple_device_add
# windrvr6: Unknown symbol class_simple_destroy
# windrvr6: Unknown symbol class_simple_device_remove
# windrvr6: Unknown symbol class_simple_create
# windrvr6: Unknown symbol class_simple_device_add
# windrvr6: Unknown symbol class_simple_destroy
# windrvr6: Unknown symbol class_simple_device_remove
# windrvr6: Unknown symbol class_simple_create
# note that on some kernels, these don't exist
# these appear to have been totally erradicated from kernel
# http://www.groupsrv.com/linx/about74606.html
# http://dev.gentoo.org/~genstef/files/slmodem-usb-class.diff
# http://lxr.linux.no/source/drivers/base/class_simple.c
# Others have had some success by replacing calls to class_simple_ with
# calls to class_* with other device drivers, but that doesn't turn out
# to be as easy with the particular functions called
# cat >>linux_common.h <<\...EOF...
# #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
# #include <linux/device.h>
# #define class_simple_device_add(a,b,c,d) {\
# // a.dev=b;\
# a.device=c;\
# a.class_id=d;\
# class_device_intiialize(class_dev)\
# class_device_add(a);\
# }
# #define class_simple_destroy(a) class_destroy(a)
# #define class_simple_device_remove(a) class_device_remove(a)
# #define class_simple_create(a,b) class_create(a,b)
# #define class_simple class
# #endif
# ...EOF...
#
# make clean
# make
# make install
# now, I try downloading class_simple() from an older kernel and compiling it in
# have to play some games because the version I could readily get to was
# html formatted
# apt-get install lynx
# (echo "/*" ; lynx -dump --nolist --dont-wrap-pre http://lxr.linux.no/source/drivers/base/class_simple.c | cut -c 4- | head --lines=-12 | tail --lines=218 ) >class_simple.c
# patch class_simple.c <<\...EOF...
# --- class_simple.c~ 2006-05-10 22:39:40.000000000 -0400
# +++ class_simple.c 2006-05-10 22:41:41.000000000 -0400
# @@ -170,6 +170,7 @@
# }
# EXPORT_SYMBOL(class_simple_device_add);
#
# +#if 0
# /**
# * class_simple_set_hotplug - set the hotplug callback in the embedded struct class
# * @cs: pointer to the struct class_simple to hold the pointer
# @@ -187,7 +188,7 @@
# return 0;
# }
# EXPORT_SYMBOL(class_simple_set_hotplug);
# -
# +#endif
# /**
# * class_simple_device_remove - removes a class device that was created with class_simple_device_add()
# * @dev: the dev_t of the device that was previously registered.
# ...EOF...
#
#
# patch makefile <<\...EOF...
# --- makefile.orig 2006-05-10 22:43:15.000000000 -0400
# +++ makefile 2006-05-10 22:46:00.000000000 -0400
# @@ -29,7 +29,7 @@
# $(LD) $(LDFLAGS) -r -o $@ $(OD)/$(MODULE_NAME).o $(OD)/$(MODULE_NAME).mod.o
#
# __temp_link:
# - $(LD) $(LDFLAGS) -r -o $(OD)/$(MODULE_NAME).o $(OD)/linux_wrappers.o $(OD)/wdusb_linux.o $(LINK_OBJ)
# + $(LD) $(LDFLAGS) -r -o $(OD)/$(MODULE_NAME).o $(OD)/linux_wrappers.o $(OD)/wdusb_linux.o $(LINK_OBJ) $(OD)/class_simple.o
#
# modpost:
# /lib/modules/2.6.16-1-686/build/scripts/mod/modpost $(OD)/$(MODULE_NAME).o
# ...EOF...
#
# make clean
# cc -c -O2 -Wall -DLINUX -D__KERNEL__ -DMODULE -DWINDRIVER_KERNEL -DLINUX_USB_SUPPORT -mpreferred-stack-boundary=2 -nostdinc -iwithprefix include -Wstrict-prototypes -Wno-trigraphs -fno-common -pipe -D"KBUILD_STR(s)=#s" -D"KBUILD_BASENAME=KBUILD_STR(windrvr6)" -D"KBUILD_MODNAME=KBUILD_STR(windrvr6)" -O -I/lib/modules/2.6.16-1-686/build/include -I/lib/modules/2.6.16-1-686/build/include/asm/mach-default -DUDEV_SUPPORT -c -o LINUX.2.6.16-1-686.i386/class_simple.o class_simple.c
# make
# sync
# make install
# # Now it complains about different symbols being missing
# # windrvr6: Unknown symbol class_device_register
# # windrvr6: Unknown symbol class_device_create_file
# # windrvr6: Unknown symbol class_unregister
# # windrvr6: Unknown symbol class_device_unregister
# # windrvr6: Unknown symbol class_register
# # Note that the following
# # 00000000 *UND* 00000000 class_device_unregister
# # 00000000 *UND* 00000000 class_device_create
# # 00000000 *UND* 00000000 class_device_destroy
# # are used by core/usbcore.ko which IS loaded.
# # note that class_device_unregister() is common to both
# One problem is that we are limited to insmod as modprobe can't find the
# module and insmod won't load any required modules. I should have
# run depmod
#
# Note that wndrvr is part of a portable driver toolkit sold by www.jungo.com
# Dan McDonald 2006-05-03 on comp.arch.fpga reported that he was able to
# compile using the gentoo wiki and it referenced some URLs someone had
# tried downloading from (which fixed one of the two problems)
# I should have read the article the talk page above was related to:
# http://gentoo-wiki.com/HOWTO_Xilinx
cd /dist
wget http://www.jungo.com/download/WD801LN.tgz
cd /usr/local/src
mkdir windriver
cd windriver/
mkdir wd801ln
cd wd801ln/
tar zxvf /dist/WD801LN.tgz
cd WinDriver/redist
./configure
perl -p -i -n -e 's/-DKBUILD_MODNAME=windrvr6/-D"KBUILD_STR(s)=\\#s" -D"KBUILD_BASENAME=KBUILD_STR(windrvr6)" -D"KBUILD_MODNAME=KBUILD_STR(windrvr6)"/' makefile
make
make install
# success, finally!
cd /usr/local/src/xilinx/linuxdrivers2.6/xpc4drvr/
./configure
make
# ERROR: Module xpc4drvr does not exist in /proc/modules
Both modules exist in same directory
modinfo /lib/modules/2.6.16-1-686/kernel/drivers/misc/*.ko
# filename: /lib/modules/2.6.16-1-686/kernel/drivers/misc/windrvr6.ko
# license: Proprietary
# author: Jungo
# description: WinDriver v8.01 Jungo (C) 1999 - 2006
# vermagic: 2.6.16-1-686 686 gcc-4.0
# depends:
# alias: pci:v*d*sv*sd*bc*sc*i*
# filename: /lib/modules/2.6.16-1-686/kernel/drivers/misc/xpc4drvr.ko
# license: Proprietary
# depends:
# vermagic: 2.6.16-1-686 686 gcc-4.0
modprobe --showconfig | fgrep windrvr
# alias pci:v*d*sv*sd*bc*sc*i* windrvr6
#alias symbol:WD_register_kp_module windrvr6
modprobe --showconfig | fgrep xpc4drvr
# nada
depmod
modprobe xpc4drvr
. /opt/Xilinx/webpack8.1i/settings.sh
# as ordinary user
/opt/Xilinx/webpack8.1i/bin/lin/impact &
# web update says:
# Warning: the Xilinx installation path is read only /opt/Xilinx/webpack8.1i
# check that device nodes where created and match device driver
grep windrvr6 /proc/devices
ls -lF /dev/xpc4_*
grep xpc4drvr /proc/devices
ls -lF /dev/xpc4_*
# tried as above but with older version, same results
cd /dist/
wget http://www.jungo.com/download/WD702LN.tgz
cd /usr/local/src
cd windriver/
mkdir wd702ln
cd wd702ln
tar zxvf /dist/WD702LN.tgz
cd WinDriver/
cd redist/
./configure
perl -p -i -n -e 's/-DKBUILD_MODNAME=windrvr6/-D"KBUILD_STR(s)=\\#s" -D"KBUILD_BASENAME=KBUILD_STR(windrvr6)" -D"KBUILD_MODNAME=KBUILD_STR(windrvr6)"/' makefile
make
rmmod xpc4drvr
rmmod windrvr6
make install
depmod
modprobe windrvr6
modprobe xpc4drvr
# note, still not working
# worth noting:
# "NOTE: Due to security reasons, by default, /dev/windrvr6 is created with
# permissions only for the root user. To enable other user access,
# change the permissions of /dev/windrvr6"
# Aha, found this in the status window on impact:
"File version of /etc/hotplug/usb/xusbdfwu.fw/xusbdfwu.hex = 1018(dec), 03FA."
# it needs a firmware download and hotplug isn't and can't be installed
apt-get install fxload
lsusb | fgrep Xilinx # 03fd:000d
/sbin/fxload -v -t fx2 -I /etc/hotplug/usb/xusbdfwu.fw/xusbdfwu.hex -D /proc/bus/usb/002/013
lsusb | fgrep Xilinx # 03fd:0008
# FXD changes its device id after firmware loaded so it appears as two device,
# the driver for the first is to download firmware to convert it into the
# second
# as root:
impact&
# impact proceeds to update the firmware, says this takes 10 to 30 minutes
# not sure which firmware needs updating, the FX2 firmware was just loaded
# maybe it is the cpld?
# Need to integrate with udev, maybe something like this
# SUBSYSTEM="usb" ACTION=="add", ENV{PRODUCT}=="3fd/000d/*", RUN+="/sbin/fxload ..."
# could also automatically load the windrvr and xpc4drvr kernel modules,
# but those also need to be present for parallel drivers which are not
# plug and pray
# rebooted machine
# had trouble with video card due to software upgrade, fixed
# reset power on xilinx/digilent spartan3e development board
#
lsusb | fgrep Xilinx # 03fd:000d
/sbin/fxload -v -t fx2 -I /etc/hotplug/usb/xusbdfwu.fw/xusbdfwu.hex -D /proc/bus/usb/001/003
# renamed windrvr6 and xpc4drvr files back to their original names
# (this had been done to prevent loading while debugging video card)
depmod
modprobe xpc4drvr
modprobe windrvr6
. /opt/Xilinx/webpack8.1i/settings.sh
impact &
# rats, device files have gone missing
# solve the rc.local problem
# idea inspired by
# http://www.plope.com/Members/chrism/debian_rc_local_equiv
cat >>/etc/init.d/local <<\...EOF...
#!/bin/sh
case "$1" in
start)
checkportmap
echo "Running rc.local:"
. /etc/rc.local
echo "rc. local done"
;;
stop)
echo "stop not supported on rc.local"
;;
reload)
echo "stop not supported on rc.local"
;;
force-reload)
echo "stop not supported on rc.local"
;;
restart)
echo "stop not supported on rc.local"
;;
*)
echo "Usage: /etc/init.d/local {start|stop|reload|restart}"
exit 1
;;
esac
exit 0
...EOF...
chmod +x /etc/init.d/local
update-rc.d local defaults 80
cat >>/etc/rc.local <<\...EOF...
...EOF...
# NOTE: works ok with JTAG3 cable (similar to Parallel III)
# USB cable doesn't work under linux or windows - defective part?
# Printing
# If you don't set the printer environment variable ISE won't let you print
# It will say "print fails because the default printer hs not been selected"
# much time wasted looking for a preference inside ISE that isn't there.
# Once you set the environment variable, it will not only let you print it
# will let you select the queue.
export PRINTER=ml170
Note that you may want to set the PRINTER environment variable and run /opt/Xilinx/webpack8.1/settings.sh from /etc/environment or in your ~/.profile file.
It appears that XFree86 sets DISPLAY to ":0" and x.org sets it to ":0.0". Webpack 7i choked on :0.0. I think that is fixed. The installer has problems with libcurl shared library versions. Download the full version and create a dummy symbolic link to the version that is installed - the main program doesn't use it, anyway.
This file is maintained by Mark Whitis (whitis@freelabs.com).
|
Software Development - Electronic Design - Embedded Systems - Device Drivers - System/Network Administration and Security - Motor Control, RobotCNC - Linux/Un*x - 25+ years experience The author of these pages is looking for a new gig. [RESUME] |
| Engineers and electronic hobbyists: The new Open Symbol Project is creating open schematic symbols and PCB footprints for a variety of different CAD packages. |
| Mark Whitis's Website | Home Page | Linux | Book: Linux Programming Unleashed | My Resume | Genealogical Data | Contact Info | Security | About |
All email messages received must pass the turing test or they will be considered SPAM. If it could have been written by a machine, it was.
Under no circumstances are you to email me with questions regarding windoze, any other microsoft operating system or application, or any software which runs under any form of windoze.
*