GETTING_STARTED
Barret Rhoden

Last thorough update: 2013-02-07


1. Overview
---------------------
In this document, I outline what steps I go through to set up my development
environment.  Some devs use other setups, and they can put sections farther
down in this document describing their steps.

Due to the nature of different workflows and different Linux distros, you'll
need to do some configuration of your environment.  Things won't magically work
out of the box.


2. Need help?
---------------------
First off, if you get stuck, email someone.  You can join our mailing list by
sending an email to akaros-request@lists.eecs.berkeley.edu.  Send your messages
to akaros@lists.eecs.berkeley.edu.  Or just email me (brho@cs), though the
mailing list is a more scalable method in the long run.

Alternatively, you can poke your head in #akaros on irc.freenode.net.  I'm
usually idling in there (alone), and if I'm at my computer, I'll respond.


3. From Download to Hello World
---------------------
I'll describe how to get x86 working.  RISCV is similar.

The first step is to configure the kernel.  config, menuconfig, and some of the
other KBuild targets work.  Defconfig gives you a default configuration.  For
example, to config for 64-bit x86:

$ make ARCH=x86 defconfig

Alternatively, you can run menuconfig to customize what settings you want:

$ make ARCH=x86 menuconfig

For x86, you can choose between 32 and 64 bit when you make menuconfig.  This
selection must match your cross compiler make command.  The default is 64 bit.

There are a lot of other settings when you make config, and you should browse
through to decide what you want to enable/disable.

Most everyone wants KFS turned on (Filesystems --> KFS filesystem).  This is
the in-memory filesystem that the kernel uses.  The kernel build scripts will
look at the "KFS/Initramfs paths" string and take any of those directories and
add them to a CPIO archive that will eventually become the root filesystem when
Akaros runs. These settings are set by default when you do a 'make defconfig'.

There are also settings for ext2.  If you turn on ext2 support, you need to
point to an img file that has been formatted with ext2 and has files in it.  If
you aren't messing with filesystems at all, feel free to ignore this.  It's an
in-memory filesystem, like KFS (linked to the end of the kernel), so you won't
gain much by using it for now.

3.1 Cross compiler (and glibc)
----------
The second step is to build the cross compiler, which lives in
tools/compilers/gcc-glibc

$ cd tools/compilers/gcc-glibc

In this directory, you first need to set up your Makelocal file.  There is a
template to work from.

$ cp Makelocal.template Makelocal

You need to set your INSTDIRS to some place where you want the cross compiler
installed.  I have a directory named ros-gcc-glibc for this.

You also need to add bin directories to your PATH where the cross compiler will
be installed.  This will vary based on your value for INSTDIRS.  For instance,
my path contains:

/home/brho/classes/ros/ros-gcc-glibc/install-x86_64-ros-gcc/bin

	and

/home/brho/classes/ros/ros-gcc-glibc/install-i686-ros-gcc/bin

You can also set up MAKE_JOBS, so you don't over or under load your system when
building.  I have a 2 core laptop, so I use MAKE_JOBS := 3

At this point, you can build (for example):

$ make x86_64

This might take a while (10-20 minutes for me on a 2007 era laptop).

Just to double check everything installed correctly, you should be able to run
x86_64-ros-gcc from your shell.

Now, you have a cross compiler ready, and you can start to build Akaros.

3.2 Kernel
----------
cd back into the repo root.

Like the cross compiler, the kernel has its own Makelocal.

$ cp Makelocal.template Makelocal

This file is used to set up custom make targets that are not part of the
default Makefile, but fit nicely into your personal workflow. This file is not
under version control and can me made to contain just about anything.

Now you're ready to build the kernel:

$ make

So the kernel built, but you can't do much with it, and you probably have no
programs.

Notice that we didn't have to set the ARCH variable this time.  The make system
knows what architecture we are set up for and will always build for that
architecture until a new ARCh is selected (i.e. via 'make ARCH=xxx defconfig'
etc.)

3.3 Userspace
---------
To build userspace and test programs:

$ make tests

You now have programs and libraries, and need to put them in KFS.  To do this,
we provide a 'fill-kfs' make target. 

$ make fill-kfs

The 'fill-kfs' target copies your cross compiler's shared libraries and all
test binaries into the first "KFS/Initramfs path" you set during configuration
(or kern/kfs/lib if you just kept the default).

