[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] The following allows you to run unmodified guest operating systems



ChangeSet 1.1696, 2005/06/08 10:04:58+01:00, kaf24@xxxxxxxxxxxxxxxxxxxx

        The following allows you to run unmodified guest operating systems
        under Xen on VMX (VT) enabled processors. The tree lives under
        <ROOT>/tools/dfw. Instead of booting a guest kernel, boot vmxloader and
        specify the disk image in qemurc.
        
                Leendert
        
        Signed-Off-By: Leendert van Doorn <leendert@xxxxxxxxxxxxxx>



 Makefile                    |   25 
 README                      |   88 
 rombios/Makefile            |   58 
 rombios/apmbios.S           |  329 +
 rombios/biossums.c          |  478 +
 rombios/makesym.perl        |   31 
 rombios/rombios.c           |10825 ++++++++++++++++++++++++++++++++++++++++++++
 rombios/rombios.diffs       |  101 
 vgabios/BUGS                |    3 
 vgabios/COPYING             |  504 ++
 vgabios/ChangeLog           | 1060 ++++
 vgabios/Makefile            |   80 
 vgabios/Notes               |   11 
 vgabios/README              |  191 
 vgabios/TODO                |   28 
 vgabios/biossums.c          |  200 
 vgabios/clext.c             | 1587 ++++++
 vgabios/dataseghack         |   23 
 vgabios/vbe.c               | 1068 ++++
 vgabios/vbe.h               |  302 +
 vgabios/vbe_display_api.txt |  227 
 vgabios/vbetables.h         | 1282 +++++
 vgabios/vgabios.c           | 3608 ++++++++++++++
 vgabios/vgabios.h           |   47 
 vgabios/vgafonts.h          |  784 +++
 vgabios/vgatables.h         |  318 +
 vmxassist/Makefile          |   84 
 vmxassist/TODO              |    8 
 vmxassist/gen.c             |   52 
 vmxassist/head.S            |  162 
 vmxassist/machine.h         |  203 
 vmxassist/mkhex             |   26 
 vmxassist/setup.c           |  338 +
 vmxassist/trap.S            |  189 
 vmxassist/util.c            |  364 +
 vmxassist/util.h            |   41 
 vmxassist/vm86.c            |  956 +++
 vmxassist/vm86.h            |   67 
 vmxassist/vmxassist.ld      |   34 
 vmxassist/vmxloader.c       |  110 
 40 files changed, 25892 insertions(+)


