L4hq.org
Home of the L4 community
         Home )   About L4hq )  
 
 

Mips64 Architecture

© 2002-2003 University of New South Wales
page maintained by Carl van Schaik (cvansch@cse.unsw.edu.au)

Supported Kernels

The L4Ka::Pistachio kernel offers support for the Mips64 architecture. See l4ka.org for more information about L4Ka::Pistachio.
The Mips64 port currently runs on four platforms:
U4600 - The University of New South Wales' 64-bit experimentation hardware
  • IDT R4700 - R4000 based, 64-bit big-endian
OpenFuel Embedded Realtime Parallel Computing Node (erpcn01)
  • IDT 79RC64574 - R5000 based, 64-bit little-endian
Broadcom Sibyte SB1 (SMP support)
  • BCM1250 dual SB-1 MIPS64 core, 64-bit big-endian
Agenda VR3 PDA
  • NEC VR4181 - R4000 based, 64-bit little-endian. Yes 64-bit!
Porting the Mips64 architecture to new platforms is fairly simple, the port to the Agenda VR3 was done in a day and a half :-)

The Mips64 kernel also works on the Sulima simulator.

Getting Started

This is a simple guide on how to get L4Ka::Pistachio compiled for Mips64

1. Get a recent copy of L4Ka::Pistachio

Either get a released version or download the latest public release from CVS. See here for details

2. Setup a development environment

You will need a Mips64 GCC compiler. You can build a cross-compiler if you are using an x86/other development machine. You will need at least a mips64-elf version of binutils and gcc with C++ support.

Put the L4Ka::Pistachio sources in a development directory.eg: /home/dev/l4/pistachio The useful directories are shown below:

kernel/  L4 Kernel directory
kernel/src/  Kernel source code
kernel/src/api/v4/  Kernel generic API
kernel/src/glue/v4-xxx/ Architecuture API support
kernel/src/arch/xxx/  Architecuture specific code
kernel/include/  Kernel include headers
kernel/kdb/  Kernel debugger
user/  L4 User Libraries and Applications
user/include/  User code kernel interface headers
user/serv/  Example servers
user/apps/  Example applications
user/contib/elf-loader  Bootloader for mips64/arm/alpha/sparc64

3. Compile the kernel

  • change to the kernel source directory.
    • # cd /home/dev/l4/pistachio/kernel
  • generate a kernel build directory. (Remember to use the FULL path) it is important to create a separate build directory. You can create one or more for each architecture/platform
    • # cd /home/dev/l4/pistachio/kernel # make BUILDDIR=/home/dev/l4/build-mips64/kernel
  • change to the compiler directory and run "make menuconfig"
    • # make BUILDDIR=/home/dev/l4/build-mips64/kernel
    • # cd /home/dev/l4/build-mips64/kernel
    • # make menuconfig
      1. goto Hardware->Basic_Architecture and choose MIPS-64
      2. goto Hardware->Processor_Type and choose the CPU you want to use
      3. next, choose the platform and set any Miscellaneous you require
      4. goto the Kernel menu and you probably want to Enable Debugging mode
      5. in the Debugger menu, enable the debugger and enable all Trace Settings
      6. it is well advised to enable Kernel Debugger breakin
      7. Press 'x' to save your options
  • If your compiler is not one of: "mips64-elf-gcc" or "mips64-linux-gcc", then you will need to export "TOOLPREFIX" so the build process can find your compiler.
    • eg: export TOOLPREFIX=mips64-l4-elf-
    And remember to keep your compiler in the path
  • If all goes well, you can simply run 'make'

4. Compile the user code

  • If you are using the CVS tree, you may need to recreate the configure script. In the user source directory [eg /home/dev/l4/pistachio/user] run:
    note, you need autoheader and autoconf verion 2.50
        # rm configure
        # autoheader
        # autoconf
        
  • Create a user build directory.
    • eg: [/home/dev/l4/build-mips64/user]
  • Run configure from the user build directory
    • eg: # ../../pistachio/user/configure --host=mips64-u4600 --with-kerneldir=/home/dev/l4/build/kernel
    • append gcc_prefix=xxx if your compiler is not named mips64-elf-xxx, eg: gcc_prefix=mips64-l4-

5. Boot

Many MIPS based platforms have a boot loader of some form. PMON is a common one, the example below is for the U4600 which has PMON with network support.

  • Copy the mips64-loader in the [contrib/elf-loader] directory of your user build tree to /tftpboot
  • Make sure you have a tftp server running
  • Set the PMON environment variables, ip_addr etc to the correct values
  • type 'boot net'

The kernel should boot and run a basic test application

Alternatvely if you are using Sulima you can boot your kernel with:

# /home/sulima/u4600 mips64-loader

A contribution to the L4 community from the UNSW/NICTA team.