Running Etherboot within Bochs

Orginal documentation by Michael Brown mbrown@fensystems.co.uk Based on an idea suggested by H. Peter Anvin hpa@zytor.com Wikified By Tim Fletcher tim@parrswood.manchester.sch.uk Reformatted by Anselm M. Hoffmeister

What is Bochs?

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.)

Getting Bochs running

  • 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
  • Configure bochs with
    ./configure --enable-all-optimisations --enable-pci --enable-ne2000 --enable-pnic 
  • Other potentially useful configure options:
    • --prefix=/usr

      to force use of standard file locations

    • --enable-debugger

      to enable the internal debugger

  • Build bochs:
    make 
  • Configure Etherboot with CONFIG_PCI_DIRECT: add the line
    CFLAGS += -DCONFIG_PCI_DIRECT 

    to the end of src/arch/i386/Config.

  • Build bin/pnic.zrom:
    make bin/pnic.zrom 
  • Load the TUN/TAP kernel module:
    modprobe tun 
  • You should see the device /dev/net/tun is created automatically if you're using devfs, otherwise you may have to create it by hand with:
    mknod /dev/net/tun c 10 200 
  • Grant yourself write access to /dev/net/tun:
    su -c 'chown <your user id> /dev/net/tun' 
  • The alternative to this is to run Bochs as root. Don't do that.
  • 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.

  • Change back to this directory and run bochs from your Bochs source tree:
    cd /path/to/Etherboot/contrib/bochs 
         /path/to/bochs/source/tree/bochs 
  • Select option 5 (Begin simulation). You will be prompted for your root password. This is required in order to configure the tun1 network interface and to restart the DHCP server.
  • You should see Bochs start up and attempt to boot from the network, with a screen that looks like this:
    VGA BIOS - Version 2.40
         Copyright (C) 1990-2000 Elpin Systems, Inc.
         All rights reserved.
         
         Licensed for use with bochs, courtesy of MandrakeSoft.
         
         For information on this or other VGA development products, contact
         Elpin Systems at: (800) 723-9038 or www.elpin.com
         
         Bochs BIOS, 1 cpu, $Revision: 1.9 $ $Date: 2004/03/10 14:04:59 $
         
         
         Etherboot 5.3.6 (GPL) http://etherboot.org Tagged ELF for [PNIC]
         
         Relocating _text from: [00091020,0009fb50) to [01ef14d0,01f00000)
         Boot from (N)etwork or (Q)uit?
         
         Probing pci nic...
         [pnic] - Detected Bochs Pseudo NIC MAC FE:FD:00:00:00:01 (API v1.0) at 0xdc00
         Searching for server (DHCP)...
         ..Me: 10.254.254.1, Server: 10.254.254.2
         Loading 10.254.254.2:/tftpboot/kernel

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 compiled Etherboot with appropriate settings such as

  CFLAGS+=      -DCONSOLE_DUAL -DCOMCONSOLE=0x3F8 -DCONSPEED=9600

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) to avoid need to calculate breakpoints.

Further information

… about Etherboot as extension ROM for Bochs is available.


QR Code
QR Code bochs (generated for current page)