diff -Nru a/tools/firmware/Makefile b/tools/firmware/Makefile
--- /dev/null   Wed Dec 31 16:00:00 196900
+++ b/tools/firmware/Makefile   2005-06-08 06:03:18 -04:00
@@ -0,0 +1,25 @@
+XEN_ROOT = ../..
+include $(XEN_ROOT)/tools/Rules.mk
+
+SUBDIRS :=
+SUBDIRS += rombios
+SUBDIRS += vgabios
+SUBDIRS += vmxassist
+
+.PHONY: all install clean
+
+all: 
+       @set -e; for subdir in $(SUBDIRS); do \
+               $(MAKE) -C $$subdir $@; \
+       done
+
+install: 
+       @set -e; for subdir in $(SUBDIRS); do \
+               $(MAKE) -C $$subdir $@; \
+       done
+
+clean: 
+       @set -e; for subdir in $(SUBDIRS); do \
+               $(MAKE) -C $$subdir $@; \
+       done
+
diff -Nru a/tools/firmware/README b/tools/firmware/README
--- /dev/null   Wed Dec 31 16:00:00 196900
+++ b/tools/firmware/README     2005-06-08 06:03:18 -04:00
@@ -0,0 +1,88 @@
+Domain FirmWare support
+-----------------------
+
+One of the key advantages of full virtualization hardware support (such
+as Intel's VT or AMD's Pacifica) is the ability to run unmodified guest
+operating systems.  However, since most OSes rely on BIOS support during
+their early bringup, we need to provide a surrogate ROMBIOS and VGABIOS
+firmware layer.
+
+What's more, we need to support real-mode which is required by
+the firmware and bootstrap loaders. Real-mode support is especially
+challenging for Intel's VMX (VT) enabled CPUs where there is no real-mode
+support for VMX guest partitions. In this case you either have to do full
+emulation (full real-mode emulator; more complete but potentially slower)
+or partial emulation (use the VM8086 extensions, emulate only those
+instructions that are missing; faster, but potentially incomplete). The
+vmxassist code in this subdirectory uses the later approach because it
+is smaller and faster.
+
+The approach is relatively straight forward. Vmxloader contains three
+payloads (rombios, vgabios and vmxassist) and it is bootstrapped as any
+other 32-bit OS. Vmxloader copies its payloads to the addresses below
+and transfers control to vmxassist.
+
+       vgabios         VGABIOS (standard and Cirrus).
+                       Resides at C000:0000.
+
+       vmxassist       VMXAssist VM86 realmode emulator for VMX.
+                       Resides at D000:0000.
+
+       rombios         ROMBIOS code. Derived from Bochs.
+                       Resides at F000:0000
+
+Vmxassist first sets up it own world (GDT, IDT, TR, etc), enables
+VM8086 and then transfers control to F000:FFF0 and executes 16-bit
+code. Unsupported instructions cause a general protection failure at
+which point vmxassist kicks in and emulates the offending instruction.
+Whever the emulated code transitions to 32-bit protected mode, vmxassist
+will go away. Whenever 32-bit protected code transitions to real-mode,
+Xen/VMX will detect this and transfer control to vmxassist.
+
+Most of the vmxassist complexity comes from properly handling the
+real to protected mode and protected to real mode transitions and
+the proper emulation of the segment registers. Even though the Intel
+manual clearly states that you should immediately perform a jmp far
+after a mode transition, many operating systems execute additional
+instructions and some even refer to segment selectors and pop data
+from the stack. Vmxassist contains a number of work arounds for these
+OSes.
+
+
+Acknowledgements
+----------------
+
+The rombios was taken (largely unmodified) from Bochs, which was written
+by Kevin Lawton. The VGABIOS was written by Christophe Bothamy. Arun Sharma,
+Asit Mallick and Nitin Kamble (Intel) provided the E820 patches and lots
+of useful feedback.
+
+
+Contact
+-------
+
+Leendert van Doorn
+IBM T.J. Watson Research Center
+19 Skyline Drive
+Hawthorne, NY 10532
+leendert@xxxxxxxxxxxxxx
+
+
+Tested Operating Systems
+------------------------
+
+Since vmxassist uses partial emulation, it may always miss opcodes
+that are required by a particular OS. The table below lists the OSes
+I have tried.  The Install column indicates a full CD/DVD install into
+a VMX partition. The Disk column indicates booting from prefabricated
+disk image.
+
+Operating System                       Install         Disk
+------------------------------------------------------------
+RedHat Enterprise Linux (RHEL3_U5)     Yes             Yes
+Fedora Code (FC3)                      (-)             Yes
+FreeBSD 5.3                            (-)             Yes
+MS-DOS 5.0                             (-)             Yes
+
+(-) not tried yet
+
diff -Nru a/tools/firmware/rombios/Makefile b/tools/firmware/rombios/Makefile
--- /dev/null   Wed Dec 31 16:00:00 196900
+++ b/tools/firmware/rombios/Makefile   2005-06-08 06:03:18 -04:00
@@ -0,0 +1,58 @@
+BIOS_BUILDS = BIOS-bochs-latest
+#BIOS_BUILDS += BIOS-bochs-2-processors
+#BIOS_BUILDS += BIOS-bochs-4-processors
+#BIOS_BUILDS += BIOS-bochs-8-processors
+
+all: bios
+
+bios: biossums ${BIOS_BUILDS}
+
+clean:
+       rm -f  *.o *.a *.s rombios.bin _rombios*_.c
+       rm -f  as86-sym.txt ld86-sym.txt 
+       rm -f  rombios*.txt rombios*.sym usage biossums
+       rm -f  BIOS-bochs-*
+
+BIOS-bochs-latest: rombios.c biossums
+       gcc -DBX_SMP_PROCESSORS=1 -E -P $< > _rombios_.c
+       bcc -o rombios.s -C-c -D__i86__ -0 -S _rombios_.c
+       sed -e 's/^\.text//' -e 's/^\.data//' rombios.s > _rombios_.s
+       as86 _rombios_.s -b tmp.bin -u- -w- -g -0 -j -O -l rombios.txt
+       -perl makesym.perl < rombios.txt > rombios.sym
+       mv tmp.bin BIOS-bochs-latest
+       ./biossums BIOS-bochs-latest
+       rm -f _rombios_.s
+
+BIOS-bochs-2-processors: rombios.c biossums
+       gcc -DBX_SMP_PROCESSORS=2 -E -P $< > _rombios2_.c
+       bcc -o rombios2.s -C-c -D__i86__ -0 -S _rombios2_.c
+       sed -e 's/^\.text//' -e 's/^\.data//' rombios2.s > _rombios2_.s
+       as86 _rombios2_.s -b tmp2.bin -u- -w- -g -0 -j -O -l rombios2.txt
+       -perl makesym.perl < rombios2.txt > rombios2.sym
+       mv tmp2.bin BIOS-bochs-2-processors
+       ./biossums BIOS-bochs-2-processors
+       rm -f _rombios2_.s
+
+BIOS-bochs-4-processors: rombios.c biossums
+       gcc -DBX_SMP_PROCESSORS=4 -E -P $< > _rombios4_.c
+       bcc -o rombios4.s -C-c -D__i86__ -0 -S _rombios4_.c
+       sed -e 's/^\.text//' -e 's/^\.data//' rombios4.s > _rombios4_.s
+       as86 _rombios4_.s -b tmp4.bin -u- -w- -g -0 -j -O -l rombios4.txt
+       -perl makesym.perl < rombios4.txt > rombios4.sym
+       mv tmp4.bin BIOS-bochs-4-processors
+       ./biossums BIOS-bochs-4-processors
+       rm -f _rombios4_.s
+
+BIOS-bochs-8-processors: rombios.c biossums
+       gcc -DBX_SMP_PROCESSORS=8 -E -P $< > _rombios8_.c
+       bcc -o rombios8.s -C-c -D__i86__ -0 -S _rombios8_.c
+       sed -e 's/^\.text//' -e 's/^\.data//' rombios8.s > _rombios8_.s
+       as86 _rombios8_.s -b tmp8.bin -u- -w- -g -0 -j -O -l rombios8.txt
+       -perl makesym.perl < rombios8.txt > rombios8.sym
+       mv tmp8.bin BIOS-bochs-8-processors
+       ./biossums BIOS-bochs-8-processors
+       rm -f _rombios8_.s
+
+biossums: biossums.c
+       gcc -o biossums biossums.c
+
diff -Nru a/tools/firmware/rombios/apmbios.S b/tools/firmware/rombios/apmbios.S
--- /dev/null   Wed Dec 31 16:00:00 196900
+++ b/tools/firmware/rombios/apmbios.S  2005-06-08 06:03:18 -04:00
@@ -0,0 +1,329 @@
+//  APM BIOS support for the Bochs BIOS
+//  Copyright (C) 2004 Fabrice Bellard
+//
+//  Debugging extensions, 16-bit interface and extended power options
+//  Copyright (C) 2005 Struan Bartlett
+//
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of the GNU Lesser General Public
+//  License as published by the Free Software Foundation; either
+//  version 2 of the License, or (at your option) any later version.
+//
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+
+#if defined(APM_REAL)
+#define APMSYM(s) apmreal_ ## s
+#elif defined(APM_PROT16)
+#define APMSYM(s) apm16_ ## s
+#elif defined(APM_PROT32)
+#define APMSYM(s) apm32_ ## s
+#else
+#error unsupported APM mode
+#endif
+
+APMSYM(out_str):      
+  push eax
+  push ebx
+  mov ebx, eax
+APMSYM(out_str1):
+  SEG CS
+  mov al, byte ptr [bx]
+  cmp al, #0
+  je APMSYM(out_str2)
+  outb dx, al
+  inc ebx
+  jmp APMSYM(out_str1)
+APMSYM(out_str2):
+  pop ebx
+  pop eax
+  ret
+  
+APMSYM(07_poweroff_str):
+  .ascii "Shutdown"
+  db 0
+APMSYM(07_suspend_str):
+  .ascii "Suspend"
+  db 0
+APMSYM(07_standby_str):
+  .ascii "Standby"
+  db 0
+  
+#if DEBUG_APM
+APMSYM(put_str):      
+  push edx
+  mov dx, #INFO_PORT
+  call APMSYM(out_str)
+  pop edx

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.