Intel(R) Platform Innovation Framework for EFI
EFI Development Kit II (EDK II)
Root Package 1.00
2006-11-08

Intel is a trademark or registered trademark of Intel Corporation or its
subsidiaries in the United States and other countries.
* Other names and brands may be claimed as the property of others.
Copyright (c) 2006 - 2007, Intel Corporation

This document provides updates to documentation, along with a description on
how to install and build the EDK II.

Package Contents
----------------
  BuildNotes.txt - The build notes for this package.
  OldMdePkg      - Industry-standard headers and libraries
  Tools          - Build -specific tools that are designed to help the
                   developer create and modify drivers and libraries
  EdkModulePkg   - Reference drivers
  EdkFatBinPkg   - Binary DXE drivers for the Fat 32 file system
  EdkShellBinPkg - Binary Shell applications and commands
  EdkNt32Pkg     - NT32 Emulation platform reference
  EdkUnixPkg     - Posix/Unix Emulation platform reference (Currently this
                   builds only on ia32 Linux, but is meant to be portable.)

Note: MDE and MDK that appear in other documentation refer to the OldMdePkg and
Tools packages, respectively.  While, these two packages are the minimum
requirement for developing EDK II Packages we recommend that you download all
of the top-level files listed above.

The following package is available as a separate project, under a separate
license, on the TianoCore.org website: https://fat-driver2.tianocore.org

  EdkFatPkg      - A package containing source DXE drivers for the Fat 32 file
                   system

