Installing Pintos
*****************

This chapter explains how to install a Pintos development environment on your own machine.  If you are using a Pintos development environment that has been set up by someone else, you do not need to read this chapter or follow these instructions.

The Pintos development environment is targeted at Unix-like systems.  It has been most extensively tested on GNU/Linux, in particular the Debian and Ubuntu distributions, and Solaris.  It is not designed to install under any form of Windows.

Prerequisites for installing a Pintos development environment include the following, on top of standard Unix utilities:

  * Required: GCC (http://gcc.gnu.org/).  Version 4.0 or later is preferred.  Version 3.3 or later should work.  If the host machine has an 80X86 processor, then GCC should be available as gcc; otherwise, an 80X86 cross-compiler should be available as i386-elf-gcc.  A sample set of commands for installing GCC 3.3.6 as a cross-compiler are included in src/misc/gcc-3.3.6-cross-howto.

  * Required: GNU binutils (http://www.gnu.org/software/binutils/). Pintos uses addr2line, ar, ld, objcopy, and ranlib.  If the host machine is not an 80X86, versions targeting 80X86 should be available with an i386-elf- prefix.

  * Required: Perl (http://www.perl.org).  Version 5.8.0 or later is preferred.  Version 5.6.1 or later should work.

  * Required: GNU make (http://www.gnu.org/software/make/), version 3.80 or later.

  * Recommended: QEMU (http://fabrice.bellard.free.fr/qemu/), version 0.11.0 or later.  If QEMU is not available, Bochs can be used, but its slowness is frustrating.

  * Recommended: GDB (http://www.gnu.org/software/gdb/).  GDB is helpful in debugging (see GDB).  If the host machine is not an 80X86, a version of GDB targeting 80X86 should be available as i386-elf-gdb.

  * Recommended: X (http://www.x.org/).  Being able to use an X server makes the virtual machine feel more like a physical machine, but it is not strictly necessary.

  * Optional: Texinfo (http://www.gnu.org/software/texinfo/), version 4.5 or later.  Texinfo is required to build the PDF version of the documentation.

  * Optional: TeX (http://www.tug.org/).  Also required to build the PDF version of the documentation.

  * Optional: VMware Player (http://www.vmware.com/).  This is a third platform that can also be used to test Pintos.

Once these prerequisites are available, follow these instructions to install Pintos:

 1. Install Bochs (http://bochs.sourceforge.net/), version 2.2.6, as described below (see Building Bochs for Pintos).

 2. Install scripts from src/utils.  Copy backtrace, pintos, pintos-gdb, pintos-mkdisk, pintos-set-cmdline, and Pintos.pm into the default PATH.

 3. Install src/misc/gdb-macros in a public location.  Then use a text editor to edit the installed copy of pintos-gdb, changing the definition of GDBMACROS to point to where you installed gdb-macros.  Test the installation by running pintos-gdb without any arguments.  If it does not complain about missing gdb-macros, it is installed correctly.

 4. Compile the remaining Pintos utilities by typing make in src/utils.  Install squish-pty somewhere in PATH. To support VMware Player, install squish-unix. If your Perl is older than version 5.8.0, also install setitimer-helper; otherwise, it is unneeded.

 5. Pintos should now be ready for use.  If you have the Pintos reference solutions, which are provided only to faculty and their teaching assistants, then you may test your installation by running make check in the top-level tests directory.  The tests take between 20 minutes and 1 hour to run, depending on the speed of your hardware.

 6. Optional: Build the documentation, by running make dist in the top-level doc directory.  This creates a WWW subdirectory within doc that contains HTML and PDF versions of the documentation, plus the design document templates and various hardware specifications referenced by the documentation.  Building the PDF version of the manual requires Texinfo and TeX (see above).  You may install WWW wherever you find most useful.

     The doc directory is not included in the .tar.gz distributed for Pintos.  It is in the Pintos CVS tree available via :pserver:anonymous@footstool.stanford.edu:/var/lib/cvs, in the pintos module.  The CVS tree is not the authoritative source for Stanford course materials, which should be obtained from the course website.

Building Bochs for Pintos
=========================

Upstream Bochs has bugs and warts that should be fixed when used with Pintos.  Thus, Bochs should be installed manually for use with Pintos, instead of using the packaged version of Bochs included with an operating system distribution.

Two different Bochs binaries should be installed.  One, named simply bochs, should have the GDB stub enabled, by passing --enable-gdb-stub to the Bochs configure script.  The other, named bochs-dbg, should have the internal debugger enabled, by passing --enable-debugger to configure. (The pintos script selects a binary based on the options passed to it.)  In each case, the X, terminal, and ``no GUI'' interfaces should be configured, by passing --with-x --with-x11 --with-term --with-nogui to configure.

This version of Pintos is designed for use with Bochs 2.6.11.  A number of patches for this version of Bochs are included in src/misc:

bochs-2.6.11-banner-stderr.patch

     Prints startup boilerplate information to stderr instead of stdout.

bochs-2.6.11-jitter-plus-segv.patch

     Adds the ``jitter'' feature, in which timer interrupts are delivered at random intervals (see Debugging versus Testing). Also makes the GDB stub report a SIGSEGV to the debugger when a page-fault exception occurs, instead of ``signal 0.''  The former can be ignored with handle SIGSEGV nostop but the latter cannot.

bochs-2.6.11-link-tinfo.patch

     Patches the build mechanism to include the -ltinfo library; doesn't change any functionality.

The best way to build Bochs is by invoking src/misc/bochs-2.6.11-build.sh. This should be invoked in a directory containing the Bochs distribution file (bochs-2.6.11-tar.gz). The build script takes a single argument, which provides the destination for installation (the binaries will be placed in the bin subdirectory of that directory). The script will apply the patches and build both versions of Bochs.

The src/misc directory also contains patches and build scripts for older versions of Bochs, if desired. However, these may require changes elsewhere in Pintos. For example, src/utils/pintos had to be modified for Bochs 2.6.11; if you use an older version of Bochs you will need to back out those changes.