# 環境構築
- 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.sh
export 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-arm
armのエミュレータ-m 128
メモリを128Mb-M virt
Virtプラットフォーム-bios ./QEMU_EFI.fd
biosにQEMU_EFI.fdを起動する-serial stdio
これがないと映らない(多分ディスプレイ関係)-hda fat:rw:arm/apps
ディスクとしてarm/apps を用意している-curses
これがないとsingularity上でqemuが使えない-net none
ネットに繋がない様にしている(これで起動が速くなる)