Now that you've changed the contents of KFS's source, remake the kernel.  You
should see something like
	Building initramfs:
		Adding kern/kfs to initramfs...
before the kernel links.  If you don't see this, then you probably didn't
actually fill KFS properly.

3.4 Busybox
---------
Busybox provides our shell and some basic utilities.  You almost certainly want
to build and install busybox.

Userspace programs like busybox need to be compiled with the cross compiler and
then have their binaries copied to kern/kfs/bin.  Since most everyone wants
busybox and we have a few patches of our own, we have support for automatically
building and installing it to KFS.

For the default build (x86_64):

$ cd tools/apps/busybox
$ make [x86_64|riscv]
$ cd -

And you should be set.  Check kfs to make sure everything installed.  You
should get sane results from:

$ ls -l kern/kfs/bin | grep cat
lrwxrwxrwx 1 brho brho       7 Jan 23 09:19 cat -> busybox

You can customize your busybox installation, including the install prefix, the
.config file, and make jobs.  Check out the makefile in tools/apps/busybox for
details.

Now that you've changed KFS, don't forget to remake the kernel.

3.5 Building and Loading a Virtual Machine Image
---------
At this point, you probably have a runnable kernel with programs in KFS.  It
should be sitting at obj/kernel/akaros-kernel.  When running in a VM, you can
either run the kernel directly from qemu, or put it in a virtual machine image
file. 

If you don't want to bother with the image, skip this section.  I tend to run
my images off an image file, since qemu acts more like hardware (as far as
multiboot goes).  The downside is the boot up is slower, especially if you have
a large kernel (>100MB).  It also takes some effort to set up the VM image.

If you are still reading, you'll need an image file that looks like a hard disk
to boot qemu off of.  I put one similar to mine at:
http://akaros.cs.berkeley.edu/files/hdd268mb.img

It's around 268MB (256MiB, or whatever).  If you want to make your own, check
out Documentation/howtos/make-bootable-grub-hdd.txt.  That's actually the
original document I made back when I first figured it out back in 2009, which
has been updated again in 2013.    In between, I wrote it up online at
http://www.omninerd.com/articles/Installing_GRUB_on_a_Hard_Disk_Image_File,
which has some other tidbits in the comments.  Both methods still use grub1.

Anyway, I put that img in AKAROS-ROOT/mnt/, and make a folder next to it:
AKAROS-ROOT/mnt/hdd.  mnt/hdd is the mount point where I mount hdd.img (Note I
don't call it hdd64mb.img on my dev machine).

Personally, I always have hdd.img mounted.  Some of the other devs have make
targets that mount and umount it.  Whenever I reboot my development machine, I
run a script (as root) that mounts the image file and sets up a few things for
networking.  I put a script I use for this in scripts/kvm-up.sh.  You'll likely
want to copy it to the directory *above* the akaros root directory and edit it
accordingly. Feel free to comment out the networking stuff.  That's for using
networking in qemu.

Now that your image file is mounted at mnt/hdd, you'll want to copy your
freshly built kernel to the root of the image.  I have a make target in my
makelocal for this, so that whenever I do a make kvm, it builds the kernel and
copies it to my hdd.img.

I added edited versions of my KVM (and USB) make targets to the
Makelocal.template.  Uncomment the KVM one (at least).

Incidentally, I also have the following in my Makelocal, so that make (and make
all) also make kvm:

all: kvm

Now, make kvm.  You should be able to see the new kernel in mnt/hdd/ (do an ls
-l and check the timestamp).

3.6 Running Qemu
---------
Here is the command I use to run qemu/kvm.  It's evolved over the years, and it
will vary based on your linux distribution.  Don't run it just yet:

$ qemu-system-i386 -s -enable-kvm -cpu phenom -smp 8 -m 2048 -nographic -monitor /dev/pts/3 -net nic,model=e1000 -net tap,ifname=tap0,script=no mnt/hdd.img

If you skipped making a virtual machine image, replace "mnt/hdd.img" with
"-kernel obj/kern/akaros-kernel".

The -monitor is the qemu monitor, which is a CLI for qemu.  Pick a
tab/terminal/pty in Linux that you will only use for qemu monitoring, and enter
'tty'.  Whatever it tells you, put in place of /dev/pts/3.  I've been using the
same tab for about 4 years now.  In that tab, enter 'sleep 999999999'.  Qemu
will still access it, but you won't have to worry about bash trying to handle
your inputs.

-nographic allows qemu to work in the terminal you run qemu from, instead of
spawning off a fake cpu crt/monitor.

If you don't have networking set up (including the tun/tap stuff from
kvm-up.sh), remove the -net commands/options.

