retrage.github.io

EDK2のクロスコンパイル

tianocore/edk2をx64上でARM向けにクロスコンパイルしてみました。

 ここでは、EDK2のリポジトリにあるBeagleBoardPkgをビルドしてみます。

準備

今回は次のような環境で行いました。

Ubuntu 14.04 LTS

EDK2 df60fb4cc2ca896fcea9e37b06c276d569f1a6b8

Ubuntuはクリーンインストール後の状態から始めました。

まずは必要なものをインストールしてGitリポジトリを取得

$ sudo apt-get install git
$ git clone https://github.com/tianocore/edk2.git
$ cd edk2
  1. ビルド

EDK2をビルドするのに必要なものをインストールします。

$ sudo apt-get install build-essential uuid-dev gcc-arm-none-eabi

次に以下を実行。

$ make -C BaseTools/
$ . edksetup.sh

次にConf/target.txtを編集します。ここでは以下のようにしました。

ACTIVE_PLATFORM       = BeagleBoardPkg/BeagleBoardPkg.dsc
TARGET_ARCH           = ARM
TOOL_CHAIN_TAG        = GCC48

edk2/でbuildを実行。ただし、Pythonが2.7系であることを確認してください。Python3だと動かないようです。

$ build GCC48_ARM_PREFIX="arm-none-eabi-"

なお、私の環境では最初は上記のコマンドでビルドできましたが、なぜか途中から与えたprefixを読み込んでくれなくなってしまいました。

その場合は、上のmake後にConf/tools_def.txtを編集して無理矢理prefixをつけて対処しました。

問題なくビルドできたらBuild/BeagleBoard/DEBUG_GCC48/にファイルが置かれているはずです。この中にFVというディレクトリがあり、

$ ls Build/BeagleBoard/DEBUG_GCC48/FV/
BEAGLEBOARD_EFI.fd FVMAIN_COMPACT.Fv.map FVMAIN.ext FVMAIN.Fv.txt Guid.xref
Ffs FVMAIN_COMPACT.Fv.txt FVMAIN.Fv FVMAIN.inf
FVMAIN_COMPACT.Fv FVMAIN_COMPACT.inf FVMAIN.Fv.map GuidedSectionTools.txt

この中のBEAGLEBOARD_EFI.fdを使うと、BeagleBoard上でUEFIを使うことができるようになります。

 

参考