Milestone 0: Familiarisation
This is a simple exercise designed to get you started on L4. It
contains very detailed instructions, together with the existing
source code and the L4 manual you should have no problem doing
Most of the 9242 binaries (eg. cross compilers) are in /home/disy/crossdev/$ARCH/bin. You can add this to your path with:
~ % export PATH=$PATH:/home/disy/crossdev/$ARCH/bin
If you are lazy you can just use the 9242 command for the cs9242 shell:
~ % 9242
newclass starting new subshell for class COMP9242...
~ % mips64-elf-ld
mips64-elf-ld: no input files
Building the L4 Kernel
Building the L4 User Code (libl4, sigma0)
Patch libio for a print.cc that is compatible
with gcc-3.2. Using this
copy it over pistachio-0.4/user/lib/io/print.cc
~ % mv print.cc ~/cs9242/pistachio-0.4/user/lib/io
Patch elfloader with a linker.lds and
main.cc to work with the 8mb U4600 boxes.
Using this linker.lds,
copy it over
Using this main.cc, copy
~ % mv main.cc linker.lds ~/cs9242/pistachio-0.4/user/contrib/elf-loader/platform/u4600
Create a u4600-user build directory in pistachio. Make sure the --with-kerneldir path is correct for your setup.
~ % cd ~/cs9242/pistachio-0.4/build
~/cs9242/pistachio-0.4/build % mkdir u4600-user
~/cs9242/pistachio-0.4/build % cd u4600-user
~/cs9242/pistachio-0.4/build/u4600-user % ../../user/configure --host=mips64 --with-kerneldir=~/cs9242/pistachio-0.4/build/u4600-kernel/
~/cs9242/pistachio-0.4/build/u4600-user % make
You should now be able to boot the pingpong test program.
~/cs9242/pistachio-0.4/build/u4600-user % cp contrib/elf-loader/mips64-loader /tftpboot/kernel.img
then on the u4600 prompt do the following (see the Asyst lab notes or using sulima, for further information):
Loading file: 22.214.171.124:kernel.img (elf)
0x80400000/456152 + 55 syms/
Entry address is 80401c38
and see some output and the pingpong program.
- Get yourself a copy of the
- Build and run the sample code.
tar zxvf sos04.tar.gz
- Edit Makefile to make sure the paths are sane, in particular the L4ROOT and L4BUILDDIR variables.
- This should create
- The example skeleton operating system includes an
tty_test which starts up, prints out
its thread id, and then goes into a loop.
- The example includes a
that outputs data to L4's debug console. In fact it uses the
function. This function should only be used for internal SOS
debugging, not as a console for applications, so, your task is
to modify the
printf function to send data to the
other serial port.
The second part of milestone zero is to find a partner for the
rest of the project. The project is to be completed unless prior
permission has been obtained from the LiC.
The initial supplied code has some bugs in it. Patches for these
can be found at this page.
Don't forget to uncomment the harware_init call in
- Read (and understand) the code in
and the code in the
- Read the documentation on libserial.
- Design an IPC protocol to transfer data from the user
program to your operating system.
- Write a client side implementation called
tty_send_string (or similar) in
- Change the
to handle recognise your new protocol, and print out a debug
message when you receive one of these messages.
tty_test.c so that it tests your
- Change the server side so that it now prints the data to the
- Change the implementation of
printf to use your
- Test that all of
tty_test's output now goes to
the second serial line, not the console debugger.
You will need to demonstrate applications printing to the 2nd
console, running on the U4600 hardware to the tutor during the
demonstration period. You should be prepared to show your tutor
which files you modified in your solution, and explain any
design decisions you made.
You will let the tutor know who your partner is so that group
accounts can be created for you.
05 Dec 2004.