Skip to content
Snippets Groups Projects
To learn more about this project, read the wiki.
README 5.69 KiB
This directory hosts the minic and nic drivers for the WR switch.  The
minic, together with the underlying vhdl implementation, is work by
Tomasz Wlostowski.  The rest and any bug is by Alessandro Rubini,
but Tom helped integrating with the new vhdl and testing stuff.

	Structure of this package
	=========================

README
	This file.

COPYING
	GNU GPL Version 2. This package is copyrighted by CERN and
	released as free software.

Makefile
	Used to compile the various drivers. You should set LINUX
	in your environment or in the command line of "make".

wr_vic/
wr_minic/
	The directories host original work by Tomasz, copied here from svn.

patches/
	The directory hosts the kernel patches, split by kernel versions.
	I have a git tree for that, and the patches here have been
	spit out by "git format-patch". See a later section about git.

nic/
	This is the new driver, for the new logic design.


	Compiling the kernel
	====================

To compile the kernel, you need to retrieve the pristine sources for
2.6.35 and apply the patches for the switch. You can do that using git
or with old-style tar+patch. See the subsection about how to get
the sources.

Once you have the wrswitch kernel, you should cd to its main directory
and compile in this way. Note that the CROSS_COMPILE prefix may be the
one you built using buildroot or more or less any other cross-gcc. The
CROSS_COMPILE variable must end with the hyphen tha appears before "gcc"
in the name of the actual compiler.

   export ARCH=arm
   export CROSS_COMPILE=/path/to/cross/arm-linux-
   make wrswitchv2_defconfig
   make uImage

Finally, copy the uImage to your tftp server directory, as the
boot-loader in the switch is preconfigured to get a file called
"uImage" from your tftp server.

   cp arch/arm/boot/uImage /tftpboot

	Using git
	---------

If you use git, you are expected to already have some copy of Linus'
official tree. Let's say it's in /usr/src/linux-vanilla.git .  In that
case, you should first check out 2.6.35 and then fetch the wrswitch
branch. The git tree where I have the stuff is
	git://gnudd.com/linux-wrswitchv2/

What follows is one possible way, adding branches to the vanilla
tree. (I use different names for the various items to help the
non-expert git user in differentiatine them, a cleaner approach would
be using "wrswtichv2" for all items in the different ocntexts).

   cd /usr/src/linux-vanilla.git
   git remote add gnudd git://gnudd.com/linux-wrswitchv2/
   git fetch gnudd
   git checkout -b wr-kernel gnudd/wrswitch2-dev

Af this point, you checkout is a new branch that corresponds to the
"wrswitch2-dev" branch on my gnudd server.

Another option is creating a different checkout that uses data from
the Linus tree you already have on your system. (Strictly speaking,
you can avoid creating the "linus" remote to fetch it, but I feel this
is clearer).

   export GIT_ALTERNATE_OBJECT_DIRECTORIES=/usr/src/linux-vanilla.git/objects
   mkdir /usr/src/linux-wr
   cd /usr/src/linux-wr
   git init
   git remote add linus /usr/src/linux-vanilla.git/objects
   git remote add gnudd git://gnudd.com/linux-wrswitchv2/
   git fetch linus
   git fetch gnudd
   git checkout -b wr-kernel gnudd/wrswitch2-dev

Please note that if you don't have a local "Linus" tree first, your
fetch from gnudd will take several hours. You should first fetch from
a mainstream server the official kernel to make this operation fast.

To make the "GIT_ALTERNATE_OBJECT_DIRECTORIES" setting persistent, you
can save it to local repository:

  echo /usr/src/linux-vanilla/objects > .git/objects/info/alternates

	Using tar and patch
	-------------------

If you are not a git user, you might apply the patches, with this
procedure, using your national mirror instead of ch.kernel.org.
Let's assume your starting current directory is the one where this
README lives.

   DOCDIR=$(/bin/pwd)
   cd /usr/src/linux-wr
   wget ftp://ftp.ch.kernel.org/pub/linux/kernel/v2.6/linux-2.6.35.tar.bz2
   tar xjf linux-2.6.35.tar.bz2
   mv linux-2.6.35/* linux-2.6.35/.??* .
   rmdir linux-2.6.35
   for n in in $DOCDIR/patches/2.6.35/*; do cat $n | patch -p1; done


	Compiling the modules
	=====================

To compile the drivers please run "make", after setting up
the proper environment variables:

    LINUX
         should point to the kernel directory. For example,
         export LINUX=/usr/src/linux-wr
    CROSS_COMPILE
         should be the same prefix you used to cross-compile the
         kernel. If CROSS_COMPILE_ARM is set, it is used as a
         default (the name CROSS_COMPILE_ARM is used in wrdev2 scripts)
    ARCH
         should be "arm", but the Makefile set it if not defined.

With the variables in place, after "make" you'll have a few kernel
modules, with extension ".ko", that should be copied to the target
system and loaded. Let's assume the target is T=192.168.1.23

    scp $(find . -name '*.ko') root@$T:/wr/lib/modules

The previous command assumes you either know the root password of your
private key is authorized in the target system. The latter happens if
you build the filesystem using wrdev2, which copies your public key to
the target.

	Integration with wrdev2
	=======================

Tomasz released some scripts, as a standalong "wrdev2.tar.gz" package
and available in the White Rabbit svn under "build_scripts". The svn
version is better as the ramdisk is made using initramfs rather then
ext2.gz.

This code is replacing part of that material with different
procedures, and integration is currently non-existent.

You are expected to build the switch system using the other script-set
and then replace the kernel and modules with what is available here.
Over time I plan to integrate better, and possibly replace wrdev2 by
bringing in here all the good material that is found there.