Intel(R) Platform Innovation Framework for EFI
EFI Development Kit 2.0 (EDK 2.0) 
Alpha Release
2006-04-26

Copyright (c) 2006, Intel Corporation

This document provides updates to documentation, along with a description on 
how to install and build the Edk 2.0.

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 2.0 Packages.  It is also recommended that the top level files included
with the EDK be downloaded in conjunction with these two packages.

Note: Documents have the following filenames:
  EDK 2.0 Module Development Environment Library Specification v0.50 
      (MDE_Library_Spec_0_50.rtf)
  EDK 2.0 Build and Packaging Architecture Specification v0.50
      (Build_Packaging_Spec_0_50.rtf)
  EDK 2.0 Platform Configuration Database Infrastructure Description v0.51
      (PCD_Infrastructure_0_51.rtf)
  EDK 2.0 Module Surface Area v0.50
      (Module_Surface_Area_0_50.rtf)
  EDK 2.0 Module Development Environment (MDE) Package Specification v0.50
      (MDE_Package_Spec_0_50.rtf)
  EDK 2.0 C Coding Standards Specification v0.50
      (C_Coding_Standards_Specification_ 0_50.rtf)

Pre-Requisites
--------------
The following list of tools must be installed on the development workstation
prior to using the Edk 2.0.

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_04 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://sourceforge.net/project/showfiles.php?group_id=36177)
    Saxon8, version 8.1.1
      (http://prdownloads.sourceforge.net/saxon/saxonb8-1-1.zip?download)
    XMLBeans, version 2.1.0 or later (http://xmlbeans.apache.org) 

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 2.0 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 2.0 repository is:
  https://edk2.tianocore.org/svn/edk2/trunk/edk2

-----------------------
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 2.0 source tree. Refer to the checkout procedures on
the Tianocore.org website for EDK 2.0.

The URL of the document repository is:
  https://edk2.tianocore.org/svn/edk2/trunk/docs


-----------------------
Notes On Required Tools (MS Windows environment example)
-----------------------
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.
       i.e. For Sun JDK (see note below*):
              set JAVA_HOME=c:\ Java\jdk1.5.0_06  
       i.e. For Bea Systems:
              set JAVA_HOME=c:\Program Files\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>

    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>

    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
 
-------------------------------------------------------------------------------
Quick Start
-----------
Edit the text file, msft_tools_def.txt, located in the Tools/Conf directory.
This file contains the names of the compiler tool chains and the location of
the compiler binaries.  It has been pre-populated with the standard location
for the Microsoft tool chains and includes the standard location of the Intel C
Compiler for EFI Byte Code (EBC)
  
Follow the instructions at https://edk2.tianocore.org/servlets/ProjectSource to
checkout the entire EDK 2.0 source tree.

In a command window, change to the top level directory of the Edk 2.0 sources.
  Set the WORKSPACE environment variable, e.g.:

    c:\> set WORKSPACE=C:\MyWork\Edk2.0

To test your tool chain setup and to build the Supplied Tools, execute:
    c:\MyWork\Edk2.0\> edksetup

(This 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.

Once this is completed, you are ready to test the Build, by executing:
    c:\MyWork\Edk2.0\> ant

This command builds all of the packages, including the NT32 reference platform.

------------------------------------
Build Architectures other than IA32.
------------------------------------

By default, we are set up to build the ia32 architecture. If you would like to
build for IPF, x64 and EBC, please copy MdePkg/MdePkg-All-Arch.fpd to
MdePkg/MdePkg.fpd. For EdkModulePkg, copy EdkModulePkg-All-Archs.fpd to
EdkModulePkg.fpd. Note, you may also add only the architecture you want from
the -All-Archs files to the main fpd file. This is preferred if you do not have
all the compilers installed.

Optionally, you may modify the path to the compiler in
Tools/Conf/msft_tools_def.txt. The flags for the ARCH tool chain are set in the
file names by Tools/Conf/VENDOR_tools.txt, where VENDOR is set in
Tools/Conf/msft_tools.txt.

For example, if IPF_VENDOR = WINDDK, then the flags for the IPF DDK compiler
will be specified in Tools/Conf/winddk_tools.txt.

-------------------------
Individual Package Builds
-------------------------
After running the setup command, you can build individual packages.
  In the command window, cd to the package that you want to build, and just
  type:
    c:\MyWork\Edk2.0\EdkNt32Pkg\> ant

The EdkNt32Pkg has a special target; "run" that will execute 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\Edk2.0\MdePkg\Library\BaseLib\> ant

-------------------------------------------------------------------------------
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 Edk2.0 are auto-generated; any edits performed on the
build.xml files will be overwritten the next time ant is executed.

Pre-defined targets in the build.xml files 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
------------------------
EDK2 will not compile with a standard Linux gcc tool chain. While Linux
distributions are usually based on ELF, EDK2 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 EDK2 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).

-------------------------------------------------------------------------------

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 "Build 
Packaging 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 "Build Packaging Specification"
document.
 
C) Module Build Description (MDB). The "as-built" definition file that contains
only the changes to the default flags defined in the MSA. The MSA and MDB are
further explained in the "Build Packaging Specification" document.

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 MBD file specifies the
instance(s) of the library that will be used during compilation/linking. All
library type modules must include header files in their distribution package,
as well as their surface area and module build description files. Components,
on the other hand, need only provide the binary and build description files
when distributing BINARY packages.  The Library Classes are further explained
in the "Build Packaging 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 and build description
       file
     * Run GenBuildFile.bat under <PackageDir> to generate an entrance
       build.xml for the module
     * Add a new <MsaFile> element under <MsaFiles> into
       <PackageDir>\<PackageName>.spd, using relative path to package
     * Add a new <ModuleSA> entry under each <TianoImage> into
       <PackageDir>\<PackageName>.fpd file

   - Remove a module from a package
     * Comment out or remove corresponding <MsaFile> element under <MsaFiles>
       from <PackageDir>\<PackageName>.spd
     * Comment out or remove corresponding <ModuleSA> entry under each
       <TianoImage> from <PackageDir>\<PackageName>.fpd

-----------------------------------
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.

--------------------------------------
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="UnicodeCollation">
  <C_Name>gEfiUnicodeCollationProtocolGuid</C_Name>
  <Guid>{ 0x1d85cd7f, 0xf43d, 0x11d2, 0x9a, 0xc, 0x0, 0x90, 0x27,
    0x3f, 0xc1, 0x4d }</Guid>
  <Entry Name="UsbHc">
  <C_Name>gEfiUsbHcProtocolGuid</C_Name>
  <Guid>{ 0xf5089266, 0x1aa0, 0x4953, 0x97, 0xd8, 0x56, 0x2f, 0x8a,
    0x73, 0xb5, 0x19 }</Guid>

---------------------------------
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="NtPeiLoadFile">
    <C_Name>gNtPeiLoadFilePpiGuid</C_Name>
    <Guid>{ 0xfd0c65eb, 0x405, 0x4cd2, 0x8a, 0xee, 0xf4, 0x0, 0xef, 0x13,
      0xba, 0xc2 }</Guid>
  </Entry>
  <Entry Name="NtThunk">
    <C_Name>gPeiNtThunkPpiGuid</C_Name>
    <Guid>{ 0x98c281e5, 0xf906, 0x43dd, 0xa9, 0x2b, 0xb0, 0x3, 0xbf,
      0x27, 0x65, 0xda }</Guid>
  </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) Define 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.

<PcdDefinitions>
  <PcdEntry ItemType="FIXED_AT_BUILD">
    <C_Name>PcdMaximumUnicodeStringLength</C_Name>
    <Token>0x00000001</Token>
    <DatumType>UINT32</DatumType>
    <DefaultValue>1000000</DefaultValue>
  </PcdEntry>
</PcdDefinition>
  
------------------------------
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>
  <LibraryClassDeclaration>
    <LibraryClass>BaseLib</LibraryClass>
    <IncludeHeader>Include/Library/BaseLib.h</IncludeHeader>
  </LibraryClassDeclaration>
</LibraryClassDeclarations>

--------------------------------------
9) Add a library instance to a package:
  - This requires manual MSA and MBD file.

-----------------------------
10) Add a module to a package:
  - This requires manual MSA and MBD editing


=======================================================
Notes:
------
The EDK 2.0 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 2.0 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 2.0 as well.

=======================================================
Virus scanned by McAfee VirusScan Enterprise 8.0.0, Virus Definitions 4718, no
virus detected.

