summaryrefslogtreecommitdiffstats
path: root/contrib
diff options
context:
space:
mode:
Diffstat (limited to 'contrib')
-rw-r--r--contrib/bochs/README.qemu16
-rw-r--r--contrib/bochs/qemu-patch26
2 files changed, 38 insertions, 4 deletions
diff --git a/contrib/bochs/README.qemu b/contrib/bochs/README.qemu
index ae2984ca..e72c8841 100644
--- a/contrib/bochs/README.qemu
+++ b/contrib/bochs/README.qemu
@@ -14,14 +14,21 @@ To get qemu running is fairly simple:
cvs -d:pserver:anonymous@cvs.savannah.nongnu.org:/sources/qemu \
co qemu
+2a. Patch the qemu code. There is currently a bug that causes qemu to
+ execute Etherboot incredibly slowly. The bug seems to be related
+ to the relative prioritisation of CPU and I/O operations within
+ qemu. This patch (which I found via Google) isn't a proper fix,
+ but it does work around the problem:
+ patch -p0 < qemu-patch
+
3. Configure qemu with
pushd qemu
- ./configure --enable-system --enable-profiler
+ ./configure --enable-system
popd
- Note that qemu will not compile with gcc4; if your system's
- default compiler is gcc4 then specify the path to gcc3 using
- e.g. --cc=gcc-3.3.6
+ Note that qemu will not compile with gcc4; if your system's
+ default compiler is gcc4 then specify the path to gcc3 using
+ e.g. --cc=gcc-3.3.6
4. Build qemu:
make -C qemu
@@ -52,6 +59,7 @@ To get qemu running is fairly simple:
popd
9. Start qemu
+ export SDL_VIDEO_X11_DGAMOUSE=0
./qemu/i386-softmmu/qemu -L qemu/pc-bios \
-net nic,model=rtl8139 -net tap,ifname=tap0 \
-boot a -fda ../../src/bin/rtl8139.dsk
diff --git a/contrib/bochs/qemu-patch b/contrib/bochs/qemu-patch
new file mode 100644
index 00000000..5fb6c09e
--- /dev/null
+++ b/contrib/bochs/qemu-patch
@@ -0,0 +1,26 @@
+Index: qemu/cpu-exec.c
+===================================================================
+RCS file: /sources/qemu/qemu/cpu-exec.c,v
+retrieving revision 1.84
+diff -u -r1.84 cpu-exec.c
+--- qemu/cpu-exec.c 29 Jul 2006 19:09:31 -0000 1.84
++++ qemu/cpu-exec.c 28 Aug 2006 01:54:15 -0000
+@@ -788,6 +788,18 @@
+ cpu_loop_exit();
+ }
+ #endif
++#if 1
++#define MIN_CYCLE_COUNT 100
++ {
++ static int cycle_count;
++
++ if (++cycle_count > MIN_CYCLE_COUNT) {
++ cycle_count = 0;
++ env->exception_index = EXCP_INTERRUPT;
++ cpu_loop_exit();
++ }
++ }
++#endif
+ }
+ } else {
+ env_to_regs();