Getting Started with the MVME2600 and MVME2300 running Linux
 Ben Sapp
September 12, 2000

Setting up hardware/firmware
Before you can boot with any of these methods there are a few things you will need to take care of first.  You will need to set the jumpers to boot from the Flash that has the PPCbug image on it.   It seems that most boards come from PREP set up to boot VxWorks.    If you connect your serial cable to the board and see any mention of VxWorks, you need to set the jumper to boot from the other Flash bank.   On the boards that I have recieved from PREP they were all set to boot from bank A,  which was VxWorks.   When I switched them to bank B, I was able to boot with PPCbug. There are two environment parameters that must be set in NVRAM before you can try to boot Linux.  First, the option 'Network PReP-Boot Mode Enable' must be set to yes.   This sets up the memory model the way that Linux expects it.    Second,  the option 'VME3PCI Master Master Enable' enable must be set to no.  I do not know why this needs to be done other than it will not work if it is set to yes.    These environment parameters can all be set with the env command from the PPCbug prompt.   I have provided a couple of examples of what our environments look like on boards that boot Linux.

This example is from an MVME2603  with a SCSI disk attached  with SCSI id 2.    It boots automatically from partition one on power-up or reset.   The parameters that allow it to boot automatically all begin with 'Auto Boot'



PPC1-Bug>env
Bug or System environment [B/S] = B?
Field Service Menu Enable [Y/N] = N?
Remote Start Method Switch [G/M/B/N] = B?
Probe System for Supported I/O Controllers [Y/N] = Y?
Auto-Initialize of NVRAM Header Enable [Y/N] = Y?
Network PReP-Boot Mode Enable [Y/N] = Y?
Negate VMEbus SYSFAIL* Always [Y/N] = N?
SCSI Bus Reset on Debugger Startup [Y/N]   = N?
Primary SCSI Bus Negotiations Type [A/S/N] = A?
Primary SCSI Data Bus Width [W/N]          = N?
Secondary SCSI Identifier                  = "07"?
NVRAM Bootlist (GEV.fw-boot-path) Boot Enable [Y/N]           = N?
NVRAM Bootlist (GEV.fw-boot-path) Boot at power-up only [Y/N] = N?
NVRAM Bootlist (GEV.fw-boot-path) Boot Abort Delay            = 5?
Auto Boot Enable [Y/N]           = Y?
Auto Boot at power-up only [Y/N] = N?
Auto Boot Scan Enable [Y/N]      = N?
Auto Boot Scan Device Type List  = FDISK/CDROM/TAPE/HDISK/?
Auto Boot Controller LUN   = 00?
Auto Boot Device LUN       = 20?
Auto Boot Partition Number = 01?
Auto Boot Abort Delay      = 7?
Auto Boot Default String [NULL for an empty string] = ?
ROM Boot Enable [Y/N]            = N?
ROM Boot at power-up only [Y/N]  = Y?
ROM Boot Enable search of VMEbus [Y/N] = N?
ROM Boot Abort Delay             = 5?
ROM Boot Direct Starting Address = FFF00000?
ROM Boot Direct Ending Address   = FFFFFFFC?
Network Auto Boot Enable [Y/N]           = N?
Network Auto Boot at power-up only [Y/N] = N?
Network Auto Boot Controller LUN = 00?
Network Auto Boot Device LUN     = 00?
Network Auto Boot Abort Delay    = 5?
Network Auto Boot Configuration Parameters Offset (NVRAM) = 00001000?
Memory Size Enable [Y/N]         = Y?
Memory Size Starting Address     = 00000000?
Memory Size Ending Address       = 02000000?
DRAM Speed in NANO Seconds       = 60?
ROM First Access Length (0 - 31) = 10?
ROM Next Access Length  (0 - 15) = 0?
DRAM Parity Enable [On-Detection/Always/Never - O/A/N]    = O?
L2Cache Parity Enable [On-Detection/Always/Never - O/A/N] = O?
PCI Interrupts Route Control Registers (PIRQ0/1/2/3) = 0A0B0E0F?
Serial Startup Code Master Enable [Y/N] = N?
Serial Startup Code LF Enable [Y/N] =     N?
VME3PCI Master Master Enable [Y/N] = N?
PCI Slave Image 0 Control                = 00000000?
PCI Slave Image 0 Base Address Register  = 00000000?
PCI Slave Image 0 Bound Address Register = 00000000?
PCI Slave Image 0 Translation Offset     = 00000000?
PCI Slave Image 1 Control                = C0820000?
PCI Slave Image 1 Base Address Register  = 01000000?
PCI Slave Image 1 Bound Address Register = 20000000?
PCI Slave Image 1 Translation Offset     = 00000000?
PCI Slave Image 2 Control                = C0410000?
PCI Slave Image 2 Base Address Register  = 20000000?
PCI Slave Image 2 Bound Address Register = 22000000?
PCI Slave Image 2 Translation Offset     = D0000000?
PCI Slave Image 3 Control                = C0400000?
PCI Slave Image 3 Base Address Register  = 2FFF0000?
PCI Slave Image 3 Bound Address Register = 30000000?
PCI Slave Image 3 Translation Offset     = D0000000?
VMEbus Slave Image 0 Control                = E0F20000?
VMEbus Slave Image 0 Base Address Register  = 00000000?
VMEbus Slave Image 0 Bound Address Register = 02000000?
VMEbus Slave Image 0 Translation Offset     = 80000000?
VMEbus Slave Image 1 Control                = 00000000?
VMEbus Slave Image 1 Base Address Register  = 00000000?
VMEbus Slave Image 1 Bound Address Register = 00000000?
VMEbus Slave Image 1 Translation Offset     = 00000000?
VMEbus Slave Image 2 Control                = 00000000?
VMEbus Slave Image 2 Base Address Register  = 00000000?
VMEbus Slave Image 2 Bound Address Register = 00000000?
VMEbus Slave Image 2 Translation Offset     = 00000000?
VMEbus Slave Image 3 Control                = 00000000?
VMEbus Slave Image 3 Base Address Register  = 00000000?
VMEbus Slave Image 3 Bound Address Register = 00000000?
VMEbus Slave Image 3 Translation Offset     = 00000000?
PCI Miscellaneous Register       = 10000000?
Special PCI Slave Image Register = 00000000?
Master Control Register          = 80C00000?
Miscellaneous Control Register   = 52060000?
User AM Codes                    = 00000000?

