| 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 |