EDK2を使ってブートローダを書いていこう
目次
イントロダクション
OS自作入門を始めました。今日は2章をやっていきます。先が長いですね。
EDL2を使ったブートローダを動かしてみる
OSを動作させるためには、メインメモリの状態把握が必須です。 使用中のメモリを書き換えてしまったら誤作動の原因になるため、空き地をのび太やジャイアンのようにUEFI機能を使ってメモリマップを取得するところからやっていきます。
git clone https://github.com/uchan-nos/mikanos.git
MikanLoaderPkgというフォルダに、EDK2関連ファイルが入っています。
- パッケージ宣言ファイル
- パッケージ記述ファイル
- コンポーネント定義ファイル
[Defines]
INF_VERSION = 0x00010006
BASE_NAME = Loader
FILE_GUID = c9d0d202-71e9-11e8-9e52-cfbfd0063fbf
MODULE_TYPE = UEFI_APPLICATION
VERSION_STRING = 0.1
ENTRY_POINT = UefiMain
# VALID_ARCHITECTURES = X64
[Sources]
Main.c
[Packages]
MdePkg/MdePkg.dec
[LibraryClasses]
UefiLib
UefiApplicationEntryPoint
[Guids]
gEfiFileInfoGuid
gEfiAcpiTableGuid
[Protocols]
gEfiLoadedImageProtocolGuid
gEfiLoadFileProtocolGuid
gEfiSimpleFileSystemProtocolGuid
gEfiBlockIoProtocolGuid
ENTRY_POINT = UefiMain
この部分がエントリーポイントを指定するようです。 EDKⅡでは、UEFIアプリによってこのエントリーポイントを自由に変更できるとのことです。
ビルド準備
git checkout osbook_day02a
edk2フォルダの中に移動して、シンボリックリンクを貼ります。
cd ~/edk2
ln -s ~/workspace/mikanos/MikanLoaderPkg/ ./
上手く貼れたらこんな感じです。
source edksetup.sh
実行結果はこんな感じです。
Using EDK2 in-source Basetools
WORKSPACE: /home/ayahumohumo/edk2
EDK_TOOLS_PATH: /home/ayahumohumo/edk2/BaseTools
CONF_PATH: /home/ayahumohumo/edk2/Conf
Copying $EDK_TOOLS_PATH/Conf/build_rule.template
to /home/ayahumohumo/edk2/Conf/build_rule.txt
Copying $EDK_TOOLS_PATH/Conf/tools_def.template
to /home/ayahumohumo/edk2/Conf/tools_def.txt
Copying $EDK_TOOLS_PATH/Conf/target.template
to /home/ayahumohumo/edk2/Conf/target.txt
Conf/target.txtというファイルから、MikanLoaderPkgをビルドする設定を行います。
vim Conf/target.txt
設定はこうします。
ACTIVE_PLATFORM = MikanLoaderPkg/MikanLoaderPkg.dsc
TARGET_ARCH = x64
TOOL_CHAIN_TAG = CLANG38
書き換えることができたら、ビルドを実行します。
build
できあがったファイルをQEMUから起動させたら、ハロワ実行できます。
まとめ
2日目もとりあえず通せました。 引き続き頑張りましょう。