This example comes from an MVME2304 that boots over the network with bootp and tftp.  It can boot with NFS or ramdisk depending on what kernel it gets via bootp/tftp.   It also boots automatically on power-up or reset.   The parameters that allow it to boot correctly all begin with 'Network Auto Boot'.



PPC1-Bug>env
Bug or System environment [B/S] = B?
Field Service Menu Enable [Y/N] = N?
Remote Start Method Switch [G/M/B/N] = B?
Probe System for Supported I/O Controllers [Y/N] = Y?
Auto-Initialize of NVRAM Header Enable [Y/N] = Y?
Network PReP-Boot Mode Enable [Y/N] = Y?
Negate VMEbus SYSFAIL* Always [Y/N] = N?
SCSI Bus Reset on Debugger Startup [Y/N]   = N?
Primary SCSI Bus Negotiations Type [A/S/N] = A?
Primary SCSI Data Bus Width [W/N]          = N?
Secondary SCSI Identifier                  = "07"?
NVRAM Bootlist (GEV.fw-boot-path) Boot Enable [Y/N]           = N?
NVRAM Bootlist (GEV.fw-boot-path) Boot at power-up only [Y/N] = N?
NVRAM Bootlist (GEV.fw-boot-path) Boot Abort Delay            = 5?
Auto Boot Enable [Y/N]           = N?
Auto Boot at power-up only [Y/N] = N?
Auto Boot Scan Enable [Y/N]      = Y?
Auto Boot Scan Device Type List  = FDISK/CDROM/TAPE/HDISK/?
Auto Boot Controller LUN   = 00?
Auto Boot Device LUN       = 00?
Auto Boot Partition Number = 00?
Auto Boot Abort Delay      = 7?
Auto Boot Default String [NULL for an empty string] = ?
ROM Boot Enable [Y/N]            = N?
ROM Boot at power-up only [Y/N]  = Y?
ROM Boot Enable search of VMEbus [Y/N] = N?
ROM Boot Abort Delay             = 5?
ROM Boot Direct Starting Address = FFF00000?
ROM Boot Direct Ending Address   = FFFFFFFC?
Network Auto Boot Enable [Y/N]           = Y?
Network Auto Boot at power-up only [Y/N] = N?
Network Auto Boot Controller LUN = 00?
Network Auto Boot Device LUN     = 00?
Network Auto Boot Abort Delay    = 5?
Network Auto Boot Configuration Parameters Offset (NVRAM) = 00001000?
Memory Size Enable [Y/N]         = Y?
Memory Size Starting Address     = 00000000?
Memory Size Ending Address       = 02000000?
DRAM Speed in NANO Seconds (0=AUTO) = 60?
ROM First Access Length (0 - 31) = 10?
ROM Next Access Length  (0 - 15) = 0?
DRAM Parity Enable [On-Detection/Always/Never - O/A/N]    = O?
L2Cache Parity Enable [On-Detection/Always/Never - O/A/N] = O?
PCI Interrupts Route Control Registers (PIRQ0/1/2/3) = 0A0B0E0F?
Serial Startup Code Master Enable [Y/N] = N?
Serial Startup Code LF Enable [Y/N] =     N?
VME3PCI Master Master Enable [Y/N] = N?
PCI Slave Image 0 Control                = 00000000?
PCI Slave Image 0 Base Address Register  = 00000000?
PCI Slave Image 0 Bound Address Register = 00000000?
PCI Slave Image 0 Translation Offset     = 00000000?
PCI Slave Image 1 Control                = C0820000?
PCI Slave Image 1 Base Address Register  = 01000000?
PCI Slave Image 1 Bound Address Register = 20000000?
PCI Slave Image 1 Translation Offset     = 00000000?
PCI Slave Image 2 Control                = C0410000?
PCI Slave Image 2 Base Address Register  = 20000000?
PCI Slave Image 2 Bound Address Register = 22000000?
PCI Slave Image 2 Translation Offset     = D0000000?
PCI Slave Image 3 Control                = C0400000?
PCI Slave Image 3 Base Address Register  = 2FFF0000?
PCI Slave Image 3 Bound Address Register = 30000000?
PCI Slave Image 3 Translation Offset     = D0000000?
VMEbus Slave Image 0 Control                = E0F20000?
VMEbus Slave Image 0 Base Address Register  = 00000000?
VMEbus Slave Image 0 Bound Address Register = 02000000?
VMEbus Slave Image 0 Translation Offset     = 80000000?
VMEbus Slave Image 1 Control                = 00000000?
VMEbus Slave Image 1 Base Address Register  = 00000000?
VMEbus Slave Image 1 Bound Address Register = 00000000?
VMEbus Slave Image 1 Translation Offset     = 00000000?
VMEbus Slave Image 2 Control                = 00000000?
VMEbus Slave Image 2 Base Address Register  = 00000000?
VMEbus Slave Image 2 Bound Address Register = 00000000?
VMEbus Slave Image 2 Translation Offset     = 00000000?
VMEbus Slave Image 3 Control                = 00000000?
VMEbus Slave Image 3 Base Address Register  = 00000000?
VMEbus Slave Image 3 Bound Address Register = 00000000?
VMEbus Slave Image 3 Translation Offset     = 00000000?
VMEbus Register Access Image Control Register = 00000000?
VMEbus Register Access Image Base Address Register = 00000000?
PCI Miscellaneous Register       = 10000000?
Special PCI Slave Image Register = 00000000?
Master Control Register          = 80C00000?
Miscellaneous Control Register   = 52060000?
User AM Codes                    = 00000000?
Firmware Command Buffer Enable [Y/N] = N?
Firmware Command Buffer Delay  = 5?
Firmware Command Buffer :
['NULL' terminates entry]?

