過程が大事

学んだことを適当にアウトプットします

Mikan OSを自作してみる #4

今回やった内容

  • EDK2について学んだ
  • ビルド環境の構築を行なった

学習記録

EDK2

<EDK2とは>
UEFI BIOS自体の開発とUEFI BIOS 上で動くアプリケーションの開発にも使うことができる開発キットである。

<EDK2のファイル構造>

edk2/
    edksetup.sh    環境変数設定用スクリプト
    Build/   ビルドの成果物が出色されるディレクトリ
    Conf/
        target.txt    ビルド設定(何をビルドするかを設定)
        tools_def.txt    ツールチェーンの設定 
   Mdge/    EDKの中心的ライブラリのパッケージディレクトリ
   ...Pkg/    その他のパッケージディレクトリ

ConfとBuild以外のディレクトリはパッケージごとに別れている。

<パッケージ構造>  
AppPkg/
  AppPkg.dec        パッケージ宣言(declaration)ファイル
  AppPkg.dsc        パッケージ記述(description)ファイル
 Applications/       UEFIアプリケーションを格納するディレクトリ
    Hello/          Hello モジュールディレクトリ
      Hello.c
      Hello.inf     モジュール定義ファイル

decファイルはパッケージ名やパッケージ内のソースコードから利用する定数を定義する。
dscファイルは出力ディレクトリ名やサポートされるアーキテクチャ、サポートするビルドターゲットなどのビルドに関する設定を書く。
  • Buildディレクトリはbuildコマンドによって成果物が出力される。
    AppPkgをビルドすると
    Build/AppPkg/DEBUG_GCC5/X64/Hello.efi などに目的の EFI アプリが出力されるらしい。

  • edksetup.sh
    EDK2のビルドコマンドが動くようにするための準備用スクリプト

target.txt
(設定項目)
・ACTIVATE_PLATFORM : ~/ *.dsc
ビルド対象のパッケージの .dscファイルを指定する。
DSCファイルとはパッケージ記述ファイルのことであり、主にパッケージのビルド設定を書くファイルである。

・TARGET : DEBUG
DEBUG、RELEASE、NOOPT、UserDefinedのいずれかを設定する。

・TARGET_ARCH:X64
どのアーキテクチャ向けのバイナリを作るか。(例)X64 、ARM

・TOOL_CHAIN_TAG:
ビルドに用いるツールチェインとtools_def.txtの Supported Tool Chainsから選ぶ。

ビルド環境の構築

ビルド環境の構築はほぼ以下のリンクの通りに行いました。 github.com

  • 10月14日
    詰まった、、、、 どうやらubuntuアーキテクチャx86_64でMac_M1のUTM上で動くubuntuはarm64のものしかなさそうなのでDokerを使わなければならないかも、、、、

  • 10月15日
    AMD64ubuntu (ubuntu-18.04.6-desktop-amd64.iso) をUTM上に実装してみたがM1とは相性が悪く動作が重すぎたため使い道にならない 次にintel core i5Mac bookでvirtual box を使って ubuntuを実装すると動作はスムーズに進んだ

  • 10月16日
    ブートローダーのビルドができない、、、、、

これ以降1ヶ月近く放置していました。

  • 現在(11月11日)
    よくわからないけどbuildできた!!! 原因はよくわからないが edk2ディレクトリの生成を失敗していたのからなのか、 それかsudo apt updateで保留の項目が出ていたのをsudo apt-get dist-upgradeでアップデートさせたらからなのだろうか、、、 多分後者だと思う。