ゼロからのOS自作入門の開発環境を macOS で整える
「ゼロからのOS自作入門」の公式の開発環境はx86-64 版の Ubuntu
ですが、macOS でも開発環境を整えてみる。
公式ではansible
を使ってるが、Ubuntu
向けなので macOS では使えない。ansibleファイルを参考に必要そうツールをインストールする。
自分の環境ではとりあえずllvm
acpica
nasm
dosfstools
をインストールした。
$ brew install llvm acpica nasm dosfstools
/usr/local/Cellar/dosfstools/4.2/sbin
/usr/local/opt/llvm/bin/
にもパスを通した。
$ cd $HOME
$ git clone https://github.com/uchan-nos/mikanos-build.git osbook
$ git clone --recurse-submodules https://github.com/tianocore/edk2.git edk2
公式ドキュメント通り$HOME
にクローンする。
edk2
はサブモジュールを使っていて--recurse-submodules
オプションをつけてなくてしばらくハマった。
ビルドスクリプトなどで$HOME
にあることを前提になってるので、ここにあると今後が楽。
ただホームディレクトリ直下にあるのは気持ち悪い。
edk2
に必要なファイルを事前にビルドしておく。
$ cd $HOME/edk2/BaseTools/Source/C
$ build
なにかエラーが出たら必要なツールがインストールされてない可能性があるから、エラーを見て対処する
ビルド済み標準ライブラリを持ってくる
$ cd $HOME/osbook/devenv
$ curl -OL https://github.com/uchan-nos/mikanos-build/releases/download/v2.0/x86_64-elf.tar.gz
$ tar -zxf x86_64-elf.tar.gz
これらのライセンスはこちらを参照。
MikanOS の本体も$HOME
にクローンする。
$ git clone https://github.com/uchan-nos/mikanos.git
ドキュメントにあるようにセットアップする
$ cd $HOME/edk2
$ ln -s /path/to/mikanos/MikanLoaderPkg ./
$ source edksetup.sh
Conf/target.txt
の設定項目を以下のように修正する
設定項目 | 設定値 |
---|---|
ACTIVE_PLATFORM | MikanLoaderPkg/MikanLoaderPkg.dsc |
TARGET | DEBUG |
TARGET_ARCH | X64 |
TOOL_CHAIN_TAG | CLANGPDB |
CLANG38
の部分をCLANGPDB
にした。
$ $HOME/edk2
$ build
ビルドするとBuild/MikanLoaderX64/DEBUG_CLANGPDB/X64/Loader.efi
が生成される。
$ source $HOME/osbook/devenv/buildenv.sh
$ cd $HOME/mikanos
$ ./build.sh
環境変数などを読み込んで、ビルドする。
objcopy -I binary -O elf64-x86-64 -B i386:x86-64 hankaku.bin hankaku.o
make: objcopy: No such file or directory
objcopy がない。
diff --git a/kernel/Makefile b/kernel/Makefile
index 9d39343..ba84e1c 100644
--- a/kernel/Makefile
+++ b/kernel/Makefile
@@ -50,7 +50,7 @@ hankaku.bin: hankaku.txt
../tools/makefont.py -o $@ $<
hankaku.o: hankaku.bin
- objcopy -I binary -O elf64-x86-64 -B i386:x86-64 $< $@
+ llvm-objcopy -I binary -O elf64-x86-64 -B i386:x86-64 $< $@
.%.d: %.bin
touch $@
とりあえずllvm-objcopy
を使ってみる。
再度ビルドするとローダーのパスでエラー。
+ echo 'No such file: /Users/takuya/edk2/Build/MikanLoaderX64/DEBUG_CLANG38/X64/Loader.efi'
No such file: /Users/takuya/edk2/Build/MikanLoaderX64/DEBUG_CLANG38/X64/Loader.efi
$HOME/osbook/devenv/make_mikanos_image.sh
を編集する。
diff --git a/devenv/make_mikanos_image.sh b/devenv/make_mikanos_image.sh
index 4607e28..f215eef 100755
--- a/devenv/make_mikanos_image.sh
+++ b/devenv/make_mikanos_image.sh
@@ -18,7 +18,7 @@ then
MIKANOS_DIR="$HOME/osbook/$1"
fi
-LOADER_EFI="$HOME/edk2/Build/MikanLoaderX64/DEBUG_CLANG38/X64/Loader.efi"
+LOADER_EFI="$HOME/edk2/Build/MikanLoaderX64/DEBUG_CLANGPDB/X64/Loader.efi"
KERNEL_ELF="$MIKANOS_DIR/kernel/kernel.elf"
$DEVENV_DIR/make_image.sh $DISK_IMG $MOUNT_POINT $LOADER_EFI $KERNEL_ELF
+ sudo mount -o loop ./disk.img ./mnt
ここから先が分からない。
どうやってマウントするんだ。
どうやらhdiutil
を使うらしい。
完全版が出たので、これはクローズする。