Booting from disk
I suggest that you start with a root file system already.   I would suggest using Don Holmgren's, located at  ftp://linux-rep.fnal.gov/pub/vmestuff/nfsroot.djh.tgz .   You are welcome to use mine if you wish at  ftp://www.neutrino.lanl.gov/pub/bsapp/nfsroot.tar.gz.  I suggest Don's rather than mine because in my root file system login does not work.   I have not bothered to track down the problem because I only boot to single user mode.  Thus I do not ever have to use login.    However,  Don's file system is an older version of the linuxppc and does not have posix counting semaphores.  So, if you need posix counting semaphores, as I do, you should use my root file system.     Once you decide on what file system you want to use you will need to partition a disk.  Attach the SCSI disk you plan on using to a working Linux system.   Below is a reply Don Holmgren sent Eric Church and me when asked about this problem.  This worked perfectly for me.



Life is a bit easier with disks.  You shouldn't have to fool with any ENV
parameters.  Do use IOI just to make sure your board sees the disk drive,
and note the LUN (which is SCSI ID * 10).

Then, to boot Linux, "just" use (for example)
  pboot 0 40 1
where 40 is the LUN (my drive is at SCSI ID 40) and 1 is the partition
with a prepboot image.

The "just" is because you'll have to get a prepboot image written to
partition 1.  Here's what to do:

