changeset 45:1db60e3a946d

backup 2021-02-20
author autobackup
date Sat, 20 Feb 2021 00:10:03 +0900
parents de92cac72df8
children cf7caa17976c
files Gears/Xv6/UEFI.md
diffstat 1 files changed, 147 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Gears/Xv6/UEFI.md	Sat Feb 20 00:10:03 2021 +0900
@@ -0,0 +1,147 @@
+# ARM UEFI
+
+## 環境構築
+1. ssh で amaneに入る
+1. defファイル作成
+- arm cross compile環境を作成
+- edk2は ```/usr/local/src``` にinstallされている
+- gnu-efiがdownloadにダウンロードされ解凍される
+```
+BootStrap: docker
+From: ubuntu:18.04
+
+%post
+    apt-get update
+    apt-get upgrade -y
+    DEBIAN_FRONTEND=noninteractive \
+    apt-get install -y \
+    qemu-utils \
+       qemu-efi-aarch64 \
+        qemu-system-arm \
+        build-essential \
+        uuid-dev \
+        git \
+        python \
+        iasl \
+        nasm \
+    zsh \
+    vim \
+    wget
+    DEBIAN_FRONTEND=noninteractive \
+    apt-get install -y \
+        crossbuild-essential-armhf
+    cd /usr/local/src
+    git clone --recursive https://github.com/tianocore/edk2
+    wget "https://sourceforge.net/projects/gnu-efi/files/gnu-efi-3.0.12.tar.bz2/download"
+    tar xf download
+```
+
+3. sifファイルを生成(https://ie.u-ryukyu.ac.jp/syskan/opening-introduction/singularity.html#10)\
+- ```singularity build --fakeroot xv6.sif xv6.def```
+    
+4. singularity 起動
+- ```singularity run xv6.sif ```
+
+5. 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```が生成される
+
+6. gnu-efiをbuild
+- ```cd gnu-efi-(version)```で移動
+- ```make CROSS_COMPILE=arm-linux-gnueabihf-```でクロスコンパイラでbuild
+   
+7. gnu-efi applicationをbuild
+- ```make CROSS_COMPILE=arm-linux-gnueabihf- apps```\
+    - appsにあるapplicationをbuildする\
+    - buildされたapplicationはarm/appsにあり、```.efi```になっている
+8. QEMUで起動
+- ```qemu-system-arm -m 128 -M virt -bios ./QEMU_EFI.fd -serial stdio -hda fat:rw:arm/apps -curses -net none```
+- qemuを起動後shellが起動する![スクリーンショット 2021-02-19 17.49.27.png](/attachment/602f7ba70a7b37004aefa065)
+- shellに```fs0:```と入力
+    - appsがあるデバイスに移動できる
+- shellに```t.efi``` と入力
+    - ```Hello World```が帰ってくる
+    - ```t.efi```は```Hello World```のサンプルプログラム
+- qemuを抜けられないバグがあり、他のエディタで```killall```して抜ける
+
+
+## Application 実装
+
+1. apps内にC言語でコードを書く(例としてHello.c)
+```
+#include <efi.h>
+#include <efilib.h>
+ 
+EFI_STATUS
+EFIAPI
+efi_main (EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable)
+{
+  InitializeLib(ImageHandle, SystemTable);
+  Print(L"Hello, world!\n");
+  return EFI_
+```
+2. apps内にあるMakefileを修正する
+- TARGET_APPS にHello.efiを追加
+
+3. gnu-efi applicationをbuild
+- ```make CROSS_COMPILE=arm-linux-gnueabihf- apps```
+- arm/appsの中に```Hello.efi```があれば成功
+
+4. 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を入力
+```
+Hello, world!
+```
+## 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``` ネットに繋がない様にしている(これで起動が速くなる)
+
+
+## 参考
+
+- https://tnishinaga.hatenablog.com/entry/2017/06/20/191955
+- https://tnishinaga.hatenablog.com/entry/2017/03/17/035732
+- https://wiki.osdev.org/UEFI
+- https://osdev-jp.readthedocs.io/ja/latest/2017/create-uefi-app-with-edk2.html
+- 
+    
+
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+
+