Intel(R) Platform Innovation Framework for EFI
EFI Development Kit II (EDK II) 
Root Package 1.00
2006-07-12

Copyright (c) 2006, Intel Corporation

This document provides updates to documentation, along with a description on 
how to install and build the EDK II.

Package Contents
----------------
  ReleaseNote.txt- These release notes for the package.
  MdePkg         - A package containing Industry Standard headers and libraries
  Tools          - A package containing Build Specific tools which are designed
                   to help the developer create and modify drivers and
                   libraries
  EdkModulePkg   - A package containing reference drivers
  EdkFatBinPkg   - A package containing binary DXE drivers for the Fat 32 file
                   system
  EdkShellBinPkg - A package containing binary Shell applications and commands
  EdkNt32Pkg     - A package containing the NT32 Emulation platform reference

Note: MDE and MDK that appear in other documentation refer to the MdePkg and
Tools packages.  These two packages are the minimum requirement for developing
EDK II Packages.  It is also recommended that the top level files included
with the EDK be downloaded in conjunction with these two packages.

The following package will be available as a separate project, under a 
different license, on the TianoCore website: https://fat-driver2.tianocore.org

  EdkFatPkg      - A package containing source DXE drivers for the Fat 32 file
                   system

Note: Documents have the following filenames:
  EDK II Module Development Environment Library Specification v0.50 
      (MDE_Library_Spec_0_50.rtf)
  EDK II Build and Packaging Architecture Specification v0.50
      (Build_Packaging_Spec_0_50.rtf)
  EDK II Platform Configuration Database Infrastructure Description v0.51
      (PCD_Infrastructure_0_51.rtf)
  EDK II Module Surface Area v0.50
      (Module_Surface_Area_0_50.rtf)
  EDK II Module Development Environment (MDE) Package Specification v0.50
      (MDE_Package_Spec_0_50.rtf)
  EDK II C Coding Standards Specification v0.50
      (C_Coding_Standards_Specification_ 0_50.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

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 cannot work with
      Saxon8, version 8.1.1.

Other Tools
    TortoiseSVN version 1.3.3. (http://tortoisesvn.tigris.org/)

Optional Tools
--------------
Compiler Tool Chains:
    Intel C++ Compiler for Windows, ver. 9.0 or later (http://www.intel.com)
    Intel 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

-----------------------
Notes On Required Tools (Source Control System)
-----------------------
The EDK II is being managed by the Subversion Source Control on Tianocore.org.
This software package provides speed, security, and additional features. The
recommended client is TortoiseSVN version 1.3.3. 
 (Available at http://tortoisesvn.tigris.org/)

There are instructions for the use of Subversion Source Control on the
Tianocore.org website, as part of the checkout procedures.

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, the following
  required tools should be installed in order: 
    Java JDK, Apache-Ant, ant-contrib, xmlbeans, 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 use, it seems to work 
    more reliably. 
    For the JDK, the install path would be C:\Java\jdk1.5.0_06
    For the JRE, the install path would be 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, as 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:
         i.e.  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.

    The XMLBeans, requires the XMLBEANS_HOME environment variable to be set
    before attempting to build:
         i.e. set XMLBEANS_HOME=C:\<full path to where xmlbeans was installed>
          export XMLBEANS_HOME=~/ExternalTools/xmlbeans (OS X and Linux example)

    The saxon8.jar file should be copied to the %XMLBEANS_HOME%\lib directory.

   The Ant and XMLBean tools are required to 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 the next time build is executed.

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.

------------------------
A Word on 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 
edk2/Tools/gcc that will download, configure, compile, and install a gcc 
4.X cross-compile tool chain for EDK II development. It has support for 
the IA32 architecture. It can be built and run on Cygwin, Linux, and many 
other POSIX compliant host operating environments. There are a few tools
that you will need on your host computer in order to compile the tool 
chain. Among them are bash, gcc, gmake, curl (or wget).


-----------------------
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 website 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 Unix, please see 
"Detailed Starting Instructions" below)

Follow the instructions at https://edk2.tianocore.org/servlets/ProjectSource to
checkout the entire EDK II source tree.

In a command window, change to the top level directory of the Edk II sources.

To test your tool chain setup and to build the Supplied Tools, execute:
    c:\MyWork\edkii\> edksetup ForceBuild

(The edksetup command will be 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\edkii

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\edkii\> build

This command builds active platform specified in text file target.txt. If 
active platform is not specified, go to sub-directory which contains FPD files and
type build. More information about active platform policy reference to specification
<<EDK II Build and Packaging Architecture Specification>>.

-------------------------------------------------------------------------------
Detailed Start Instructions
---------------------------

Follow the instructions at https://edk2.tianocore.org/servlets/ProjectSource to
checkout the entire EDK II source tree.

In a command window, change to the top level directory of the Edk II sources.

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\edkii\> edksetup ForceBuild

On Unix systems you must source the edksetup.sh file to load the correct
settings into your shell.

    . edksetup.sh # Note the dot.

The edksetup command will be 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.

Any changes to the tool source code or XML Schema documents will require that
you run:
   c:\MyWork\edkii\> edksetup ForceBuild

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\edkii

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\edkii\> build

This command builds active platform specified in text file target.txt. If 
active platform is not specified, go to sub-directory which contains FPD files and
type build. More information about active platform policy reference to specification
<<EDK II Build and Packaging Architecture Specification>>.

-------------------------
Individual Platform Builds
-------------------------
After running the setup command, you can build individual platforms.
  In the command window, 
  1. Set active platform in target.txt, and type "build" in whatever directory;
  2. or cd to the platform (FPD file) that you want to build, and just type:
    c:\MyWork\edkii\EdkNt32Pkg\> build

  Note that active platform with the high priority to build, that means active 
  platform will be built even if exists FPD file under current directory. More 
  information about active platform policy reference to specification
  <<EDK II Build and Packaging Architecture Specification>>. 

Go to <full build path>\DEBUG\MSFT\IA32 and execute SecMain.exe
to run the Nt32 emulation platform under Microsoft Windows.

To exit the Nt32 emulation platform, you may type reset at the EFI Shell>
command prompt.  Alternately, you may use the Graphical interface, Boot
Maintenance Manager screen's Reset System command.

------------------------
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 just
  type:
    c:\MyWork\edkii\MdePkg\Library\BaseLib\> build

  Note active platform must be set for individual module build. 

-------------------------------------------------------------------------------

General Information:
===============================================================    
Mechanisms:
----------
A brief overview:

A) 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 is further explained in the "EDK Build 
and Packaging Architecture Specification" document.
 
B) Module Surface Area Definition (MSA) files.  A description of a module's 
surface area, with all module specific default flags and features specified.
Refer to the "Module Surface Area Architecture Specification" for additional
details. The MSA is further explained in the "EDK II Build Packaging Architecture 
Specification" document.

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.  There are
specific sections in the FPD file that do 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 which contains a
variety of current platform settings or directives by which a driver or
application can interact with.  The PCD is defined by the PCD_Protocol (This is
further explained in the "Platform Configuration Database Infrastructure 
Description" document.

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 may select,
however this is only a recommendation.  The PI may choose to select a different
library instance to be used during compilation/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 only provide an MSA and either source
or binary files when distributing packages.  The Library Classes are further 
explained in the "EDK II Build and Packaging Architecture Specification" 
document.

=========================================================================
The common operations by developers of new modules are:
-------------------------------------------------------

1) How to manually create 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) Add/Remove module(s) to/from a package:

  - Setup environment as Build
  - Add a module to a package
     * Generate the module SurfaceArea description file
     * Add a new <Filename> element under <MsaFiles> into
       <PackageDir>\<PackageName>.spd, using relative path to package
     * Add a new <ModuleSA> entry under each <FrameworkModules> into
       <PackageDir>\<PackageName>.fpd file if necessary. 

   - Remove a module from a package
     * Comment out or remove corresponding <Filename> element under <MsaFiles>
       from <PackageDir>\<PackageName>.spd
     * Comment out or remove corresponding <ModuleSA> entry under each
       <FrameworkModules> from <PackageDir>\<PackageName>.fpd if necessary. 

-----------------------------------
3) How to manually create 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/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 workspace. 

--------------------------------------
4) Declare 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 then the global variable name and
       then 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) Declare 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 PPI base name then the global variable name and then
       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) Declare 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) Declare 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) Declare 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 seection 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>

=======================================================
Notes:
------
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 previous (EDK 1.0) version.

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 - The MDE libraries represent significant changes in source
   (with only limited changes in functionality.)  These new libraries conform
   to the "MDE Library Specification". 
3) The Fat Binary and the EDK Shell Binary Packages are functionally identical
   to the EDK 1.0 version.
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 EDK 1.0 version.
6) The Application "HelloWorld" has been ported to EDK II as well.

=======================================================
Virus scanned by McAfee VirusScan Enterprise 8.0.0, Virus Definitions 4718, no
virus detected.

