2
0
mirror of https://github.com/xcat2/xNBA.git synced 2024-12-12 14:26:34 +00:00
xNBA/contrib/bochs
Michael Brown 7741546a40 [build] Pad .rom, .dsk, and .hd images to 512-byte boundaries
QEMU will silently round down a disk or ROM image file to the nearest
512 bytes.  Fix by always padding .rom, .dsk and .hd images to the
nearest 512-byte boundary.

Originally-fixed-by: Stefan Hajnoczi <stefanha@gmail.com>
2009-04-16 03:15:08 +01:00
..
.gitignore Ignore external directories (bochs, qemu) within contrib/bochs. 2007-06-09 22:58:04 +01:00
bochs-writable-ROM-patch [contrib] Add patch to enable writable ROM images in bochs 2008-10-21 20:49:10 +01:00
bochsrc.txt Build bochs with ne2000 support, and add sample lines in bochsrc.txt 2007-07-02 03:14:27 +01:00
Makefile Added tunctl (since it is difficult to find for many distros). 2006-05-13 09:27:54 +00:00
qemu-patch Document requisite patch for qemu 2006-08-28 01:58:52 +00:00
README [contrib] Bring bochs/qemu READMEs up to date with latest upstream code 2008-09-07 11:31:42 +01:00
README.qemu [build] Pad .rom, .dsk, and .hd images to 512-byte boundaries 2009-04-16 03:15:08 +01:00
README.windows-ris Don't build option-overloaded packets; they just confuse people (ISC 2007-06-30 01:32:53 +01:00
serial-console [util] Disable automatic CR->LF conversion in serial-console utility 2008-09-07 22:08:40 +01:00
serial-console.1 Initial revision 2005-05-17 16:44:57 +00:00
tunctl.c Added tunctl (since it is difficult to find for many distros). 2006-05-13 09:27:54 +00:00

Running Etherboot within Bochs
==============================

Michael Brown <mbrown@fensystems.co.uk>
Based on an idea suggested by H. Peter Anvin <hpa@zytor.com>.

$Id$

Bochs is a program that simulates a complete Intel x86 computer,
including hardware.  It can be used to test Etherboot.  There is a
special pseudo NIC ("pnic") implemented in Bochs, with a corresponding
driver in Etherboot.  (There is also an NE2000 ISA driver in Bochs,
but it doesn't seem to quite work.)

To get bochs running is fairly simple:

1.  Build the utilities in this directory:
      make

2.  Get the bochs source code:
      cvs -d:pserver:anonymous@bochs.cvs.sourceforge.net:/cvsroot/bochs \
           login
      cvs -d:pserver:anonymous@bochs.cvs.sourceforge.net:/cvsroot/bochs \
           co bochs

3.  Configure bochs with
      pushd bochs
      ./configure --enable-all-optimisations --enable-show-ips \
		  --enable-cpu-level=6 \
		  --enable-pci --enable-pnic --enable-ne2000 \
                  --enable-debugger --enable-disasm
      popd

4.  Build bochs:
      make -C bochs

5.  As root, set up a TAP virtual network device:
      /sbin/modprobe tun
      chmod o+rw /dev/net/tun
      ./tunctl -u <username> -t tap0
      /sbin/ifconfig tap0 up 10.254.254.2 netmask 255.255.255.0

6.  As root, add the following fragment to /etc/dhcpd.conf:
      subnet 10.254.254.0 netmask 255.255.255.252 {
        range dynamic-bootp 10.254.254.1 10.254.254.1;
      }
    You will also need to add in any of your usual declarations for
    Etherboot, e.g. 'filename "vmlinuz.ltsp";'.  Note that this setup
    assumes that your DHCP server, TFTP server etc. all live on the
    machine you are using for running Bochs.  If not, then you're on
    your own.

7.  As root, restart dhcpd
      /etc/init.d/dhcpd restart

8.  Build Etherboot images
      pushd ../../src
      make bin/pnic.dsk
      popd

9.  Start Bochs
      ./bochs/bochs -q
    You should get to the debugger prompt "<bochs:1>".  Type "c" to
    start running Bochs.

You should see Bochs start up, load up Etherboot and attempt to boot
from the network.



Serial console
==============

You can use the program "serial-console" to obtain a virtual serial
console for Etherboot running within Bochs.  Simply run
"./serial-console" on a spare tty (e.g. a separate xterm window)
before starting Bochs, and ensure that you have enabled CONSOLE_SERIAL
in config.h.

There is a manual page for "serial-console"; use
"man ./serial-console.1" to view it.



TODO
====

Packet forwarding/masquerading - document what must be set up.

Mention possibility of using RFB as the display device - in
conjunction with the serial console, gives you a test facility that
can be accessed remotely.

Mention use of BOCHSBP instruction (xchgw %bx,%bx) to avoid need to
calculate breakpoints.