# 環境構築
- ssh で amaneに入る
- defファイル作成
- arm cross compile環境を作成
- edk2は
/usr/local/srcにinstallされている - gnu-efiがdownloadにダウンロードされ解凍される
|
|
singularity build --fakeroot xv6.sif xv6.def
- singularity 起動
singularity run xv6.sif
- singularity上でedk2からQEMU_EFI.fdを作成する
cd edk2でedk2に移動しmake -C BaseToolsでBaseToolsをbuildするsource edksetup.shexport GCC5_ARM_PREFIX=arm-linux-gnueabihf-で環境設定build -a ARM -t GCC5 -p ArmVirtPkg/ArmVirtQemu.dscでQEMU用のUEFIイメージをビルドQEMU_EFI.fdが生成される
- gnu-efiをbuild
cd gnu-efi-(version)で移動make CROSS_COMPILE=arm-linux-gnueabihf-でクロスコンパイラでbuild
- gnu-efi applicationをbuild
make CROSS_COMPILE=arm-linux-gnueabihf- apps\- appsにあるapplicationをbuildする\
- buildされたapplicationはarm/appsにあり、
.efiになっている
- QEMUで起動
qemu-system-arm -m 128 -M virt -bios ./QEMU_EFI.fd -serial stdio -hda fat:rw:arm/apps -curses -net none- qemuを起動後shellが起動する
- shellに
fs0:と入力- appsがあるデバイスに移動できる
- shellに
t.efiと入力Hello Worldが帰ってくるt.efiはHello Worldのサンプルプログラム
- qemuを抜けられないバグがあり、他のエディタで
killallして抜ける
# Application 実装
- apps内にC言語でコードを書く(例としてHello.c)
|
|
- apps内にあるMakefileを修正する
- TARGET_APPS にHello.efiを追加
- gnu-efi applicationをbuild
make CROSS_COMPILE=arm-linux-gnueabihf- apps- arm/appsの中に
Hello.efiがあれば成功
- qemuで起動し、動かす
qemu-system-arm -m 128 -M virt -bios ./QEMU_EFI.fd -serial stdio -hda fat:rw:arm/apps -curses -net none- shellに
fs0:と入力 - Hello.efiを入力
|
|
# QEMUコマンド
qemu-system-armarmのエミュレータ-m 128メモリを128Mb-M virtVirtプラットフォーム-bios ./QEMU_EFI.fdbiosにQEMU_EFI.fdを起動する-serial stdioこれがないと映らない(多分ディスプレイ関係)-hda fat:rw:arm/appsディスクとしてarm/apps を用意している-cursesこれがないとsingularity上でqemuが使えない-net noneネットに繋がない様にしている(これで起動が速くなる)