1. Attach the disk to a Linux system.  Use your favorite partitioning tool
   (fdisk or cfdisk) to write a partition table.  One small partition
   should be set aside to be the prepboot partition.  Mark this partition
   as type 41 - in cfdisk that's translated to "PowerPC".  Most fdisk's
   don't understand type 41, but I think they'll let you use that number.

   Here's my partition table:
                                            cfdisk 0.8i

                                        Disk Drive: /dev/sda
                        Heads: 200   Sectors per Track: 62   Cylinders: 1020

     Name           Flags            Part Type      FS Type    Size (MB)
     ----------------------------------------------------------------------
     /dev/sda1                       Primary        PowerPC        6.06
     /dev/sda2                       Primary        Linux Swap   127.15
     /dev/sda3                       Primary        Linux       4099.03
     /dev/sda4                       Primary        Linux       1943.56

   You'll need only a few megabytes for the prepboot partition.  On my
   disk the geometry translates into 6.06 MB/cylinder.  You'll want a swap
   partition, and one or more partitions for the OS.  I used the 4+ GB
   partitition for the OS, and the ~ 2 GB partition to bootstrap the
   install (you don't want to know, trust me).

2. Run mke2fs on your OS partition.  Mount it.  Explode the filesystem I
   gave you onto that partition.

3. In /boot I think you'll find a bunch of kernels.  I trust zImage-bpa
   the most, I think.  Use dd to write your kernel to your prepboot
   partition:
      dd if=/mnt/ppcimage/boot/zImage-bpa of=/dev/sdx1
   (where /mnt/ppcimage is where you've mounted the OS partition, and
   /dev/sdx1 is the device name of the prepboot partition, as in
   /dev/sda1).

4. Dismount the OS partition and disconnect the drive.  Connect up to your
   712 transition module.

5. Use 'pboot 0 40 1' (modify as necessary) to boot.  Check the 'root='
   setting on the boot parameter line and modify as necessary to match
   your partitioning.

That should do it.  There's nothing nice like LILO around to choose a
kernel (at least that I know of - let me know when you find something
better).

If you get stuck and pboot doesn't work, you can always use NBO to bring
in the kernel image from a server.

Good luck -

Don Holmgren


I have made some kernels available at  ftp://www.neutrino.lanl.gov/pub/bsapp  You can also use Don's at  ftp://linux-rep.fnal.gov/pub/vmestuff/zImage-bpa  There should be no problem with mixing and matching kernels and root file systems.   The only problem that I can see coming up is if you used my file system with Don's kernel.  Then when you see the 'Linux/PPC load: '  prompt you will have to be sure to type in 'single'   in order to go straght into single user mode.   Once you get pboot to work I would suggest setting up the environment paramters to boot automatically like we have your 2603 set up.

Booting from the network
Booting methods 1 and 2 are done with bootp and tftp.  So, you will need to set both of these up on a server.   It is suggested that the boot server and the MVME230X be on the same subnet.   Broadcasts related to bootp are not always forwarded by routers.  If the computers are not on the same subnet you will need to make sure that all routers in the network between the two machines forward bootp messages.  We use an Origin 200 running IRIX as our bootp/tftp server.   We have tftp set up to allow unrestricted access to any thing in the /ppctools/kernel directory.  I copy the kernel that I want the MVME2300s to boot from to /ppctools/kernel/boot/vmelinux.   In inetd.conf the tftp and bootp lines look like this:



tftp    dgram   udp     wait    guest   /usr/etc/tftpd  tftpd -l -s /ppctools/kernel /tftpboot/
bootp   dgram   udp     wait    root    /usr/etc/bootp          bootp

In IRIX the /etc/bootptab file tells bootp which MAC addresses to respond to and what the IP addresses should be.   It also tells bootp where the kernels can be found.  Our bootptab file looks like this:



#
# /usr/etc/bootptab:  config file for bootp server (/usr/etc/bootp)
#
# Blank lines and lines beginning with '#' are ignored.
#

# Root of boot subtree. If tftpd(1M) is running in "secure" mode,
# this directory must be specified on tftpd's entry in /usr/etc/inetd.conf.
/ppctools/kernel/boot

# end of first section

%%

#
# The remainder of this file contains one line per client interface
# with the information shown by the table headings below.
# The 'host' name is also tried as a suffix for the 'bootfile'
# when searching the home directory.  (e.g., bootfile.host)
#
# host          htype haddr             iaddr           bootfile
#

IRIS            1 01:02:03:8a:8b:8c     192.0.2.1       unix
lsndvx20        1 08:00:3E:27:C0:A9     128.165.53.144  vmelinux
lsndvx8         1 00:01:AF:00:EB:5E     128.165.53.180  vmelinux
lsndvx7         1 00:01:AF:00:51:8C     128.165.53.181  vmelinux
lsndvx9         1 00:01:AF:00:EB:6B     128.165.53.178  vmelinux


The hardware address(the third thing in each line) can be obtained from the ppcbug prompt with the command 'cnfg'.  For example, from lsndvx7:



PPC1-Bug>cnfg
Board (PWA) Serial Number = "4339458     "
Board Identifier          = "MVME2304-0123   "
Artwork (PWA) Identifier  = "01-W3345F42B    "
MPU Clock Speed           = "333"
BUS Clock Speed           = "067"
Ethernet Address          = 0001AF00518C
Primary SCSI Identifier   = "07"
System Serial Number      = "0000000000000000"
System Identifier         = "0000000000000000000000000000000"
License Identifier        = "4339458 0"

From this I took the 'Ethernet Address'  and seperated every two characters with colons and put that in /etc/bootptab as the hardware address.
You may or may not need to insert the colons like we did.   Once you think you have the board/environment and software set up correctly, you can try and boot with the PPCbug command 'nbo'.   This will send a broadcast bootp message that says "What is the IP address for a machine with my ethernet address".   Hopefully,  if all is set up correctly you will see something like this:



PPC1-Bug>nbo
Network Booting from: DEC21140, Controller 0, Device 0
Device Name: /pci@80000000/pci1011,9@e,0:0,0
Loading: /ppctools/kernel/boot/vmelinux

Client IP Address      = 128.165.53.181
Server IP Address      = 128.165.53.41
Gateway IP Address     = 128.165.53.41
Subnet IP Address Mask = 255.255.0.0
Boot File Name         = /ppctools/kernel/boot/vmelinux
Argument File Name     =

Network Boot File load in progress... To abort hit <BREAK>

Bytes Received =&1753744, Bytes Loaded =&1753744
Bytes/Second   =&103161, Elapsed Time =17 Second(s)


If you do see this you can be confident that tftp and bootp are working correctly on the server.   Right after the above you will see:



Residual-Data Located at: $01F88000

Model: 000000000000000000000000000(e2)
Serial: MOT0423702
Processor/Bus frequencies (Hz): 333372128/66675148
Time Base Divisor: 4000
Original MSR: 3040
Original HID0: 82
Original R31: 0

PCI: Probing PCI hardware
Configurable PCI resources:
  01dd6060:01dd61e0 000014 3c000000 00040000 0
  01dd61e0:01dd6270 006810 2ffef000 00001000 0
  01dd6270:01dd61f8 007014 2ffeef80 00000080 0
  01dd61f8:01dd6258 006814 0fffe000 00001000 1
  01dd6258:01dd6168 007010 0fffdf80 00000080 1
  01dd6168:01dd6180 005920 0fffffc0 00000010 1
  01dd6180:01dd6108 005924 0fffffb0 00000010 1
  01dd6108:01dd6138 005910 0ffffff0 00000008 1
  01dd6138:01dd6120 005918 0fffffe0 00000008 1
  01dd6120:01dd6150 005914 0fffffec 00000004 1
  01dd6150:01dd6048 00591c 0fffffdc 00000004 1
  01dd6048:00000000 000010 00000000 00000000 1
alloc_area called:
  PCI I/O areas:
    01dd62d0:01dd6288 01f8221c 00010000 00011fff
    01dd6288:00000000 00000000 00012000 007fffff
  PCI memory areas:
    01dd62a0:00000000 00000000 01000000 3cffffff
alloc_area called:
  PCI I/O areas:
    01dd62d0:01dd6288 01f8221c 00010000 00011fff
    01dd6288:00000000 00000000 00012000 007fffff
  PCI memory areas:
    01dd6300:01dd62a0 01f8221c 01000000 010fffff
    01dd62a0:00000000 00000000 01100000 3cffffff
Allocated PCI resources:
  01dd6060:01dd61e0 000014 01000000 00040000 0
  01dd61e0:01dd6270 006810 01040000 00001000 0
  01dd6270:01dd61f8 007014 01041000 00000080 0
  01dd61f8:01dd6258 006814 00010000 00001000 1
  01dd6258:01dd6168 007010 00011000 00000080 1
  01dd6168:01dd6180 005920 00011080 00000010 1
  01dd6180:01dd6108 005924 00011090 00000010 1
  01dd6108:01dd6138 005910 000110a0 00000008 1
  01dd6138:01dd6120 005918 000110a8 00000008 1
  01dd6120:01dd6150 005914 000110b0 00000004 1
  01dd6150:01dd6048 00591c 000110b4 00000004 1
  01dd6048:00000000 000010 00000000 00000000 1

Linux/PPC load: console=ttyS0 init=sh

Uncompressing the kernel...Kernel at 0x00000000, size=0x16ae0c
Initrd at 0x00243000, size=0x112039
Residual data at 0x0016b000
Command line at 0x00172000
done
Now booting...


This is the Linux PPC PReP bootloader.  It is written by Gabriel Paubert.  I'll touch on this more when I talk about building a kernel.  It simply sets things up for the kernel.  I have never had any problems with the bootloader.  My problems have always been with tftp/bootp  or the kernel.    A common problem I have had is that after the bootloader finishes I see nothing from the kernel.    There are a couple of causes for this.  One is that there is no 'console=ttyS0' on the 'Linux/PPC load:' command line.   The other is that I did not build console support into the kernel.

The output from a kernel with ramdisk is given below.   You should see something similar.



PReP architecture
Total memory = 32MB; using 128kB for hash table (at c0180000)
Linux version 2.2.9 (root@fcwork1.fnal.gov) (gcc version egcs-2.90.25 980302 (egcs-1.0.2 prerelease)) #18 Tue Dec 7 14:10:45 CST 1999
Boot arguments: console=ttyS0 init=sh
OpenPIC Version 1.3 (2 CPUs and 17 IRQ sources) at d1000000
OpenPIC timer frequency is 8334211 Hz
time_init: decrementer frequency = 1000005840/60 (15MHz)
Calibrating delay loop... 332.60 BogoMIPS
Memory: 29756k available (932k kernel code, 888k data, 92k init) [c0000000,c2000000]
POSIX conformance testing by UNIFIX
PCI: Probing PCI hardware
Setting PCI interrupts for a "MVME 2300"
Linux NET4.0 for Linux 2.2
Based upon Swansea University Computer Society NET3.039
NET4: Unix domain sockets 1.0 for Linux NET4.0.
NET4: Linux TCP/IP 1.0 for NET4.0
IP Protocols: ICMP, UDP, TCP, IGMP
Starting kswapd v 1.5
Serial driver version 4.27 with no serial options enabled
ttyS00 at 0x03f8 (irq = 4) is a 16550A
pty: 256 Unix98 ptys configured
RAM disk driver initialized:  16 RAM disks of 4096K size
scsi : 0 hosts.
scsi : detected total.
eth0: DC21140 at 0x11000 (PCI bus 0, device 14), h/w address 00:01:af:00:51:8c,
      and requires IRQ18 (provided by PCI BIOS).
de4x5.c:V0.544 1999/5/8 davies@maniac.ultranet.com
RAMDISK: Compressed image found at block 0
EXT2-fs warning: mounting unchecked fs, running e2fsck is recommended
VFS: Mounted root (ext2 filesystem).
bash#

I want to mention one problem we had when trying to boot an NFS filesystem.   Most of the computers on our network are Silicon Graphics workstations.   We have plenty of disk space on the workstations and thought we would use it as the NFS server.   It turns out that this can not be done.   As a matter of fact I do not think you can do this on any other system except Linux.    It has to do with device files not being made correctly.    Device files are not portable.

Building Your Own Kernel
Once you get some kernels built by myself or Don Holmgren booted, you will probably wish to make your own kernels.   I have built all my kernels for the MVME2300s with cross compilers.  At first I built my own cross-compilers using Matt Porter's  Cross Development for Linux/PPC  web page.   I no longer do this because there is alot of compiling required.(It is a big waste of time!!!)   If all goes well it will take you two days of baby-sitting the compilation process to get it working.  If things don't go perfectly it could easily take a week.    As a better alternative, you can download the Cross Development Kit  from Monta Vista Software and use that to build kernels.   You can also choose to build kernels natively.

  1. Download  kernel 2.2.9  and Gabriel Paubert's  generic  and  VME  patches.
  2. Unpack the kernel (tar -xzvf linux-2.2.9.tar.gz)
  3. cd linux
  4. patch -p1 < ../mvme2600.generic-patch-2.2.9
  5. patch -p1 < ../mvme2600.vme-patch-2.2.9
  6. Edit the top level Makefile.  If you are cross compiling you need to change the CROSS_COMPILE option to read 'CROSS_COMPILE   =powerpc-linux-' (with out the quotes)  Also you will need to change the 'ARCH :=' line to read 'ARCH = ppc'.
  7. INITRD: Edit arch/ppc/prepboot/Makefile.  Add a line near the top of the definitions like this:  'INITRD = initrd'
  8. INITRD: gunzip --stdout ../initrd.gz  > arch/ppc/prepboot/initrd
  9. INITRD:  cp ../initrd.config ./.config
  10. NFS:  cp ../nfs.config ./.config
  11. NFS:  edit arch/ppc/prepboot/misc.c  to reflect where you want to mount the NFS root from
  12. now type 'make xconfig' or 'make menuconfig' or 'make config'.
  13. make dep
  14. make clean
  15. gmake zImage
Now if every thing worked the kernel image should be located in arch/ppc/prepboot/zImage.   The Universe VME bus driver is located in drivers/vme.   During the NFS configuartaion I mention editing arch/ppc/prepboot/misc.c  to reflect where

Building Applications
The cross development kit works fine for kernels; however, I suggest you do not use it to build applications.  It may build the applications without any problems but there seems to be library incompatibilities with both my root file system and Don's.  The program might even run ... just incorrectly.  It is a real pain to track down.  I suggest using either a board with a local or NFS file system with native compilers.