mirror of
				https://git.proxmox.com/git/mirror_edk2
				synced 2025-11-03 22:54:50 +00:00 
			
		
		
		
	Changed MdePkg to OldMdePkg in the text. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@2685 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			725 lines
		
	
	
		
			32 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			725 lines
		
	
	
		
			32 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
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
 |