# Running skiboot and Linux in Mambo

The POWER8 Functional Simulator (aka Mambo) is free to use but not
open source and is only supported on limited platforms.  This is a
guide to getting started guide with it with skiboot and linux.

## Getting Started

From a bare x86_64 Ubuntu 16.04 install, to running skiboot and linux
in the simulator, you can do do the following:

### Steps to get Running on Ubuntu
xterm is needed by the simulator.
```
apt-get install xterm
```

### Download mambo from IBM
Download systemsim-p8..deb from:
http://www-304.ibm.com/support/customercare/sas/f/pwrfs/home.html
```
dpkg -i systemsim-p8*deb
```

### Grab your skiboot, linux and initramfs images
How to build a skiboot.lid is in the top level README file.

Use a 64 bit powerpc kernel here. If compiling yourself, we suggest
using powernv_defconfig.

If you use op-build to build a full set of OpenPower images, you’ll
likely be able to extract skiboot, zImage.epapr (or vmlinux and
rootfs.cpio.xz) from output/images. We suggest using the
openpower_mambo_defconfig.

### Setup environment variables
Setup environment variables to point to your images
```
export SKIBOOT_ZIMAGE=$HOME/src/op-build/output/images/zImage.epapr
export SKIBOOT=$HOME/src/op-build/output/images/skiboot.lid
export SKIBOOT_AUTORUN=1
```
If you want a vmlinux and separate initramfs you can also do this:
```
export SKIBOOT_ZIMAGE=$HOME/src/op-build/output/images/vmlinux
export SKIBOOT_INITRD=$HOME/src/op-build/output/images/rootfs.cpio.xz
export SKIBOOT=$HOME/src/skiboot/skiboot.lid
export SKIBOOT_AUTORUN=1
```

### Run the simulator
```
/opt/ibm/systemsim-p8/run/pegasus/power8 -f $HOME/src/skiboot/external/mambo/skiboot.tcl
```

This should open an xterm and start booting.  It should take around
20sec to get to a petitboot console.
