18.7.1 EfiRom Utility
The EfiRom
utility is included with the standard set of tools from the EDK II
project. A pre-built binary of EfiRom
is in the BaseTools/Bin/Win32
directory in the EDK II WORKSPACE
. This directory, with pre-built binaries,
is automatically added to the path after setting up the EDK II environment, so
EfiRom
is always available.
The sources to EfiRom
are in the BaseTools/Source/C/EfiRom
directory so the
utility can be built for any operating system supporting the EDK II.
Use the EfiRom
utility to build PCI Option ROM Images containing UEFI
Drivers, PC BIOS legacy option ROM images, or both, in a format conforming to the PCI 2.3
Specification and PCI 3.0 Specification. The EfiRom
utility also allows
UEFI Drivers to be compressed using the UEFI compression algorithm defined in
the Compression Algorithm Specification section of the UEFI Specification.
The EfiRom
utility performs some rudimentary checks on the UEFI Drivers to
verify they are valid PE/COFF images as defined by the Microsoft Portable
Executable and Common Object File Format Specification. If any of these checks
fail, the utility aborts without creating the output ROM image file. For
example, the following checks are performed on UEFI Drivers:
- Verification that the DOS stub magic value is
0x5A4D
- Verification that the PE signature is "
PE\0\0
" - The
EfiRom
utility also performs rudimentary checking of PC BIOS legacy option ROM images. If any of these checks fail, the utility aborts without creating the output ROM image file. The following checks are performed on PC BIOS legacy option ROMs: - Verification that the signature of the option ROM header is 0xAA55
- Verification that the offset to the PCI data structure is within the range of the file size.
- Verification that the signature of the PCI data structure is "PCIR".
The following example shows the help information from the EfiRom
utility that is displayed
when the utility is run with no input parameters, the -h
option or the
-help
option.
Example 197-EfiRom Utility Help
Usage: EfiRom -f VendorId -i DeviceId [options] [file name<s>]
Copyright (c) 2007 - 2011, Intel Corporation. All rights reserved.
Options:
-o FileName, --output FileName
File will be created to store the output content.
-e EfiFileName
EFI PE32 image files.
-ec EfiFileName
EFI PE32 image files and will be compressed.
-b BinFileName
Legacy binary files.
-l ClassCode
Hex ClassCode in the PCI data structure header. -r Rev Hex Revision in the PCI data structure header.
-n Not to automatically set the LAST bit in the last file.
-f VendorId
Hex PCI Vendor ID for the device OpROM, must be specified
-i DeviceId
Hex PCI Device ID for the device OpROM, must be specified -p, --pci23
Default layout meets PCI 3.0 specifications specifying this flag will for a PCI 2.3 layout.
-d, --dump
Dump the headers of an existing option ROM image.
-v, --verbose
Turn on verbose output with informational messages. --version Show program's version number and exit.
-h, --help
Show this help message and exit.
-q, --quiet
Disable all messages except FATAL ERRORS.
--debug [#,0-9]
Enable debug messages at level #.
Examples of generating an Option ROM image using various options provided by
the EfiRom
utility follow:
Generate a PCI Option ROM image with a single UEFI binary files.
The output
filename is not specified in command line, so the output filename is
File2.rom
. The output filename is the same as the first input filename with
the extension .rom
. When UEFI binary files are specified, the VendorId flag
-f
and DeviceId flag -i
must be specified.
EfiRom -f 0xABCD -i 0x1234 -e File2.efi
This example shows the output of the EfiRom
utility then the -d
option is
used to display the headers from the PCI Option ROM image generated in the
previous example.
Example 198-EfiRom Utility Dump Feature
Image 1 -- Offset 0x0
ROM header contents
Signature 0xAA55
PCIR offset 0x001C Signature PCIR
Vendor ID 0xABCD
Device ID 0x1234
Length 0x001C
Revision 0x0003 DeviceListOffset 0x00
Class Code 0x000000 Image size 0x1800
Code revision: 0x0000
MaxRuntimeImageLength 0x00
ConfigUtilityCodeHeaderOffset 0x00
DMTFCLPEntryPointOffset 0x00
Indicator 0x80 (last image)
Code type 0x03 (EFI image)
EFI ROM header contents
EFI Signature 0x0EF1
Compression Type 0x0000 (not compressed)
Machine type 0x014C (IA32)
Subsystem 0x000B (EFI boot service driver)
EFI image offset 0x0038 (@0x38)
Generate a PCI Option ROM image with two UEFI binary files and one PC BIOS legacy option ROM binary file.
The output filename is not specified in command line so the output filename is
File1.rom
. The output filename is the same as the first input filename with
the extension .rom
. When UEFI binary files are specified, the VendorId flag
-f
and DeviceId flag -i
must be specified.
EfiRom -f 0xABCD -i 0x1234 -e File1.efi File2.efi -b Legacy.bin
Generate a PCI Option ROM image with two UEFI binary files and one PC BIOS legacy option ROM binary file with the output filename specified on the command line as
File.rom
When UEFI binary files are specified, the VendorId flag -f
and DeviceId flag
-i
must be specified.
EfiRom -o File.rom -f 0xABCD -i 0x1234 -e File1.efi File2.efi -b Legacy.bin
Generate a PCI Option ROM image with two UEFI binary files and one PC BIOS legacy option ROM binary file.
The output filename is specified in command line as Compressed.rom
. UEFI
binary files are compressed using the UEFI Compression algorithm. When UEFI
binary files are specified, the VendorId flag -f
and DeviceId flag -i
must
be specified.
EfiRom -o Compressed.rom -f 0xABCD -i 0x1234 -ec File1.efi File2.efi -b Legacy.bin