OvmfPkg: enable the generic network stack by default

DHCP, PXE, and StdLib socket apps are enabled in OVMF by the sum of:
(a) a UEFI NIC driver,
(b) the generic network stack.

The only choice for (a) used to be the proprietary Intel E1000 driver,
which is cumbersome to obtain and enable.

The iPXE UEFI NIC drivers packaged with qemu-1.5 cover (a) for each NIC
type supported by qemu, and are easy to obtain & configure, even for
earlier qemu versions. Therefore enable (b) per default as well.

This doesn't take up much space; the binaries (b) adds to the firmware
don't seem to need -D FD_SIZE_2MB.

Intel's e1000 driver remains an option, requested by the -D E1000_ENABLE
build flag.

Contributed-under: TianoCore Contribution Agreement 1.0

Signed-off-by: Laszlo Ersek <lersek@redhat.com>
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@14366 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
jljusten 2013-05-15 18:20:39 +00:00
parent 15e277d5ac
commit 7628b0f5aa
7 changed files with 62 additions and 34 deletions

View File

@ -467,7 +467,6 @@
#
# Network Support
#
!if $(NETWORK_ENABLE)
MdeModulePkg/Universal/Network/SnpDxe/SnpDxe.inf
MdeModulePkg/Universal/Network/DpcDxe/DpcDxe.inf
MdeModulePkg/Universal/Network/MnpDxe/MnpDxe.inf
@ -481,7 +480,6 @@
MdeModulePkg/Universal/Network/Udp4Dxe/Udp4Dxe.inf
MdeModulePkg/Universal/Network/UefiPxeBcDxe/UefiPxeBcDxe.inf
MdeModulePkg/Universal/Network/IScsiDxe/IScsiDxe.inf
!endif
#
# Usb Support

View File

