Difference between revisions of "Xilinx ISE WebPACK"

From ArchWiki
Jump to: navigation, search
m
m
Line 34: Line 34:
 
This download yields a file named install_drivers.tar.gz  
 
This download yields a file named install_drivers.tar.gz  
  
  tar xzf install_drivers.tar.gz yields a directory named install_drivers/
+
  tar xzf install_drivers.tar.gz  
  
When I attempted to build the drivers from this file I encountered the following errors:
+
yields a directory named install_drivers/ When I attempted to build the drivers from this file I encountered the following errors:
  
 
'''linux_wrappers.c:48:31: error: linux/ioctl32.h: No such file or directory'''
 
'''linux_wrappers.c:48:31: error: linux/ioctl32.h: No such file or directory'''
Line 48: Line 48:
 
http://www.jungo.com/st/download/WD920LN.tgz
 
http://www.jungo.com/st/download/WD920LN.tgz
  
  tar xzg WD920LN.tgz yields a directory named WinDriver/
+
  tar xzg WD920LN.tgz  
  
Within this directory you'll find:
+
yields a directory named WinDriver/ Within this directory you'll find:
  
 
  ls WinDriver/redist/  
 
  ls WinDriver/redist/  
Line 72: Line 72:
 
This update to the Jungo driver eliminated the error: linux/ioctl32.h: No such file or directory, but the error: ‘struct scatterlist’ has no member named ‘page’ was still persisting.
 
This update to the Jungo driver eliminated the error: linux/ioctl32.h: No such file or directory, but the error: ‘struct scatterlist’ has no member named ‘page’ was still persisting.
  
 +
After research regarding changes to scatterlist.h lead to these discussions:
 +
 +
http://kerneltrap.org/Linux/SG_Chaining_Merged
  
 
  cd before/install_drivers/linux_drivers/windriver32/windrvr/
 
  cd before/install_drivers/linux_drivers/windriver32/windrvr/

Revision as of 03:39, 16 May 2008

Xilinx ISE WebPACK is a complete design suite providing:

* specification of programmable logic, via schematic capture or verilog/VHDL
* synthesis and fit of specified logic into Xilinx devices
* behavioral and post-fit simulation 
* download of configuration into target device via communications cable
* support for Linux based development system host 

The ISE WebPACK version is downloadable:

http://www.xilinx.com/support/download/index.htm

The download requires registration and licensing agreement, but there is no charge, i.e. it's free as in "Free Beer", but not free as in "Free Speech".

Make sure you select the Linux version.

There are a couple of very helpful howto's at Gentoo:

http://gentoo-wiki.com/Talk:HOWTO_Xilinx/Archive_1

http://gentoo-wiki.com/HOWTO_Xilinx

I used, and recommend, the "Download Files Individually" option, once you reach the download page. This downloads the entire installer and installation is performed afterward.

Xilinx only provides official support for redhat and suse distributions, but I found the initial install of ISE to go smoothly on archlinux with kernel-headers 2.6.24.3-1.

I first installed ISE WebPACK for Linux version 9.2i, but 10.1 was released shortly thereafter. I was pleased to see this updated version was available for linux at the same time as 10.1 for windoze.

After installation, ISE worked fine for design capture, synthesis and simulation. However once I reached the point of trying to download a design to a target device I ran into some trouble. Installing the cable drivers for talking to the target interface cable yielded errors.

I downloaded the standalone driver installation utility from:

ftp://ftp.xilinx.com/pub/utilities/fpga/install_drivers.tar.gz

This download yields a file named install_drivers.tar.gz

tar xzf install_drivers.tar.gz 

yields a directory named install_drivers/ When I attempted to build the drivers from this file I encountered the following errors:

linux_wrappers.c:48:31: error: linux/ioctl32.h: No such file or directory

and

linux_wrappers.c:1398: error: ‘struct scatterlist’ has no member named ‘page’

Reading in the gentoo howto's listed above led me to download the latest Jungo source code, which is the core of the Xilinix linux USB support. I modified the link after reading that the latest Jungo driver was 9.20. I got WinDriver 9.20 from:

http://www.jungo.com/st/download/WD920LN.tgz

tar xzg WD920LN.tgz 

yields a directory named WinDriver/ Within this directory you'll find:

ls WinDriver/redist/ 

configure*      linux_wrappers.c  makefile.in      wdreg*             wdusb_linux.c     windrvr_gcc_v3.a
linux_common.h  linux_wrappers.h  setup_inst_dir*  wdusb_interface.h  windrvr_gcc_v2.a  windrvr_gcc_v3_regparm.a

These are the same core files also found in:

ls install_drivers/linux_drivers/windriver32/windrvr/

config.cache    LINUX.2.6.24-ARCH.i386/  makefile         wdusb_interface.h  windrvr_gcc_v3_regparm.a
config.log      linux_common.h           makefile.in      wdusb_linux.c
config.status*  linux_wrappers.c         setup_inst_dir*  windrvr_gcc_v2.a
configure*      linux_wrappers.h         wdreg*           windrvr_gcc_v3.a

So I copied the 9.20 WinDriver files over those found in the install_drivers/ subdirectory:

cp -p WinDriver/redist/* install_drivers/linux_drivers/windriver32/windrvr/

This update to the Jungo driver eliminated the error: linux/ioctl32.h: No such file or directory, but the error: ‘struct scatterlist’ has no member named ‘page’ was still persisting.

After research regarding changes to scatterlist.h lead to these discussions:

http://kerneltrap.org/Linux/SG_Chaining_Merged

cd before/install_drivers/linux_drivers/windriver32/windrvr/

and apply the patch indicated below to linux_wrappers.c:

diff -r before/install_drivers/linux_drivers/windriver32/windrvr/linux_wrappers.c   \ 
         after/install_drivers/linux_drivers/windriver32/windrvr/linux_wrappers.c
61c61
<
--- 
>
124a125,127
> /* added to fix scatterlist without page compile bug -jea 2008-05-09 */
> // #include <linux/scatterlist.h>
>
1791c1794
<     sgl[0].page = pages[0];
---
>     sgl[0].page_link = (unsigned long)pages[0];
1798c1801
<             sgl[i].page = pages[i];
---
>             sgl[i].page_link = (unsigned long)pages[i];
1823c1826
<         void *va = page_address(sgl[i].page) + sgl[i].offset;
---
>         void *va = page_address((struct page *)sgl[i].page_link) + sgl[i].offset;
1954,1956c1957,1959
<         if (!PageReserved(sgl[i].page))
<             SetPageDirty(sgl[i].page);
<         page_cache_release(sgl[i].page);
---
>         if (!PageReserved((struct page *)sgl[i].page_link))
>             SetPageDirty((struct page *)sgl[i].page_link);
>         page_cache_release((struct page *)sgl[i].page_link);


This is a Xilinx tip for usb install on Linux:

http://www.xilinx.com/support/answers/22648.htm