ゼロからのOS自作入門を macOS Monterey(Apple Silicon) で動かしてみます。
ゼロからのOS自作入門 – 2021/3/22
ゼロからのOS自作入門(内田公太著)サポートサイト
https://zero.osdev.jp
以下を参考にやってみます。
Mac で始める「ゼロからのOS自作入門」 – 2021年06月22日
https://qiita.com/yamoridon/items/4905765cc6e4f320c9b5
ソースコード
オリジナルのソースコードがgithubのmikanosに上がっていますが、macOSに最適化して整形したレポジトリ mikanos_summary を作ったので、それをクローンするとスムーズに実行できるかと思います。
以下の patch を既に適用しています。
Mac で始める「ゼロからのOS自作入門」 – 2021年6月22日
https://qiita.com/yamoridon/items/4905765cc6e4f320c9b5
mikanos_summary のクローン
$ cd $ git https://github.com/aship/mikanos_summary.git
ツールセットアップ
qemu インストール
% brew install qemu
mkfs.fat のため、dosfstools のインストール
% brew install dosfstools
1-4 エミュレータでのやり方
efi ファイルから img 作成 & QEMU 実行
$ cd ~/mikanos_summary $ devenv/run_qemu.sh day01/bin/hello.efi
Hello World という QEMU ウインドウが立ち上がったら成功。
1-9 C言語でハローワールド
make: lld-link: No such file or directory 対策で
llvm インストール
% brew install llvm % echo 'export PATH="/opt/homebrew/opt/llvm/bin:$PATH"' >> ~/.zshrc % source ~/.zshrc
ビルド
$ cd ~/mikanos_summary/day01/c $ make
img 作成 & QEMU 実行
$ ../../devenv/run_qemu.sh hello.efi
Hello World という QEMU ウインドウが立ち上がったら成功。
2-2 EDK2 でハローワールド
mikanos_summary の day02a のコミットに切り替えてください。
edk2のクローン
recursive オプションをつけないといけない
% cd % git clone --recursive https://github.com/tianocore/edk2.git
% cd ~/edk2 % source edksetup.sh
% cd ~/edk2/BaseTools/Source/C % make
リンクを貼る
$ cd ~/edk2 % ln -s ~/mikanos_summary/MikanLoaderPkg .
Conf/target.txt を以下のように編集
ACTIVE_PLATFORM = MikanLoaderPkg/MikanLoaderPkg.dsc TARGET = DEBUG TARGET_ARCH = X64 TOOL_CHAIN_TAG = CLANGPDB
RegisterFilterLib is not found エラー対策
MikanLoaderPkg/MikanLoaderPkg.dscの LibratyClasses に
以下を追加することでビルドできるようになります。
RegisterFilterLib|MdePkg/Library/RegisterFilterLibNull/RegisterFilterLibNull.inf
nasm: command not found エラー対策
% brew install nasm
ビルド
% build
成功すると以下のファイルが生成されます。
edk2/Build/MikanLoaderX64/DEBUG_CLANGPDB/X64/Loader.efi
そのファイルを以下のように実行
% ~/mikanos_summary/devenv/run_qemu.sh Build/MikanLoaderX64/DEBUG_CLANGPDB/X64/Loader.efi
Hello Mikan World の QEMU ウインドウが立ち上がったら成功。
3-3 初めてのカーネル
mikanos_summary の day03a のコミットに切り替えてください。
ビルド
% cd ~/mikanos_summary/kernel % clang++ -O2 -Wall -g --target=x86_64-elf -ffreestanding -mno-red-zone -fno-exceptions -fno-rtti -std=c++17 -c main.cpp $ ld.lld $LDFLAGS --entry KernelMain -z norelro --image-base 0x100000 --static -o kernel.elf main.o
以下で実行
% ~/mikanos_summary/devenv/run_qemu.sh ~/edk2/Build/MikanLoaderX64/DEBUG_CLANGPDB/X64/Loader.efi kernel.elf
Hello Mikan World の QEMU ウインドウが立ち上がったら成功。
3-4 ブートローダからピクセルを描く
mikanos_summary の day02b のコミットに切り替えてください。
ブートローダーの再ビルドが必要です。
ビルド
% cd ~/edk2 % build
成功すると以下のファイルが生成されます。
edk2/Build/MikanLoaderX64/DEBUG_CLANGPDB/X64/Loader.efi
そのファイルを以下のように実行
% ~/mikanos_summary/devenv/run_qemu.sh Build/MikanLoaderX64/DEBUG_CLANGPDB/X64/Loader.efi
画面全部真っ白の QEMU ウインドウが立ち上がったら成功。
その他のOS自作本
30日でできる! OS自作入門 – 2006/3/1
コメント