Documents have the following filenames (to download these documents, see "Notes
on Documentation" later in these Release Notes):
  EDK II Module Development Environment Library Specification, v0.58
      (MDE_Library_Spec_0_58.rtf)
  EDK II Build and Packaging Architecture Specification, v0.53
      (Build_Packaging_Spec_0_53.rtf)
  EDK II Platform Configuration Database Infrastructure Description, v0.54
      (PCD_Infrastructure_0_54.rtf)
  EDK II Module Surface Area Specification, v0.51
      (Module_Surface_Area_0_50.rtf)
  EDK II Module Development Environment Package Specification, v0.51
      (MDE_Package_Spec_0_51.rtf)
  EDK II C Coding Standards Specification v0.51
      (C_Coding_Standards_Specification_ 0_51.rtf)
  EDK II Subversion Setup Guide
      (edk2-subversion-setup.rtf)

Pre-Requisites
--------------
The following list of tools must be installed on the development workstation
prior to using the EDK II.

Compiler Tool Chain
      Microsoft* Visual Studio .NET 2003*  (http://www.microsoft.com)
    or
      A special GCC version 4.x or later (http://gcc.gnu.org). See below.

Assembler Tool Chain
      Microsoft Macro Assembler, version 6.15 or later
    or
      GNU binutils 2.16.1 or later
      (Http://ftp.gnu.org/gnu/binutils)

Java Development Kit ( Java 5.0 or later)
      Sun* jdk-1.5.0_06 or later (http://java.sun.com)
    or
      Bea Systems* jrockit-25.2.0-jdk1.5.0_03 or later (http://www.bea.com)

Java Tools
    Apache-ANT, version 1.6.5 or later (http://ant.apache.org)
    Ant-contrib, version 1.0b2 or later
      (http://prdownloads.sourceforge.net/ant-contrib/ant-contrib-1.0b2-bin.zip?download)
    Saxon8, version 8.1.1
      (http://prdownloads.sourceforge.net/saxon/saxonb8-1-1.zip?download)
    XMLBeans, version 2.1.0 (http://xmlbeans.apache.org)
      DO NOT download the latest XMLBeans, version 2.2.0. It is not compatible
      with Saxon8, version 8.1.1.

Other Tools
    TortoiseSVN version 1.3.3. (http://tortoisesvn.tigris.org/)

Optional Tools
--------------
Compiler Tool Chains:
    Intel(R) C++ Compiler for Windows*, ver. 9.0 or later (http://www.intel.com)
    Intel(R) C Compiler for EFI Byte Code, ver. 1.2 or later
      (http://www.intel.com/cd/software/products/asmo-na/eng/compilers/efibc/index.htm)
    Microsoft Driver Development Kit, version 3790.1830 or later
      (http://www.microsoft.com/whdc/devtools/ddk/orderddkcd.mspx)
    Microsoft ACPI Source Language Assembler, Version 1.0.13NT or later
    Intel ACPI Component Architecture, version 20060113

Python

    There are several tools implemented in Python and wxPython Widgets in the
    Tools/Python directory. These are optional tools, and are not necessary in
    order to use or build the edk2 code.  In order to use them you must
    install Python 2.4.x and wxWidgets 2.8.x for your platform.  The tools
    have been tested and work correctly on OS X, Linux and Windows.

    There is a script called Install_Python_OSX.sh that will download and
    install the correct versions for OS X. For other platforms, please find
    the installers for your platform at the following sites:

    - http://www.python.org/download/releases/2.4.4/ (Python interpreter)
    - http://www.wxpython.org/download.php#binaries  (Python GUI extensions)

    Your linux distribution may contain packages of python and wxPython, which
    should work, provided they are are compatible with the above specified
    versions.

-----------------------------------------------
Notes on Required Tools (Source Control System)
-----------------------------------------------
The EDK II is being managed by the Subversion Source Control on Tianocore.org.
Subversion provides speed, security, and additional features. The
recommended client is TortoiseSVN version 1.3.3.
 (Available at http://tortoisesvn.tigris.org/)

The checkout procedures on the Tianocore.org Web site include
instructions for the use of Subversion Source Control.

The URL of the EDK II repository is:
  https://edk2.tianocore.org/svn/edk2/trunk/edk2


--------------------------------------------------------------------
Notes On Required Tools (With examples for Windows, OS X, and Linux*)
--------------------------------------------------------------------
Software Installation Order:
  After installing the compiler tools and your Subversion client, install the
  following required tools in this order:
    1. Java JDK
    2. Apache-Ant
    3. ant-contrib
    4. xmlbeans
    5. saxon8

Java Development Kit:

   The Java Environment Variable must be set before attempting to build.
       For Sun JDK (see note below?:
              set JAVA_HOME=c:\Java\jdk1.5.0_06  (Windows example)
              export JAVA_HOME=/Library/Java/Home/ (OS X example)
              export JAVA_HOME=/usr/lib/j2sdk1.5-sun/ (Linux example)
       For Bea Systems:
              set JAVA_HOME=c:\Java\jrockit-R26.0.0-jdk1.5.0_04

   When using the Sun JDK5.0:
    During installation, you should specify the install directory as C:\Java
    instead of C:\Program Files\(or some other drive letter.)  While installing
    to this non-standard location is not required, in practice, it seems to work
    more reliably.
    For the JDK, the install path is C:\Java\jdk1.5.0_06
    For the JRE, the install path is C:\Java\jre1.5.0_06
    Alternatively, you can specify C:\sunjavajdk and C:\sunjavajre.

    NOTE: You cannot combine the location for the JDK and the JRE, because the
    JRE install removes most of the binaries and libraries installed by the JDK
    install.

Java Tools:
    The Apache-ANT requires the ANT_HOME environment variable to be set before
    attempting to build:
         set ANT_HOME=c:\<full path to where ant was installed>
          export ANT_HOME=~/ExternalTools/apache-ant (OS X and Linux example)

    The ant-contrib.jar file should be installed in the %ANT_HOME%\lib
    directory.

    XMLBeans, requires the XMLBEANS_HOME environment variable to be set
    before attempting to build:
         set XMLBEANS_HOME=C:\<full path to where xmlbeans was installed>
          export XMLBEANS_HOME=~/ExternalTools/xmlbeans (OS X and Linux example)

    Copy the saxon8.jar file to the %XMLBEANS_HOME%\lib directory.

   The Ant and XMLBean tools must be in the path.
     MS system example:
        set PATH=%PATH%;%ANT_HOME%\bin;%XMLBEANS_HOME%\bin
     Linux/OS X bash shell example:
        export PATH=$PATH:${ANT_HOME}/bin:${XMLBEANS_HOME}/bin

--------------------
A Word on Apache-ANT
--------------------
The Apache-ANT program is a build tool that uses XML-based project files.
Similar to Makefiles, these project files may contain multiple targets.  Most
build.xml files in EDK II are auto-generated; any edits performed on the
build.xml files will be overwritten by the next build.

Pre-defined targets in the build.xml file include:
    all      - This target builds binaries for defined architectures.
    clean    - This target removes object files generated by commands.
    cleanall - This target removes all generated files and directories.

Use the ANT option, -emacs, to remove the [cc] characters when an error occurs
to provide a method for the Visual Studio IDE to open a file by double
clicking the mouse on the file.  Add -emacs to the end of the build command.
----------------------------
A Word on the GCC Tool Chain
----------------------------

EDK II will not compile with a standard Linux gcc tool chain. While Linux
distributions are usually based on ELF, EDK II requires a version of gcc that
is configured to produce PE-COFF images. You will find a script in <Root of
EDK2 tree>/Tools/gcc/tianoCross-gcc-4.1 that will download, configure, compile,
and install a gcc 4.1 cross-compile tool chain for EDK II development. This
custom tool chain supports the IA-32 architecture. It can be built and run on
Cygwin, Linux, and many other POSIX-compliant host operating environments. To
compile the custom gcc tool chain, you need the following tools on your host
computer: bash, gcc, gmake, curl (or wget).

Only the OldMdePkg, EdkModulePkg and EdkUnixPkg are currently supported by gcc
builds. Other builds, such as the EdkNt32Pkg, will not compile with gcc. By
default, the edk2 will try to build the NT32.fpd, which is not supported by
gcc. So, you need to change the Tools/Conf/target.txt.

The cross-compile build script has been tested on Cygwin, OS X and Linux. You
should expect to hack on these scripts to make them work on your system. You
may need to install additional tools on your system to make the scripts work.

You will need

  A recent version (3.0 or later should be fine) of gcc that is able to produce
    executables for the machine that you want to run this compiler on (the host
    machine).
  wget or curl (which enables the download of the gcc compiler source code)
  tar
  bzip
  gzip
  bash
  and possibly others

CYGWIN Notes

You should setup cygwin to use binmode on all mounts. When you initially
install cygwin it gives you the choice of Unix file mode (recommended) or DOS
file mode. Unix mode will cause all the cygwin directories to be mounted in
binmode, while DOS will mount the dirs in textmode. Here is an example of a
cygwin install where the dirs are (properly) mounted in binmode.
To view mount information, type:
    mount

C:\cygwin\bin on /usr/bin type user (binmode)
C:\cygwin\lib on /usr/lib type user (binmode)
c:\workspace on /workspace type system (binmode)
C:\cygwin on / type user (binmode)

If you use textmode, it is likely that the build will fail in a way that is
hard to debug.  Textmode is required to retain or add the DOS ^M characters
in DOS batch files during file editing sessions.

You can switch from textmode to binmode for compilation by executing the
following:
    mount -b --change-cygdrive-prefix cygdrive

Cygwin is pretty slow, so it is not recommended for large builds.





The platform to be built is identified by the Tools/Conf/target.txt file:

#
#  PROPERTY              Type       Use         Description
#  ----------------      --------   --------    -----------------------------------------------------------
#  ACTIVE_PLATFORM       Filename   Recommended Specify the WORKSPACE relative Path and Filename
#                                               of the platform FPD file that will be used for the build
#                                               This line is required if and only if the current working
#                                               directory does not contain one or more FPD files.

ACTIVE_PLATFORM       =

You can leave it black, as above, or set it to any .fpd file in the workspace.
If you leave it blank, then you just cd to the dir that contains the .fpd that
you would like to build (OldMdePkg/ or EdkModulePkg/) and then type build.

----------------------------
A Word on compiling on Linux
----------------------------

In order to compile on Linux, you will need to have the e2fsprogs-devel package
installed.  Check your distribution for the rpm, deb or other package format.
This package contains the uuid library and header that are used by some of the
host tools.

If you are running on x86_64 Linux, then you should install a 64 bit version of
the Java JDK. The version that was used was jdk-1_5_0_07-linux-amd64-rpm.bin.
It may be downloaded from sun.com.

-----------------------------------------
A Word on compiling under Cygwin with gcc
-----------------------------------------

Cygwin is a POSIX style operating environment for Windows. It is possible to
compile the EDK 2 using gcc and cygwin. Compiling under cygwin is slow, because
the underlying file accesses are slow in cygwin. For this reason, we do not
encourage the use of cygwin. A true unix system will be a superior choice for
those wishing to compile with gcc.

Make sure that you select the e2fsprogs development package when you install
cygwin. It is necessary for the GenFvImage tool.

----------------------------------------
A Word on gcc for Processor Architectures
----------------------------------------

Currently gcc support is limited to IA-32 builds, generating IA-32 PE32 images.

The X64 bit (Intel 64, etc.) support under the gcc compiler does not support the EFIAPI
calling convention (as defined in the UEFI 2.0 specification Chapter 2), so it is not
possible to build a working EFI image for an X64 environment.  Since the x64 gcc does
not support the EFIAPI calling convention the x64 tools do not support generating a
PE32+ image.  The EFIAPI calling convention is very similar to the Microsoft x64
calling convention.

We have added prelinary support for the MinGW64 Tool chain. This gcc tool
chain is ported to follow the Microsft X64 ABI, and therefore is compatible
with the EFI specification.

On Itanium?Processors the gcc compiler does not support generating a PE32+ image.

----------------------------------------
A Word on EdkUnixPkg -- The Unix simulator
----------------------------------------

A unix port of the Nt32 simulator has been added to the project. It currently
builds and runs on 32 bit Linux, but should be portable to other Unix
variants. In order to build it, you should use the ELFGCC tool chain defintion
in tools_def.txt, which is set in target.txt. These are two settings to make
in Tools/Conf/target.txt:

ACTIVE_PLATFORM       = EdkUnixPkg/Unix.fpd
TOOL_CHAIN_TAG        = ELFGCC

Once that is setup, type build, and then you will end up with the simulator in
Build/Unix/DEBUG_ELFGCC/IA32/SecMain.exe.

In order to use the gdb debugger with the simulator, you may need to load the
correct symbol file for the various modules that are loaded. For example,

add-symbol-file EdkModulePkg/Bus/Pci/PciBus/Dxe/PciBus/DEBUG/./PciBus.dll
0x45dc6000

You can see the names of the symbol files (they are in ELF format even though
the extension is .dll) printed on the screen as the simulator comes up.

-----------------------
Notes on Documentation
-----------------------
The documents are being managed by the Subversion Source Control on
Tianocore.org.  The document repository is "docs" and must be checked out
separately from the EDK II source tree. Refer to the checkout procedures on
the Tianocore.org Web site for EDK II.

The URL of the document repository is:
  https://edk2.tianocore.org/svn/edk2/trunk/docs


-------------------------------------------------------------------------------
Quick Start
-----------
(assumes Microsoft Tools and OS environment, for GCC Tools or Linux, see
"Detailed Starting Instructions" below)

Follow the instructions at https://edk2.tianocore.org/servlets/ProjectSource to
check out the entire EDK II source tree.

In a command window, change to the top-level directory of the EDK II source.

To test your tool chain setup and to build the supplied tools, execute:
    c:\MyWork\edk2\> edksetup ForceRebuild

(The edksetup script is referred to as the setup command throughout the
rest of this document.)
      NOTE: You should run the setup command at the start of every session.
            This configures the environment to include the TianoTools and the
            Java applications and libraries.

You will need to set the WORKSPACE environment variable, or run the edksetup
script (without any arguments), any time you want to build.

  Set the WORKSPACE environment variable, e.g.:

    c:\> set WORKSPACE=C:\MyWork\edk2

You may need to edit the text files Tools/Conf/target.txt and
Tools/Conf/tools_def.txt (created by edksetup) using your favorite
text editor to ensure that the paths to the tools you want to use
to build EDK II binaries are correct.  These files contain the default
paths (as per the default installation of the tools), so a customized
install may require this manual process.

Once this is completed, you are ready to test the build, by executing:
    c:\MyWork\edk2\> build

This command builds the active platform specified in text file target.txt. If
the active platform is not specified target.txt, you must execute the build
command from the sub-directory that contains FPD files. For more information
about the active platform policy, see the "EDK II Build and Packaging
Architecture Specification."

-------------------------------------------------------------------------------
Detailed Starting Instructions
------------------------------

Follow the instructions at https://edk2.tianocore.org/servlets/ProjectSource to
check out the entire EDK II source tree.

In a command window, change to the top-level directory of the EDK II source.

If the active compiler tool chain is GCC, you must set the
environment variable, TOOL_CHAIN to "gcc" before running the
edksetup script.  Example: export TOOL_CHAIN=gcc

To test your tool chain setup and to build the supplied tools, execute:
    c:\MyWork\edk2\> edksetup ForceRebuild

On Linux systems, you must source the edksetup.sh file to load the correct
settings into your shell.

    . edksetup.sh # Note the dot.

If you have recently updated your code from subversion, the tools will need to
be rebuilt if there were any code changes made to them. You can request that
the tools get rebuilt by typing:

    . edksetup.sh Rebuild # Unix-like systems
    edksetup.bat Rebuild  # Windows

The edksetup script is referred to as the setup command throughout the
rest of this document.
      NOTE: You should run the setup command (edksetup)at the start of every
            session.  This configures the environment to include the
            TianoTools and the Java applications and libraries.

Any changes to the tool source code or XML Schema documents require that
you execute the following:
   c:\MyWork\edk2\> edksetup ForceRebuild

You must set the WORKSPACE environment variable, or run the edksetup
script (without any arguments), any time you want to build.

  Set the WORKSPACE environment variable, e.g.:

    c:\> set WORKSPACE=C:\MyWork\edk2

You may need to edit the text files Tools/Conf/target.txt and
Tools/Conf/tools_def.txt (created by edksetup) using your favorite
text editor to ensure that the paths to the tools you want to use
to build EDK II binaries are correct.  These files contain the default
paths (as per the default installation of the tools), so a customized
tool installation may require this manual process.

Once this is completed, you are ready to test the build, by executing:
    c:\MyWork\edk2\> build

This command builds the active platform specified in text file target.txt. If
the active platform is not specified, go to the sub-directory that contains FPD
files and execute the build command. For more information about the active
platform policy, see the "EDK II Build and Packaging Architecture
Specification."

--------------------------
Individual Platform Builds
--------------------------
After running the setup command, you can build individual platforms.
In the command window:
  Set the active platform in target.txt, and execute this command:
    c:\<directory>\> build
or
  cd to the platform (FPD file) that you want to build and execute this command:
    c:\MyWork\edk2\EdkNt32Pkg\> build

  Note that the active platform specified in target.txt overrides the platform
  specified by any FPD file in the current directory. For more   information
  about active platform policy, see the "EDK II Build and Packaging Architecture
  Specification."

To run the Nt32 emulation platform under Microsoft Windows, go to
<full build path>\DEBUG\MSFT\IA32 and execute SecMain.exe

To exit the Nt32 emulation platform, type "reset" at the EFI Shell>
command prompt.  Alternatively, from the graphical interface, select the Boot
Maintenance Manager's "Reset System" command.

      NOTE: When creating a new platform, the Platform Name is restricted
      to a single word containing alphanumeric characters, underscore, dash,
      and period.  The space character and other special characters are
      not allowed.

-----------------------
Notes on Symbolic Debug
-----------------------
To enable EFI Symbolic Debugging, make sure the target output is set to DEBUG
in the text file Tools/Conf/target.txt and then modify the FPD <BuildOptions>
<Options><Option BuildTargets="DEBUG" ToolCode="CC"> and append the following
compiler options to the string:
"/D EFI_GENERATE_SYM_FILE", "/D EFI_SYMBOLIC_DEBUG"

(If the Option line does not contain "/D EFI_DEBUG", you must add that
option as well.)

------------------------
Individual Module Builds
------------------------
After running the setup command, you can build individual modules.
  In the command window, cd to the module that you want to build, and
  execute the build command:
    c:\MyWork\edk2\OldMdePkg\Library\BaseLib\> build

  You must set the active platform in target.txt for individual module builds.

-------------------------------------------------------------------------------

General Information:
===============================================================
Mechanisms
----------
A brief overview:

A) The Surface Area Package Description (SPD) file contains information about
the modules that the package contains, including the location of all MSA files,
and public library names and headers that might be provided by a module in the
package.  Packages are defined by SPD files.  (Found in the root of the Package
subdirectory (i.e. EdkNt32Pkg).) The SPD file is further explained in "EDK II
Build and Packaging Architecture Specification."

B) Module Surface Area Definition (MSA) files.  A description of a module's
surface area, with all module specific default flags and features specified.
For additional details, see the "EDK II Module Surface Area Specification" and
the "EDK II Build and Packaging Architecture Specification."

C) Framework Platform Description (FPD) files.  A description of a platform's
surface are, including a list of modules that are needed by the platform.  To
support individual module builds, developers are not required to provide
information about specific flash devices, nor flash device layout.
Specific sections in the FPD file control aspects of the build, such
as the Supported Architectures and Build Targets, as well as the tool flags
that are used to create the binary files.  A valid platform file can specify
zero or more modules, so individual modules can be compiled within the context
of a platform (FPD) definition.

D) Platform Configuration Database (PCD).  A platform database that contains a
variety of current platform settings or directives that can be accessed by a
driver or application.  The PCD is defined by the PCD_Protocol (This is
further explained in the "EDK II Platform Configuration Database Infrastructure
Description."

E) Library Class.  A library class is a logical grouping of similar functions.
When developing components, the module surface area declares the class of
libraries that can be used by the component. The MSA and SPD files can specify
a recommended instance of the library that a platform integrator (PI) may
select, however this is only a recommendation.  The PI may choose to select a
different library instance to be used during compilation and linking. All
library type modules must include header files in their distribution package,
as well as their MSA files. Components, on the other hand, need provide only an
MSA file and either source or binary files when distributing packages.  The
Library Classes are further explained in the "EDK II Build and Packaging
Architecture Specification."

=========================================================================
The common operations by developers of new modules are:
-----------------------------------------------
1) Manually creating a new module in a package:
  - The module source code must first be created in an appropriate directory
    (under the package the module is to be a part of.)
  - An MSA file must be created, spelling out all aspects of the module.
  - The MSA must be added to the SPD for the package to include the module.

-----------------------------------------------------
2) Adding and Removing modules to and from a package:

  - Set up environment as Build
  - Adding a module to a package:
     - Generate the MSA file
     - Add a new <Filename> element under <MsaFiles> into
       <PackageDir>\<PackageName>.spd, using arelative path to the package
     - Add a new <ModuleSA> entry under each <FrameworkModules> into the
       <PackageDir>\<PackageName>.fpd file if necessary.

   - Removing a module from a package:
     - Comment out or remove the corresponding <Filename> element under
       <MsaFiles> from <PackageDir>\<PackageName>.spd
     - Comment out or remove the corresponding <ModuleSA> entry under each
       <FrameworkModules> from <PackageDir>\<PackageName>.fpd if necessary.

-------------------------------
3) Manually creating a package:
  - Identify the modules that are to be members of the project.
  - Identify the Variables and Guids required in and of the Package (including
    consumption and production information).
  - Create an SPD file defining these modules and calling out their MSA files.
  - Add a new <Filename> element under <PackageList> into
    Tools\Conf\FrameworkDatabase.db, using the relative path to the workspace.

-----------------------------------------
4) Declaring a new Protocol in a package:
  - This release requires manual editing of the SPD file, adding the protocol
    to the ProtocolDeclarations section of the file.
  - Add the Protocol .h file to the Include\Protocol directory.
  - Add an <Entry> to the <ProtocolDeclarations> element in the
    <PackageName>.spd file
     - Each line contains Protocol base name, followed by the global variable
       name, and        the hex value of the Protocol GUID.

Example Protocol Entries (NOTE: The Guid entry is a single line in the SPD
file):
<ProtocolDeclarations>
  <Entry Name="Bds">
    <C_Name>gEfiBdsArchProtocolGuid</C_Name>
    <GuidValue>665E3FF6-46CC-11D4-9A38-0090273FC14D</GuidValue>
    <HelpText/>
  </Entry>
  <Entry Name="Cpu">
    <C_Name>gEfiCpuArchProtocolGuid</C_Name>
    <GuidValue>26BACCB1-6F42-11D4-BCE7-0080C73C8881</GuidValue>
    <HelpText/>
  </Entry>
</ProtocolDeclarations>

------------------------------------
5) Declaring a new PPI in a package:
  - This release requires manual editing of the SPD file
  - Add the PPI .h file to the Include\Ppi directory.
  - Add an <Entry> to the package <PpiDeclarations> element in the
    <PackageName>.spd file
     - Each line contains the PPI base name, followed by the global variable
       name and        the hex value of the PPI GUID.

Example Ppi Entries (NOTE: The Guid entry is a single line in the SPD file):
<PpiDeclarations>
  <Entry Name="BootInRecoveryMode">
    <C_Name>gEfiPeiBootInRecoveryModePpiGuid</C_Name>
    <GuidValue>17EE496A-D8E4-4B9A-94D1-CE8272300850</GuidValue>
    <HelpText/>
  </Entry>
  <Entry Name="CpuIo">
    <C_Name>gEfiPeiCpuIoPpiInServiceTableGuid</C_Name>
    <GuidValue>E6AF1F7B-FC3F-46DA-A828-A3B457A44282</GuidValue>
    <HelpText/>
  </Entry>
</PpiDeclarations>

-------------------------------------
6) Declaring a new GUID in a package:
  - This release requires manual editing of the SPD file to include the new
    Guid.  This is identical to adding a ProtocolDeclaration or PpiDeclaration
    element, as described above.

------------------------------------------
7) Declaring a new PCD entry in a package:
  - This release requires manual editing of the SPD file to include the new
    PCD.  New Pcd entries are added to the PcdDefinitions section of the
    <PackageName>.spd file using the following example for the format
    (NOTE: The hex <Token> value must be unique):

<PcdDeclarations>
  <PcdEntry ItemType="FIXED_AT_BUILD">
    <C_Name>PcdMaximumUnicodeStringLength</C_Name>
    <Token>0x00000001</Token>
    <TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName>
    <DatumType>UINT32</DatumType>
    <ValidUsage>FIXED_AT_BUILD</ValidUsage>
    <DefaultValue>1000000</DefaultValue>
    <HelpText>The maximum lengh for unicode string.</HelpText>
  </PcdEntry>
</PcdDeclarations>

------------------------------
8) Declaring a new Library Class:
  - This release requires manual editing of the SPD file to include the new
    Library Class.  New Library Class entries are added to the
    LibraryClassDeclarations section of the <PackageName>.spd file using
    the following example for the format:

<LibraryClassDeclarations>
  <LibraryClass Name="BaseLib">
    <IncludeHeader>Include/Library/BaseLib.h</IncludeHeader>
    <HelpText/>
  </LibraryClass>
  <LibraryClass Name="BaseMemoryLib">
    <IncludeHeader>Include/Library/BaseMemoryLib.h</IncludeHeader>
    <HelpText/>
  </LibraryClass>
</LibraryClassDeclarations>

=======================================================
EDK II Changes Relative to the original EDK:
--------------------------------------------
The EDK II represents significant changes in the structure of the EDK.
Therefore, it is very difficult to isolate all of the changes of this version of
the EDK with the original EDK.

Of particular note:

1) EDK II contains new hardware feature support for the ICH SMBUS Libraries.
   These libraries are provided to make Memory Reference Code (MRC) development
   easier.
2) The MDE libraries represent significant changes in source
   (with only limited changes in functionality.)  These new libraries conform
   to the "EDK II Module Development Environment Library Specification.?
3) The Fat Binary and the EDK Shell Binary Packages are functionally identical
   to the original EDK.
4) The EDK tools directory has been expanded to include more tools and more
   tool functionality.
5) The EDK NT32 section has been ported to the new build process, but
   functionally remains the same as the original EDK.
6) The Application "HelloWorld" has been ported to EDK II as well.

=======================================================
Virus scanned by McAfee VirusScan Enterprise 8.0.0, Virus Definitions 4890, no
virus detected.

vim:tw=78:ts=2:com=fb\:- :ai
