macOS で ゼロからのOS自作入門

mac

ゼロからの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

コメント

タイトルとURLをコピーしました