Differences between EDK and EDK II

Brian Richardson edited this page Feb 25, 2017 · 2 revisions
Clone this wiki locally

What is the difference between EDK and EDK II?

Differences:

Mainly the build architecture is very different. Part of the differences are that the build description files (.dsc .inf, etc) have been enhanced and are different. However, the EDK II build understands EDK build description files so that EDK II build can include EDK source code. There are also build tool differences: EDK II supports a larger number of operating systems and tool chains.

Other differences besides the build include that EDK II has different, richer libraries (MDELIB, etc) which makes some of the source code very different. EDK II also has the package concept so that the directory and file layout is different. EDK II also uses Platform Configuration Database (PCD) for parameterization and fix-up binary support, etc. EDK II supports newer UEFI/PI specifications than EDK (see table below for which versions are supported).

In addition, EDK II has compatibility with EDK style sources through the EdkCompatiblityPkg (ECP). However, this his being depricated in current platforms. This is possible because the ECP will have binary compatability for EDK through its libraies and thunk code.

EDK II is also designed to work with Doxygen to generate design level specifications.

In addition, since EDK II supports the later versions of the UEFI and PI Specifications, there are newer protocols that will be part of EDK II that do not exist in EDK.

Differences Summary:

  • Build infrastructure and Build tools
  • Packages / directory structure
  • Rich Libraries
  • Platform Configuration Database (PCD)
Similarities:

The similarity is that code as far as the Platform Initialization boot execution phases are similar. EDK and EDK II have similar Sec-PEI-DXE-TSL and runtime phases. Also any of the protocol interfaces that are supported in both EDK and EDK II will be the same. Thus since EDK II understands EDK build description files the EDK II build can include EDK source code though the use of the ECP.

The following table is a side by side comparison.

EDK EDK II
Development OS WinXP WinXP/7/8/8.1/10, Linux, OS/X
Compiler/Linker VS2003, VS2005, WinDDK VS2003, VS2005, VS2008, VS2010, VS2013, VS2015, WinDDK, Intel, GCC4, GCC5, LLVM/CLANG
Build nmake nmake, gmake
Build Tools C POSIX C, Python
Target Platforms (open source) NT32, DUET, See EDK II Platforms
Distribution ZIP Files – Entire Tree Packages with XML metadata Packages
  • Standard module distribution method (source/binary)
  • XML – Allows packages/modules to be imported/exported to many build systems
  • EDK Compatibility Package – Provides reuse of EDK source modules
Standards (UEFI) EFI 1.10, UEFI 2.0, UEFI 2.1, Intel Framework, PI 1.0 Focus on UEFI 2.3+/PI 1.2+ Spec Updates. Includes Support for EFI 1.10, UEFI 2.0+, PI 1.0+ & Intel Framework. See UDK2015 release notes for info.
Library binary .Lib files Library Classes/Library Instances
  • Maximize reuse of source code
  • Use library instances to optimize for size or speed
Configuration Method
  1. define
Platform Configuration Database
  • Maximize reuse of source code
  • Allows platform developer/integrator to modify settings without modifying module sources

Some companies want to know what has changed and why. Is there someplace to find this information per release?

The release notes will have a general summary of features and fixes for EDK II changes. See UDK2015 for the latest stable release and release notes.

In the past there were Libraries were associated with PPI

EDK II does not use that model.