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
- ビルド
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を使うことができるようになります。