Fell free to pick different values for the number of cpus and RAM (8 and 1024
in the example).

Once you finally run it, you can stop the VM by entering 'q' to the qemu
monitor (or just killing the process)..  Other help commands from the monitor
include 'info cpus', 'info registers', 'x', and 'help'.


3.7 Running on Hardware
---------
I have a few bootable USB sticks with grub set up to run Akaros.  The make usb
target (example in Makelocal.template) will copy freshly made kernels to your
USB device.  You'll need to adjust those paths according to your distro.  My
usb sticks are usually /dev/sdc, for instance (some odd USB device in the last
couple of years has taken over /dev/sdb.  Probably something to do with udev
changing over the years).

Anyway, you'll need to mess around a bit to get that working.  Or I can dd one
for you (I have 4GB disks in my office that I use).  If you make your own, the
critical part is getting grub to pick the right device (from what I remember),
and its fairly similar to installing grub on any old hard drive (since it's
just a bloc device).  Much easier than a hard disk image file.


3.8 Hello World
---------
So now you can run the kernel.  It's time to edit a program (or make your own).
In this, I'll go through my workflow for making changes.

$ vi tests/hello.c
(edit, save)

$ make tests
(new version in obj/tests/hello)

$ make fill-kfs
(updates kfs)

$ make
(rebuilds kernel with the new KFS)

$ qemu...

(following commands are in Akaros)
Shift-G (to get to the kernel monitor)

ROS(Core 0)> bb (to run busybox)

/ $ hello
(Should print your message)


3.9 Other Dev Workflow stuff
---------
One thing to note is that while we use dynamic linking for libc, parlib
libraries are statically linked with applications.  In fact, nowadays *all*
Akaros programs need to be linked againt parlib (used to be that single-core
processes (SCPs) didn't need it).

The makefiles won't notice if you change a file in parlib and then remake a
binary.  So if you edit user/parlib/uthread.c for example, tests/pthread_test
won't get rebuilt.  Here's what I do:

$ vi user/parlib/uthread.c (make awesome change)

$ touch tests/pthread_test.c ; make tests

This will force the rebuild of pthread_test.  Older, untouched binaries (e.g.
block_test), won't get rebuilt.  I actually want this in some cases (different
versions of parlib when I'm running certain tests).  Anyway, just pay attention
to what you're building.  There's not much output in the console, so you should
be able to see what's going on all the time.  (unlike when building glibc...).

Oh, and don't forget to:

$ make fill-kfs

to make sure you run the new pthread_test. 

Additionally, when switching between 32 and 64 bit x86, make objclean before
filling KFS.  This is the easiest way to make sure you get the appropriate
libraries loaded in KFS.

Early on as a dev, there are lots of times where you accidentally don't run the
right program (or kernel) and won't understand why your change isn't happening.
A few printk("WTF\n")'s later, you realize you didn't have the hdd.img mounted,
or you didn't fill KFS, or you didn't relink your binaries, or you forgot to
save all files in vi (and not just the current buffer).  But after doing a
couple hello worlds, you're set. 

Alternatively, you could have a make target to run qemu, which also touches all
binaries (or otherwise enforces a rebuild), auto-fills KFS, remakes the kernel,
and mounts/copies/unmounts your hdd.img.  Kevin's sim repo has stuff like this,
so check it out if that's what you're into.  (I think it is at
http://akaros.cs.berkeley.edu/ros-sim.tar.gz).  Personally, I'm not that into
it, since I like to keep track of what is going on under the hood, esp if I
want to do something a little differently (like with testing ext2, having
different versions of parlib with some binaries, or being picky about my
mount/umounts).


4. RISCV
---------------------
TODO.

For now, you need a 64 bit distro to build the RISCV stuff, so I don't do it
very often.  I'll eventually sync up with Andrew and we'll get this part sorted
out.


5. Other Developer's Stuff
---------------------
