Next Previous Contents

2. Installation of the VMELinux Kernel Driver

2.1 Download the Source

Download the distribution from the VMELinux Web Site.

2.2 Install the source to the software

Place the file in your source directory; We suggest /usr/src. Untar the zipped/tarred file by typing...

tar -xzf VMELinux_1.3.x.tar.gz

Then:

cd vmelinux
You should see three directories:
ca91c042
vmeshell
vmeutils

In ca91c042 you should find:

ca91c042/
ca91c042/Makefile
ca91c042/ca91c042.c
ca91c042/ca91c042.h
ca91c042/README
ca91c042/e
ca91c042/ins
ca91c042/stat
ca91c042/uns

In vmeshell you should find:

vmeshell/vmer
vmeshell/README
vmeshell/vmeseek
vmeshell/cmd.vme
vmeshell/vmew
vmeshell/vmeregw
vmeshell/vmeregr
vmeshell/vmefa
vmeshell/vmecall
vmeshell/e
vmeshell/ec
vmeshell/fa.vme
vmeshell/map.vme
vmeshell/tmp.vme
vmeshell/vmedb
vmeshell/vmedl
vmeshell/vmedw
vmeshell/vmemap
vmeshell/vmerb
vmeshell/vmerf
vmeshell/vmerl
vmeshell/vmerw
vmeshell/vmewb
vmeshell/vmewf
vmeshell/vmewl
vmeshell/vmeww
vmeshell/makelinks

In the vmeutils directory you should find:

vmeutils/commands.cpp
vmeutils/commands.h
vmeutils/universe.h
vmeutils/Makefile
vmeutils/vmeutils.h
vmeutils/unilib.h
vmeutils/unilib.cpp
vmeutils/vmeutils.cpp
vmeutils/README

2.3 Compile the VMELinux components

Enter the "ca91c042" directory and make the VMELinux device driver module.

make

Now you must create the several /dev driver files. Type:

make devices

DON'T FORGET TO MAKE THE /dev/vme* DEVICES!!!

Once made, you should see the file "ca91c042.o" in the directory. This is a loadable module. See below for loading information. Plus, you should find several "vme..." files in the /dev directory. Here is how the files should look:

hostname:/dev# ls -l vme*
crw-rw-rw-   1 root     root      221,   8 Jul 30 10:51 vme_ctl
crw-rw-rw-   1 root     root      221,   0 Jul 30 10:51 vme_m0
crw-rw-rw-   1 root     root      221,   1 Jul 30 10:51 vme_m1
crw-rw-rw-   1 root     root      221,   2 Jul 30 10:51 vme_m2
crw-------   1 root     root      221,   3 Jul 30 10:51 vme_m3
crw-rw-rw-   1 root     root      221,   4 Jul 30 10:51 vme_m4
crw-rw-rw-   1 root     root      221,   5 Jul 30 10:51 vme_m5
crw-rw-rw-   1 root     root      221,   6 Jul 30 10:51 vme_m6
crw-------   1 root     root      221,   7 Jul 30 10:51 vme_m7
hostname:/dev#

Change to the "vmeutils" directory and type make there.

make

This will compile the "vmeutils" program. This program directly speaks to the kernel driver. It is a reference work for those of you who wish to write your own programs to directly speak with the driver.

Copy the program "vmeutils" to your user binary directory or let the makelinks script do this for your in the next step. On our system this is "/usr/local/bin." Alternatively, you can create a link in the user bin directory to the "vmeutils" program.

Change to the "vmeshell" directory. There are no files to be compiled here. These are shell programs that use the "vmeutils" program to access the VMEbus. All the files beginning with "vme" should with have a link made or be copied to the "/usr/local/bin" directory.

just type:

./makelinks

Have a look in the libvme directory for a C++ example on how to communicate with the driver. You can use the libvme code as your interface to the driver for your programs if you wish. Docmentation for this is planned for the future.

You are now ready to try the driver.

2.4 Load the VMELinux Kernel Module

Make sure you are root and insert "load" the VMELinux Kernel Module for the Universe chip by typing...

insmod ca91c042

Or just type "./ins" to let the shell script do this for you. Once complete, type...

./stat

or

more /proc/ca91c042
You should see a list of registers displayed on your screen. Something like this...
Universe driver info:
  Control Pointer = 0000
  Stats  reads = 0  writes = 0  ioctls = 0
  LSI0_CTL = 00800000    LSI1_CTL = 00800000
  LSI0_BS  = C0000000    LSI1_BS  = 00000000
  LSI0_BD  = C0010000    LSI1_BD  = 00000000
  LSI0_TO  = 40009000    LSI1_TO  = 00000000
  LSI2_CTL = 00800000    LSI3_CTL = 00800000
  LSI2_BS  = 00000000    LSI3_BS  = 00000000
  LSI2_BD  = 00000000    LSI3_BD  = 00000000
  LSI2_TO  = 00000000    LSI3_TO  = 00000000
  image_va0   = 00000000     image_va1   = 00000000
  image_va2   = 00000000     image_va3   = 00000000

Driver Program Status:
  DMACTL 0    = 00000000 DMACTL 1    = 00000000
  DMACTL 2    = 00000000 DMACTL 3    = 00000000
  OkToWrite 0 = 0        OkToWrite 1 = 0
  OkToWrite 2 = 0        OkToWrite 3 = 0
  Mode 0      = 0        Mode 1      = 0
  Mode 2      = 0        Mode 3      = 0
If not, something went wrong.

2.5 Difficulties

The Universe driver does a good job of finding the Universe chip on a PCI bus, but differences in board design may prevent this. We tested all our routines on a Xycom XVME-655, Dynatem DPC and SBS VP7. There is little reason why this should not work on any other Intel board with a PCI bus and the Universe PCI-VME bridge chip. If you encounter problems, please let us know at the The VMELinux Project Bug Reporter


Next Previous Contents