Document requisite patch for qemu
[people/xl0/gpxe.git] / contrib / bochs / README.qemu
1 Running Etherboot within qemu
2 =============================
3
4 Michael Brown <mbrown@fensystems.co.uk>
5
6 To get qemu running is fairly simple:
7
8 1.  Build the utilities in this directory:
9       make
10
11 2.  Get the qemu source code:
12       cvs -d:pserver:anonymous@cvs.savannah.nongnu.org:/sources/qemu \
13            login
14       cvs -d:pserver:anonymous@cvs.savannah.nongnu.org:/sources/qemu \
15            co qemu
16
17 2a. Patch the qemu code.  There is currently a bug that causes qemu to
18     execute Etherboot incredibly slowly.  The bug seems to be related
19     to the relative prioritisation of CPU and I/O operations within
20     qemu.  This patch (which I found via Google) isn't a proper fix,
21     but it does work around the problem:
22       patch -p0 < qemu-patch
23
24 3.  Configure qemu with
25       pushd qemu
26       ./configure --enable-system
27       popd
28
29     Note that qemu will not compile with gcc4; if your system's
30     default compiler is gcc4 then specify the path to gcc3 using
31     e.g. --cc=gcc-3.3.6
32
33 4.  Build qemu:
34       make -C qemu
35
36 5.  As root, set up a TAP virtual network device:
37       /sbin/modprobe tun
38       chmod o+rw /dev/net/tun
39       ./tunctl -u <username> -t tap0
40       /sbin/ifconfig tap0 up 10.254.254.2 netmask 255.255.255.0
41
42 6.  As root, add the following fragment to /etc/dhcpd.conf:
43       subnet 10.254.254.0 netmask 255.255.255.252 {
44         range dynamic-bootp 10.254.254.1 10.254.254.1;
45       }
46     You will also need to add in any of your usual declarations for
47     Etherboot, e.g. 'filename "vmlinuz.ltsp";'.  Note that this setup
48     assumes that your DHCP server, TFTP server etc. all live on the
49     machine you are using for running qemu.  If not, then you're on
50     your own.
51
52 7.  As root, restart dhcpd
53       /etc/init.d/dhcpd restart
54
55 8.  Build Etherboot floppy disk images and pad to 1.44MB
56       pushd ../../src
57       make bin/rtl8139.dsk
58       ./util/dskpad.pl bin/rtl8139.dsk
59       popd
60
61 9.  Start qemu
62       export SDL_VIDEO_X11_DGAMOUSE=0
63       ./qemu/i386-softmmu/qemu -L qemu/pc-bios \
64                                -net nic,model=rtl8139 -net tap,ifname=tap0 \
65                                -boot a -fda ../../src/bin/rtl8139.dsk 
66
67 You should see qemu start up, load up Etherboot and attempt to boot
68 from the network.
69
70
71
72 Serial console
73 ==============
74
75 You can use the program "serial-console" to obtain a virtual serial
76 console for Etherboot running within qemu.  Run "./serial-console" on
77 a spare tty (e.g. a separate xterm window) before starting qemu, and
78 ensure that you have enabled CONSOLE_SERIAL in config.h.
79
80 When serial-console starts, it will print out the message "Slave pty
81 is /dev/pts/XX", where XX is a number.  You need to append the option
82
83    -serial /dev/pts/XX
84
85 to the qemu command line.
86
87 There is a manual page for "serial-console"; use "man
88 ./serial-console.1" to view it.