2009-05-27 23:10:18 +02:00
|
|
|
|
|
|
|
=== OVMF OVERVIEW ===
|
|
|
|
|
|
|
|
The Open Virtual Machine Firmware (OVMF) project aims
|
|
|
|
to support firmware for Virtual Machines using the edk2
|
|
|
|
code base. More information can be found at:
|
|
|
|
|
2010-02-22 19:17:13 +01:00
|
|
|
http://sourceforge.net/apps/mediawiki/tianocore/index.php?title=OVMF
|
2009-05-27 23:10:18 +02:00
|
|
|
|
|
|
|
=== STATUS ===
|
|
|
|
|
|
|
|
Current status: Alpha
|
|
|
|
|
|
|
|
Current capabilities:
|
|
|
|
* IA32 and X64 architectures
|
|
|
|
* QEMU (0.9.1 or later)
|
|
|
|
- Video, keyboard, IDE, CD-ROM, serial
|
|
|
|
- Runs UEFI shell
|
2010-07-26 20:07:19 +02:00
|
|
|
- Optional NIC support. Requires QEMU (0.12.2 or later)
|
2009-05-27 23:10:18 +02:00
|
|
|
* UEFI Linux has booted (but is not stable)
|
|
|
|
|
|
|
|
=== FUTURE PLANS ===
|
|
|
|
|
|
|
|
* Stabilize UEFI Linux boot
|
|
|
|
* Test/Stabilize UEFI Self-Certification Tests (SCT) results
|
|
|
|
|
2009-05-28 20:02:25 +02:00
|
|
|
=== BUILDING OVMF ===
|
|
|
|
|
|
|
|
Pre-requisites:
|
|
|
|
* Build environment capable of build the edk2 MdeModulePkg.
|
2011-01-09 04:50:21 +01:00
|
|
|
* A properly configured ASL compiler:
|
|
|
|
- Intel ASL compiler: Available from http://www.acpica.org
|
|
|
|
- Microsoft ASL compiler: Available from http://www.acpi.info
|
2009-05-28 20:02:25 +02:00
|
|
|
|
|
|
|
Update Conf/target.txt ACTIVE_PLATFORM for OVMF:
|
|
|
|
PEI arch DXE arch UEFI interfaces
|
|
|
|
* OvmfPkg/OvmfPkgIa32.dsc IA32 IA32 IA32
|
|
|
|
* OvmfPkg/OvmfPkgIa32X64.dsc IA32 X64 X64
|
|
|
|
* OvmfPkg/OvmfPkgX64.dsc X64 X64 X64
|
|
|
|
|
2009-07-15 01:32:44 +02:00
|
|
|
Update Conf/target.txt TARGET_ARCH based on the .dsc file:
|
|
|
|
TARGET_ARCH
|
|
|
|
* OvmfPkg/OvmfPkgIa32.dsc IA32
|
|
|
|
* OvmfPkg/OvmfPkgIa32X64.dsc IA32 X64
|
|
|
|
* OvmfPkg/OvmfPkgX64.dsc X64
|
|
|
|
|
|
|
|
Following the edk2 build process, you will find the OVMF binaries
|
|
|
|
under the $WORKSPACE/Build/*/*/FV directory. The actual path will
|
|
|
|
depend on how your build is configured. You can expect to find
|
|
|
|
these binary outputs:
|
2010-07-26 20:07:19 +02:00
|
|
|
* OVMF.FD
|
2011-01-09 04:50:21 +01:00
|
|
|
- Please note! This filename has changed. Older releases used OVMF.Fv.
|
2012-05-28 08:37:32 +02:00
|
|
|
* OvmfVideo.rom
|
2009-07-15 01:32:44 +02:00
|
|
|
|
|
|
|
More information on building OVMF can be found at:
|
2010-02-22 19:17:13 +01:00
|
|
|
|
|
|
|
http://sourceforge.net/apps/mediawiki/tianocore/index.php?title=How_to_build_OVMF
|
2009-05-28 20:02:25 +02:00
|
|
|
|
|
|
|
=== RUNNING OVMF on QEMU ===
|
|
|
|
|
|
|
|
* QEMU 0.9.1 or later is required.
|
2010-07-26 20:07:19 +02:00
|
|
|
* Either copy, rename or symlink OVMF.FD => bios.bin
|
2009-05-28 20:02:25 +02:00
|
|
|
* Be sure to use qemu-system-x86_64, if you are using and X64 firmware.
|
|
|
|
(qemu-system-x86_64 works for the IA32 firmware as well, of course.)
|
2009-07-15 01:32:44 +02:00
|
|
|
* Use the QEMU -L parameter to specify the directory where the bios.bin
|
2012-07-11 00:43:19 +02:00
|
|
|
file is located.
|
2009-05-28 20:02:25 +02:00
|
|
|
* Optionally you can use the QEMU -serial command to capture the
|
|
|
|
OVMF debug messages. For example: -serial file:serial.log
|
|
|
|
* The EFI shell is built into OVMF builds at this time, so it should
|
|
|
|
run automatically if a UEFI boot application is not found on the
|
|
|
|
removable media.
|
2010-12-31 08:55:23 +01:00
|
|
|
* On Linux, newer version of QEMU may enable KVM feature, and this might
|
|
|
|
cause OVMF to fail to boot. The QEMU '-no-kvm' may allow OVMF to boot.
|
2010-12-31 08:55:11 +01:00
|
|
|
|
|
|
|
=== Build Scripts ===
|
|
|
|
|
2011-01-09 04:50:21 +01:00
|
|
|
On systems with the bash shell you can use OvmfPkg/build.sh to simplify
|
|
|
|
building and running OVMF.
|
2010-12-31 08:55:11 +01:00
|
|
|
|
|
|
|
So, for example, to build + run OVMF X64:
|
2011-01-09 04:50:21 +01:00
|
|
|
$ OvmfPkg/build.sh -a X64
|
|
|
|
$ OvmfPkg/build.sh -a X64 qemu
|
2010-12-31 08:55:11 +01:00
|
|
|
|
|
|
|
And to run a 64-bit UEFI bootable ISO image:
|
2011-01-09 04:50:21 +01:00
|
|
|
$ OvmfPkg/build.sh -a X64 qemu -cdrom /path/to/disk-image.iso
|
|
|
|
|
|
|
|
To build a 32-bit OVMF without debug serial messages using GCC 4.5:
|
|
|
|
$ OvmfPkg/build.sh -a IA32 -b RELEASE -t GCC45
|
2010-12-31 08:55:11 +01:00
|
|
|
|
2010-12-31 08:55:23 +01:00
|
|
|
=== Network Support ===
|
|
|
|
|
|
|
|
To add network drivers to OVMF:
|
|
|
|
|
|
|
|
* Download UEFI drivers for the e1000 NIC
|
|
|
|
- http://downloadcenter.intel.com/Detail_Desc.aspx?agr=Y&DwnldID=17515&lang=eng
|
|
|
|
- Install the drivers into a directory called Intel3.5 in your WORKSPACE
|
|
|
|
|
|
|
|
* Include the drivers in OVMF during the build:
|
|
|
|
- Add '-D NETWORK_ENABLE' to your build command
|
|
|
|
- For example: build -D NETWORK_ENABLE
|
|
|
|
|
|
|
|
* Use the QEMU -net parameter to enable NIC support.
|
|
|
|
- QEMU does not support UEFI DHCP or UEFI PXE Boot, so long timeouts will
|
|
|
|
occur when NICs are enabled. The long timeouts can be avoided by
|
|
|
|
interrupts the boot sequence by pressing a key when the logo appears.
|
|
|
|
- Example: Enable e1000 NIC with a DHCP server and restrict packet
|
|
|
|
forwarding:
|
|
|
|
-net nic,model=e1000 -net user,restrict=yes -net user,dhcpstart=10.0.2.10
|
|
|
|
- Example: Enable e1000 NIC with a DHCP server, restrict packet forwarding,
|
|
|
|
and generate PCAP file:
|
|
|
|
-net nic,model=e1000 -net user,restrict=yes -net user,dhcpstart=10.0.2.10
|
|
|
|
-net dump,file=a.pcap
|
|
|
|
- Example: Enable 2 e1000 NICs with a DHCP server and restrict
|
|
|
|
packet forwarding:
|
|
|
|
-net nic,model=e1000,addr=3 -net nic,model=e1000,addr=4
|
|
|
|
-net user,restrict=yes -net user,dhcpstart=10.0.2.10
|
|
|
|
|
2012-07-31 19:54:18 +02:00
|
|
|
=== UNIXGCC Debug ===
|
|
|
|
|
|
|
|
If you build with the UNIXGCC toolchain, then debugging will be disabled
|
|
|
|
due to larger image sizes being produced by the UNIXGCC toolchain. The
|
|
|
|
first choice recommendation is to use GCC44 or newer instead.
|
|
|
|
|
|
|
|
If you must use UNIXGCC, then you can override the build options for
|
|
|
|
particular libraries and modules in the .dsc to re-enable debugging
|
|
|
|
selectively. For example:
|
|
|
|
[Components]
|
|
|
|
OvmfPkg/Library/PlatformBdsLib/PlatformBdsLib.inf {
|
|
|
|
<BuildOptions>
|
|
|
|
GCC:*_*_*_CC_FLAGS = -UMDEPKG_NDEBUG
|
|
|
|
}
|
|
|
|
IntelFrameworkModulePkg/Universal/BdsDxe/BdsDxe.inf {
|
|
|
|
<BuildOptions>
|
|
|
|
GCC:*_*_*_CC_FLAGS = -UMDEPKG_NDEBUG
|
|
|
|
}
|
|
|
|
|