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アプリケーションの実装に挑戦。