bloggerads

2015年4月10日 星期五

UEFI : Build EDK2 module (UDK2014 / UDK2015) and a Demo code

EDK2最近 release 穩定的版本為UDK2014 和 UDK2015

首先, 到sourceforges下載TianoCore code: https://sourceforge.net/p/tianocore/edk2/ci/UDK2015/tree/
我是下載UDK20014

如果是下載UDK2015, 請先將資料夾放到對應的位置

1. Unzip UDK2015.MyWorkSpace.zip & BaseTools(Windows).zip
2. Put BaseTools, Conf, edkstup.bat to MyWorkSpace

如果是使用Linux則可以直接透過git 取得,
bash$:   sudo apt-get install git
bash$:   git clone http://github.com/tianocore/edk2

*** How to Build ***

以下是針對Windows+Visual Studio作為範例的編譯流程

1.修改 Conf\target.txt (因為這裡compiler出來的.efi是跑在真實的電腦上,非模擬器上)

ACTIVE_PLATFORM       =      Nt32Pkg/Nt32Pkg.dsc
ACTIVE_PLATFORM       =      MdeModulePkg/MdeModulePkg.dsc

2. Build

# build X64 module

> 開啟 "Visual Studio x64 Cross Tools Command Prompt (2010)"這個命令提示字元

> 執行edksetup.bat

# 如果是64bit環境,就需要指定x86(IA32)或64位元(X64)哪種版本的Visual Studio來build code

> build -a X64 -t VS2010   (環境是Win7 32bit, build X64的module)
or
> build -a X64 -t VS2010x86   (環境是Win7 64bit, Visual studio是32位元的,然後 build X64的module)
or
>  build -a X64 -t VS2010x86  -p  MdeModulePkg/MdeModulePkg.dsc (省略修改Conf\target.txt這個步驟)

3. 完成

會自動產生一個build資料夾,檔案的位置如下

\Build\MdeModule\DEBUG_VS2010\X64\xxx.efi


*** How to build UEFI Shell APP with Standard C Library & C entry in  ***


// 以下是以 UDK2014的 project 做範例

以App這個Package中main module為例, 她對應的file為 AppPkg\Application\Main\Main.c
將code改好後執行 build -a X64 -t VS2010 -p AppPkg\AppPkg.dsc

#include  <stdio.h>
//宣告下列的外部變數未來可用來呼叫UEFI提供的一些library
//{
#include <Uefi.h>
#include <Library/UefiLib.h>
#include <Library/DebugLib.h>
#include <Library/ShellCEntryLib.h>


#include <Protocol/EfiShell.h>

#include <Library/ShellLib.h>

extern EFI_BOOT_SERVICES           *gBS;

extern EFI_SYSTEM_TABLE  *gST;
extern EFI_RUNTIME_SERVICES *gRT;

extern EFI_SHELL_PROTOCOL             *gEfiShellProtocol;

extern EFI_SHELL_ENVIRONMENT2 *mEfiShellEnvironment2;

extern EFI_HANDLE  gImageHandle;

//}


int
main (
  IN int Argc,
  IN char **Argv
  )
{
  puts("Welcome to the world of EDK II.");
  return 0;
}

Reference:
PciIoProtocol sample
PciDump sample

沒有留言:

張貼留言