Ubuntu12.10でEDK2をビルド

Getting Started with EDK IIに従ってEDK2をUbuntuでビルドしてみた。

  • Edk2 source tree: $HOME/src/edk2
  • Native GCC 4.4 compiler installation: /usr/bin/gcc
  • Intel ASL Compiler installation: /usr/bin/iasl

これらが必要ということなのでまずはインストール。

$ sudo apt-get install build-essential subversion uuid-dev iasl

続いてソースをチェックアウト。

$ mkdir ~/src
$ cd ~/src
$ svn co https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2
$ make -C edk2/BaseTools

ビルド環境のセットアップ。

$ cd ~/src/edk2
$ export EDK_TOOLS_PATH=$HOME/src/edk2/BaseTools
$ . edksetup.sh BaseTools

'Conf/target.txt'の修正。

-- Conf/target.txt
ACTIVE_PLATFORM       = MdeModulePkg/MdeModulePkg.dsc
TOOL_CHAIN_TAG        = GCC46
TARGET_ARCH              = X64

TOOL_CHAIN_TAGは、'gcc --version'でgccのバージョンを確かめて、gcc4.5.*ならGCC45、gcc4.6.*ならGCC46とする。 (GCC47というのはないようだったのでgcc4.6をインストールして、'Conf/tools_def.txt'の'GCC46 X64 definitions'セクションの'gcc'を'gcc-4.6'に変更した。)
TARGET_ARCHにはアーキテクチャを指定。うちのマシンだとX64

ビルド。

$ build

'HelloWorld.debug'が存在しないというエラーが出たので'Conf/tools_def.txt'を修正。 バックスラッシュからスラッシュへ変更。

-- Conf/tools_def.txt
# NG!!!
DEBUG_*_*_OBJCOPY_ADDDEBUGFLAG     = --add-gnu-debuglink=$(DEBUG_DIR)\$(MODULE_NAME).debug
# OK
DEBUG_*_*_OBJCOPY_ADDDEBUGFLAG     = --add-gnu-debuglink=$(DEBUG_DIR)/$(MODULE_NAME).debug

さらに以下のエラーが発生。

MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableProtocol.c:723:26: error: ‘AcpiSupportInstance’ undeclared (first use in this function)

周辺のソースを眺めてみると、AcpiSupportInstanceではなくAcpiTableInstanceが正しそうだったので修正。

$ build

ようやくビルド成功。
続いてEFI ShellとHelloWorldのEFIアプリケーションをUSBへコピー。

$ mkdir -p /path/to/usb/EFI/Boot
$ mkdir -p /path/to/usb/EFI/edk2
$ cp EdkShellBinPkg/FullShell/X64/Shell_Full.efi /path/to/usb/EFI/Boot/bootx64.efi
$ cp Build/MdeModule/DEBUG_*/*/HelloWorld.efi /path/to/usb/EFI/edk2/HelloWorld.efi

PCを再起動してbootx64.efiからの起動を選択。

Shell> fs2:
fs2:\> cd EFI\edk2
fs2:\> HelloWorld.efi
UEFI Hello World!

動いたー!
ちなみにOS起動用のEFIアプリを実行すればOSを起動できる。

Shell> fs0:
fs0:\> cd EFI\ubuntu
fs0:\> grubx64.efi

次はEFIアプリケーションの実装に挑戦。