===== 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=/usrto force use of standard file locations * --enable-debuggerto 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 /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 [[vmwarebios|Etherboot as extension ROM for Bochs]] is available.