+Intel(R) Platform Innovation Framework for EFI\r
+EFI Development Kit 2.0 (EDK 2.0) \r
+Alpha Release\r
+2006-04-26\r
+\r
+Copyright (c) 2006, Intel Corporation\r
+\r
+This document provides updates to documentation, along with a description on \r
+how to install and build the Edk 2.0.\r
+\r
+Package Contents\r
+----------------\r
+ ReleaseNote.txt- These release notes for the package.\r
+ MdePkg - A package containing Industry Standard headers and libraries\r
+ Tools - A package containing Build Specific tools which are designed\r
+ to help the developer create and modify drivers and\r
+ libraries\r
+ EdkModulePkg - A package containing reference drivers\r
+ EdkFatBinPkg - A package containing binary DXE drivers for the Fat 32 file\r
+ system\r
+ EdkShellBinPkg - A package containing binary Shell applications and commands\r
+ EdkNt32Pkg - A package containing the NT32 Emulation platform reference\r
+\r
+Note: MDE and MDK that appear in other documentation refer to the MdePkg and\r
+Tools packages. These two packages are the minimum requirement for developing\r
+EDK 2.0 Packages. It is also recommended that the top level files included\r
+with the EDK be downloaded in conjunction with these two packages.\r
+\r
+Note: Documents have the following filenames:\r
+ EDK 2.0 Module Development Environment Library Specification v0.50 \r
+ (MDE_Library_Spec_0_50.rtf)\r
+ EDK 2.0 Build and Packaging Architecture Specification v0.50\r
+ (Build_Packaging_Spec_0_50.rtf)\r
+ EDK 2.0 Platform Configuration Database Infrastructure Description v0.51\r
+ (PCD_Infrastructure_0_51.rtf)\r
+ EDK 2.0 Module Surface Area v0.50\r
+ (Module_Surface_Area_0_50.rtf)\r
+ EDK 2.0 Module Development Environment (MDE) Package Specification v0.50\r
+ (MDE_Package_Spec_0_50.rtf)\r
+ EDK 2.0 C Coding Standards Specification v0.50\r
+ (C_Coding_Standards_Specification_ 0_50.rtf)\r
+\r
+Pre-Requisites\r
+--------------\r
+The following list of tools must be installed on the development workstation\r
+prior to using the Edk 2.0.\r
+\r
+Compiler Tool Chain\r
+ Microsoft* Visual Studio .NET 2003* (http://www.microsoft.com)\r
+ or\r
+ GCC version 4.x or later (http://gcc.gnu.org)\r
+\r
+Assembler Tool Chain\r
+ Microsoft Macro Assembler, version 6.15 or later\r
+ or\r
+ GCC version 4.x or later\r
+\r
+Java Development Kit ( Java 5.0 or later)\r
+ Sun* jdk-1.5.0_04 or later (http://java.sun.com)\r
+ or\r
+ Bea Systems* jrockit-25.2.0-jdk1.5.0_03 or later (http://www.bea.com)\r
+\r
+Java Tools\r
+ Apache-ANT, version 1.6.5 or later (http://ant.apache.org)\r
+ Ant-contrib, version 1.0b2 or later (http://antcontrib.sourceforge.net)\r
+ Saxon8, version 8.1.1\r
+ (http://prdownloads.sourceforge.net/saxon/saxonb8-1-1.zip?download)\r
+ XMLBeans, version 2.1.0 or later (http://xmlbeans.apache.org) \r
+\r
+Other Tools\r
+ TortoiseSVN version 1.3.3. (http://tortoisesvn.tigris.org/)\r
+\r
+Optional Tools\r
+--------------\r
+Compiler Tool Chains:\r
+ Intel C++ Compiler for Windows, ver. 9.0 or later (http://www.intel,com)\r
+ Intel C Compiler for EFI Byte Code, ver. 1.2 or later\r
+ Microsoft Driver Development Kit, version 3790.1830 or later\r
+ Microsoft ACPI Source Language Assembler, Version 1.0.13NT or later\r
+ Intel ACPI Component Architecture, version 20060113\r
+\r
+-----------------------\r
+Notes On Required Tools (Source Control System)\r
+-----------------------\r
+The EDK 2.0 is being managed by the Subversion Source Control on Tianocore.org.\r
+This software package provides speed, security, and additional features. The\r
+recommended client is TortoiseSVN version 1.3.3. \r
+ (Available at http://tortoisesvn.tigris.org/)\r
+\r
+There are instructions for the use of Subversion Source Control on the\r
+Tianocore.org website, as part of the checkout procedures.\r
+\r
+The URL of the EDK 2.0 repository is:\r
+ https://edk2.tianocore.org/svn/edk2/trunk/edk2\r
+\r
+-----------------------\r
+Notes On Documentation\r
+-----------------------\r
+The documents are being managed by the Subversion Source Control on\r
+Tianocore.org. The document repository is "docs" and must be checked out\r
+separately from the EDK 2.0 source tree. Refer to the checkout procedures on\r
+the Tianocore.org website for EDK 2.0.\r
+\r
+The URL of the document repository is:\r
+ https://edk2.tianocore.org/svn/edk2/trunk/docs\r
+\r
+\r
+-----------------------\r
+Notes On Required Tools (MS Windows environment example)\r
+-----------------------\r
+Software Installation Order:\r
+ After installing the compiler tools and your Subversion client, the following\r
+ required tools should be installed in order: \r
+ Java JDK, Apache-Ant, ant-contrib, xmlbeans, saxon8\r
+\r
+Java Development Kit:\r
+ \r
+ The Java Environment Variable must be set before attempting to build.\r
+ i.e. For Sun JDK (see note below*):\r
+ set JAVA_HOME=c:\ Java\jdk1.5.0_06 \r
+ i.e. For Bea Systems:\r
+ set JAVA_HOME=c:\Program Files\Java\jrockit-R26.0.0-jdk1.5.0_04\r
+ \r
+ *When using the Sun JDK5.0\r
+ During installation, you should specify the install directory as C:\Java\r
+ instead of C:\Program Files\(or some other drive letter.) While installing\r
+ to this non-standard location is not required. In use, it seems to work \r
+ more reliably. \r
+ For the JDK, the install path would be C:\Java\jdk1.5.0_06\r
+ For the JRE, the install path would be C:\Java\jre1.5.0_06\r
+ Alternatively, you can specify C:\sunjavajdk and C:\sunjavajre.\r
+ NOTE: You cannot combine the location for the JDK and the JRE, as the JRE\r
+ install removes most of the binaries and libraries installed by the JDK\r
+ install.\r
+\r
+Java Tools:\r
+ The Apache-ANT requires the ANT_HOME environment variable to be set before\r
+ attempting to build:\r
+ i.e. set ANT_HOME=c:\ant\r
+\r
+ The ant-contrib.jar file should be installed in the %ANT_HOME%\lib \r
+ directory.\r
+\r
+ The XMLBeans, requires the XMLBEANS_HOME environment variable to be set\r
+ before attempting to build:\r
+ i.e. set XMLBEANS_HOME=C:\XMLBEANS \r
+\r
+ The saxon8.jar file should be copied to the %XMLBEANS_HOME%\lib directory.\r
+\r
+ The Ant and XMLBean tools are required to be in the path.\r
+ MS system example:\r
+ set PATH=%PATH%;%ANT_HOME%\bin;%XMLBEANS_HOME%\bin\r
+ Linux/OS X bash shell example:\r
+ export PATH=$PATH:${ANT_HOME}/bin:${XMLBEANS_HOME}/bin\r
+ \r
+-------------------------------------------------------------------------------\r
+Quick Start\r
+-----------\r
+Edit the text file, tools_def.txt, located in the Tools/Conf directory. This\r
+file contains the names of the compiler tool chains and the location of the\r
+compiler binaries. It has been pre-populated with the standard location for\r
+the Microsoft tool chains and includes the standard location of the Intel C \r
+Compiler for EFI Byte Code (EBC)\r
+ \r
+Follow the instructions at https://edk2.tianocore.org/servlets/ProjectSource to\r
+checkout the entire EDK 2.0 source tree.\r
+\r
+In a command window, change to the top level directory of the Edk 2.0 sources.\r
+ Set the WORKSPACE environment variable, e.g.:\r
+\r
+ c:\> set WORKSPACE=C:\MyWork\Edk2.0\r
+\r
+To test your tool chain setup and to build the Supplied Tools, execute:\r
+ c:\MyWork\Edk2.0\> edksetup\r
+\r
+(This command will be referred to as the setup command throughout the rest of\r
+this document.)\r
+ NOTE: You should run the setup command at the start of every session.\r
+ This configures the environment to include the TianoTools and the\r
+ Java applications and libraries.\r
+\r
+Once this is completed, you are ready to test the Build, by executing:\r
+ c:\MyWork\Edk2.0\> ant\r
+\r
+This command builds all of the packages, including the NT32 reference platform.\r
+\r
+-------------------------\r
+Individual Package Builds\r
+-------------------------\r
+After running the setup command, you can build individual packages.\r
+ In the command window, cd to the package that you want to build, and just\r
+ type:\r
+ c:\MyWork\Edk2.0\EdkNt32Pkg\> ant\r
+\r
+The EdkNt32Pkg has a special target; "run" that will execute the Nt32 emulation\r
+platform under Microsoft Windows.\r
+\r
+------------------------\r
+Individual Module Builds\r
+------------------------\r
+After running the setup command, you can build individual modules.\r
+ In the command window, cd to the module that you want to build, and just\r
+ type:\r
+ c:\MyWork\Edk2.0\MdePkg\Library\BaseLib\> ant\r
+\r
+-------------------------------------------------------------------------------\r
+A Word on Apache-ANT\r
+--------------------\r
+The Apache-ANT program is a build tool that uses XML-based project files.\r
+Similar to Makefiles, these project files may contain multiple targets. Most\r
+build.xml files in Edk2.0 are auto-generated; any edits performed on the\r
+build.xml files will be overwritten the next time ant is executed.\r
+\r
+Pre-defined targets in the build.xml files include:\r
+ all - This target builds binaries for defined architectures\r
+ clean - This target removes object files generated by commands\r
+ cleanall - This target removes all generated files and directories.\r
+\r
+A Word on GCC tool chain\r
+------------------------\r
+You will find a script in the tree that will download, configure, compile, and\r
+install a gcc 4.0.2 tool chain for development. It has support for the ia32\r
+architecture. It can be built and run on Cygwin, Linux, and many other POSIX\r
+compliant host environments. There are a few tools that you will need on your\r
+host computer in order to compile the tool chain. Among them are bash, gcc,\r
+gmake, curl (or wget).\r
+\r
+-------------------------------------------------------------------------------\r
+\r
+General Information:\r
+=============================================================== \r
+Mechanisms:\r
+----------\r
+A quick understanding:\r
+\r
+A) Surface Area Package Description (SPD) file contains information about the\r
+modules that the package contains, including the location of all MSA files, and\r
+public library names and headers that might be provided by a module in the\r
+package. Packages are defined by SPD files. (Found in the root of the Package\r
+subdirectory (i.e. EdkNt32Pkg)) The SPD is further explained in the "Build \r
+Packaging Specification" document.\r
+ \r
+B) Module Surface Area Definition (MSA) files. A description of a module's \r
+surface area, with all module specific default flags and features specified.\r
+Refer to the "Module Surface Area Architecture Specification" for additional\r
+details. The MSA is further explained in the "Build Packaging Specification"\r
+document.\r
+ \r
+C) Module Build Description (MDB). The "as-built" definition file that contains\r
+only the changes to the default flags defined in the MSA. The MSA and MDB are\r
+further explained in the "Build Packaging Specification" document.\r
+\r
+D) Platform Configuration Database (PCD). A platform database which contains a\r
+variety of current platform settings or directives by which a driver or\r
+application can interact with. The PCD is defined by the PCD_Protocol (This is\r
+further explained in the "Platform Configuration Database Infrastructure \r
+Description" document.\r
+\r
+E) Library Class. A library class is a logical grouping of similar functions.\r
+When developing components, the module surface area declares the class of\r
+libraries that can be used by the component. The MBD file specifies the\r
+instance(s) of the library that will be used during compilation/linking. All\r
+library type modules must include header files in their distribution package,\r
+as well as their surface area and module build description files. Components,\r
+on the other hand, need only provide the binary and build description files\r
+when distributing BINARY packages. The Library Classes are further explained\r
+in the "Build Packaging Specification" document.\r
+\r
+=========================================================================\r
+The common operations by developers of new modules are:\r
+-------------------------------------------------------\r
+\r
+1) How to manually create a new module in a package:\r
+ - The module source code must first be created in an appropriate directory\r
+ (under the package the module is to be a part of.) \r
+ - An MSA file must be created, spelling out all aspects of the module.\r
+ - The MSA must be added to the SPD for the package to include the module.\r
+\r
+-----------------------------------------\r
+2) Add/Remove module(s) to/from a package:\r
+\r
+ - Setup environment as Build\r
+ - Add a module to a package\r
+ * Generate the module SurfaceArea description file and build description\r
+ file\r
+ * Run GenBuildFile.bat under <PackageDir> to generate an entrance\r
+ build.xml for the module\r
+ * Add a new <MsaFile> element under <MsaFiles> into\r
+ <PackageDir>\<PackageName>.spd, using relative path to package\r
+ * Add a new <ModuleSA> entry under each <TianoImage> into\r
+ <PackageDir>\<PackageName>.fpd file\r
+\r
+ - Remove a module from a package\r
+ * Comment out or remove corresponding <MsaFile> element under <MsaFiles>\r
+ from <PackageDir>\<PackageName>.spd\r
+ * Comment out or remove corresponding <ModuleSA> entry under each\r
+ <TianoImage> from <PackageDir>\<PackageName>.fpd\r
+\r
+-----------------------------------\r
+3) How to manually create a package:\r
+ - Identify the modules that are to be members of the project.\r
+ - Identify the Variables and Guids required in and of the Package (including\r
+ consumption/production information).\r
+ - Create an SPD file defining these modules and calling out their MSA files.\r
+\r
+--------------------------------------\r
+4) Declare a new Protocol in a package: \r
+ - This release requires manual editing of the SPD file, adding the protocol\r
+ to the ProtocolDeclarations section of the file. \r
+ - Add the Protocol .h file to the Include\Protocol directory.\r
+ - Add an entry to the Protocol.info file\r
+ * Each line contains Protocol base name then the global variable name and\r
+ then the hex value of the Protocol GUID.\r
+\r
+Example Protocol.info file (2 lines):\r
+UnicodeCollation gEfiUnicodeCollationProtocolGuid\r
+ { 0x1d85cd7f, 0xf43d, 0x11d2, 0x9a, 0xc, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d } \r
+UsbHc gEfiUsbHcProtocolGuid\r
+ { 0xf5089266, 0x1aa0, 0x4953, 0x97, 0xd8, 0x56, 0x2f, 0x8a, 0x73, 0xb5, 0x19 }\r
+\r
+---------------------------------\r
+5) Declare a new PPI in a package:\r
+ - This release requires manual editing of the SPD file\r
+ - Add the PPI .h file to the Include\Ppi directory.\r
+ - Add an entry to the Ppi.info file\r
+ * Each line contains PPI base name then the global variable name and then\r
+ the hex value of the PPI GUID.\r
+\r
+Example Ppi.info file (2 lines):\r
+NtPeiLoadFile gNtPeiLoadFilePpiGuid\r
+ { 0xfd0c65eb, 0x405, 0x4cd2, 0x8a, 0xee, 0xf4, 0x0, 0xef, 0x13, 0xba, 0xc2 }\r
+NtThunk gPeiNtThunkPpiGuid\r
+ { 0x98c281e5, 0xf906, 0x43dd, 0xa9, 0x2b, 0xb0, 0x3, 0xbf, 0x27, 0x65, 0xda }\r
+\r
+----------------------------------\r
+6) Declare a new GUID in a package:\r
+ - This release requires manual editing of the SPD file to include the new\r
+ Guid.\r
+\r
+--------------------------------------- \r
+7) Declare a new PCD entry in a package:\r
+ - This release requires manual editing of the SPD file to include the new\r
+ PCD.\r
+ \r
+------------------------------\r
+8) Declare a new Library Class:\r
+ - This release requires manual editing of the SPD file to include the new\r
+ Library Class.\r
+\r
+--------------------------------------\r
+9) Add a library instance to a package:\r
+ - This requires manual MSA and MBD file.\r
+\r
+-----------------------------\r
+10) Add a module to a package:\r
+ - This requires manual MSA and MBD editing\r
+\r
+\r
+=======================================================\r
+Notes:\r
+------\r
+The EDK 2.0 represents significant changes in the structure of the EDK.\r
+Therefore it is very difficult to isolate all of the changes of this version of\r
+the EDK with the previous (EDK 1.0) version.\r
+\r
+Of particular note:\r
+\r
+1) EDK 2.0 contains new hardware feature support for the ICH SMBUS Libraries.\r
+ These libraries are provided to make Memory Reference Code (MRC) development\r
+ easier.\r
+2) The MDE Libraries - The MDE libraries resent significant changes in source\r
+ (with only limited changes in functionality.) These new libraries conform\r
+ to the "MDE Library Specification". \r
+3) The Fat Binary and the EDK Shell Binary Packages are functionally identical\r
+ to the EDK 1.0 version.\r
+4) The EDK tools directory has been expanded to include more tools and more\r
+ tool functionality.\r
+5) The EDK NT32 section has been ported to the new build process, but\r
+ functionally remains the same as the EDK 1.0 version.\r
+6) The Application "HelloWorld" has been ported to EDK 2.0 as well.\r
+\r
+=======================================================\r
+Virus scanned by McAfee VirusScan Enterprise 8.0.0, Virus Definitions 4718, no\r
+virus detected.\r
+\r