@ -249,10 +249,11 @@ FILE FREEFORM = PCD(gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdLogoFile) {
#
# Network modules
#
!if $(NETWORK_ENABLE)
!if $(E1000_ENABLE)
FILE DRIVER = 5D695E11-9B3F-4b83-B25F-4A8D5D69BE07 {
SECTION PE32 = Intel3.5/EFI32/E3507E2.EFI
}
!endif
INF MdeModulePkg/Universal/Network/SnpDxe/SnpDxe.inf
INF MdeModulePkg/Universal/Network/DpcDxe/DpcDxe.inf
INF MdeModulePkg/Universal/Network/MnpDxe/MnpDxe.inf
@ -266,7 +267,6 @@ FILE FREEFORM = PCD(gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdLogoFile) {
INF MdeModulePkg/Universal/Network/Udp4Dxe/Udp4Dxe.inf
INF MdeModulePkg/Universal/Network/UefiPxeBcDxe/UefiPxeBcDxe.inf
INF MdeModulePkg/Universal/Network/IScsiDxe/IScsiDxe.inf
!endif
#
# Usb Support

View File

@ -474,7 +474,6 @@
#
# Network Support
#
!if $(NETWORK_ENABLE)
MdeModulePkg/Universal/Network/SnpDxe/SnpDxe.inf
MdeModulePkg/Universal/Network/DpcDxe/DpcDxe.inf
MdeModulePkg/Universal/Network/MnpDxe/MnpDxe.inf
@ -488,7 +487,6 @@
MdeModulePkg/Universal/Network/Udp4Dxe/Udp4Dxe.inf
MdeModulePkg/Universal/Network/UefiPxeBcDxe/UefiPxeBcDxe.inf
MdeModulePkg/Universal/Network/IScsiDxe/IScsiDxe.inf
!endif
#
# Usb Support

View File

@ -249,10 +249,11 @@ FILE FREEFORM = PCD(gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdLogoFile) {
#
# Network modules
#
!if $(NETWORK_ENABLE)
!if $(E1000_ENABLE)
FILE DRIVER = 5D695E11-9B3F-4b83-B25F-4A8D5D69BE07 {
SECTION PE32 = Intel3.5/EFIX64/E3507X2.EFI
}
!endif
INF MdeModulePkg/Universal/Network/SnpDxe/SnpDxe.inf
INF MdeModulePkg/Universal/Network/DpcDxe/DpcDxe.inf
INF MdeModulePkg/Universal/Network/MnpDxe/MnpDxe.inf
@ -266,7 +267,6 @@ FILE FREEFORM = PCD(gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdLogoFile) {
INF MdeModulePkg/Universal/Network/Udp4Dxe/Udp4Dxe.inf
INF MdeModulePkg/Universal/Network/UefiPxeBcDxe/UefiPxeBcDxe.inf
INF MdeModulePkg/Universal/Network/IScsiDxe/IScsiDxe.inf
!endif
#
# Usb Support

View File

@ -472,7 +472,6 @@
#
# Network Support
#
!if $(NETWORK_ENABLE)
MdeModulePkg/Universal/Network/SnpDxe/SnpDxe.inf
MdeModulePkg/Universal/Network/DpcDxe/DpcDxe.inf
MdeModulePkg/Universal/Network/MnpDxe/MnpDxe.inf
@ -486,7 +485,6 @@
MdeModulePkg/Universal/Network/Udp4Dxe/Udp4Dxe.inf
MdeModulePkg/Universal/Network/UefiPxeBcDxe/UefiPxeBcDxe.inf
MdeModulePkg/Universal/Network/IScsiDxe/IScsiDxe.inf
!endif
#
# Usb Support

View File

@ -249,10 +249,11 @@ FILE FREEFORM = PCD(gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdLogoFile) {
#
# Network modules
#
!if $(NETWORK_ENABLE)
!if $(E1000_ENABLE)
FILE DRIVER = 5D695E11-9B3F-4b83-B25F-4A8D5D69BE07 {
SECTION PE32 = Intel3.5/EFIX64/E3507X2.EFI
}
!endif
INF MdeModulePkg/Universal/Network/SnpDxe/SnpDxe.inf
INF MdeModulePkg/Universal/Network/DpcDxe/DpcDxe.inf
INF MdeModulePkg/Universal/Network/MnpDxe/MnpDxe.inf
@ -266,7 +267,6 @@ FILE FREEFORM = PCD(gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdLogoFile) {
INF MdeModulePkg/Universal/Network/Udp4Dxe/Udp4Dxe.inf
INF MdeModulePkg/Universal/Network/UefiPxeBcDxe/UefiPxeBcDxe.inf
INF MdeModulePkg/Universal/Network/IScsiDxe/IScsiDxe.inf
!endif
#
# Usb Support

View File

@ -108,31 +108,65 @@ $ OvmfPkg/build.sh -a IA32 -b RELEASE -t GCC45
=== Network Support ===
To add network drivers to OVMF:
OVMF provides a generic UEFI network stack by default, with the lowest level
driver (the NIC driver) missing in the default build. In order to complete the
stack and make eg. DHCP, PXE Boot, and socket test utilities from the StdLib
edk2 package work, (1) qemu has to be configured to emulate a NIC, (2) a
matching UEFI NIC driver must be available when OVMF boots.
* 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
(If a NIC is configured for the virtual machine, and -- dependent on boot order
-- PXE booting is attempted, but no DHCP server responds to OVMF's DHCP
DISCOVER message at startup, the boot process may take approx. 3 seconds
longer.)
* Include the drivers in OVMF during the build:
- Add '-D NETWORK_ENABLE' to your build command
- For example: build -D NETWORK_ENABLE
* For each NIC emulated by qemu, a GPLv2 licensed UEFI driver is available from
the iPXE project. The qemu source distribution, starting with version 1.5,
contains prebuilt binaries of these drivers (and of course allows one to
rebuild them from source as well).
* 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
* Use the qemu -netdev and -device options, or the legacy -net option, to
enable NIC support: <http://wiki.qemu.org/Documentation/Networking>.
* For a qemu >= 1.5 binary running *without* any "-M machine" option where
"machine" would identify a < qemu-1.5 configuration (for example: "-M
pc-i440fx-1.4" or "-M pc-0.13"), the drivers are available from the default
qemu installation to OVMF without further settings.
* For a qemu binary in [0.13, 1.5), or a qemu >= 1.5 binary with an "-M
machine" option where "machine" selects a < qemu-1.5 configuration:
- download a >= 1.5.0-rc1 source tarball from <http://wiki.qemu.org/Download>,
- extract the following files from the tarball and install them in a
location that is accessible to qemu processes (this may depend on your
SELinux configuration, for example):
qemu-VERSION/pc-bios/efi-e1000.rom
qemu-VERSION/pc-bios/efi-ne2k_pci.rom
qemu-VERSION/pc-bios/efi-pcnet.rom
qemu-VERSION/pc-bios/efi-rtl8139.rom
qemu-VERSION/pc-bios/efi-virtio.rom
- extend the NIC's -device option on the qemu command line with a matching
"romfile=" optarg:
-device e1000,...,romfile=/full/path/to/efi-e1000.rom
-device ne2k_pci,...,romfile=/full/path/to/efi-ne2k_pci.rom
-device pcnet,...,romfile=/full/path/to/efi-pcnet.rom
-device rtl8139,...,romfile=/full/path/to/efi-rtl8139.rom
-device virtio-net-pci,...,romfile=/full/path/to/efi-virtio.rom
* Independently of the iPXE NIC drivers, Intel's proprietary E1000 NIC driver
can be embedded in the OVMF image at build time, as an alternative guest
driver for "-device e1000":
- 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 driver in OVMF during the build:
- Add "-D E1000_ENABLE -D FD_SIZE_2MB" to your build command,
- For example: "build -D E1000_ENABLE -D FD_SIZE_2MB".
=== UNIXGCC Debug ===