M2Macで「ゼロからのOS自作入門」(通称:みかん本)のMikanOSを動かしたので、環境構築やビルドコマンドをまとめました。
こちらの VSCode Devcontainer 設定ファイルを使ったのでとっても簡単にできました! ありがとうございます!
初期準備
こちらにアクセスし、右上の Use this template → Create a new repository を押します。
ローカルに落としたら、VSCodeで開きます。
ターミナルに、
git clone https://github.com/uchan-nos/mikanos.git clone https://github.com/uchan-nos/mikanos-build.git
と入力し、MikanOSのソースコードをダウンロードします。
.devcontainer/Dockerfile を開き、
- FROM ghcr.io/sarisia/mikanos:${VARIANT} + FROM ghcr.io/sarisia/mikanos:vnc
.devcontainer/devcontainer.json の16から26行目をコメントアウトします。
ルートに .gitignore ファイルを作成し、*.imgを追加しておくとPCストレージの節約になります。
コンテナビルド後の手順
ビルドして動かしていると、たまに mount できなくなることがありました。 そんなときはコンテナをリビルドすると解決します。
左下の >< からコンテナを開きなおしましょう。
cd ~/edk2 code .
でedk2を新しいウィンドウで開きます。
新しいウィンドウのターミナルに、
ln -s /workspaces/mikanos-devcontainer/mikanos/MikanLoaderPkg ./ source edksetup.sh
~/edk2/Conf/target.txt を開き、
ACTIVE_PLATFORM = MikanLoaderPkg/MikanLoaderPkg.dsc TARGET_ARCH = X64 TOOL_CHAIN_TAG = CLANG38
(ARMMacのみの手順)
- DEFINE CLANG38_X64_TARGET = -target x86_64-pc-linux-gnu + DEFINE CLANG38_X64_TARGET = -target x86_64-linux-gnu - DEBUG_CLANG38_X64_CC_FLAGS = DEF {省略} -g + DEBUG_CLANG38_X64_CC_FLAGS = DEF {省略} -g -I/usr/x86_64-linux-gnu/include
実行手順
dayZZa のところは対応する節ごとに置き換えてください。
エミュレータには http://localhost:6080 からアクセスできます。 ターミナルに q もしくは quit と入力することで終了できます。
day01
~/osbook/devenv/run_qemu.sh ~/osbook/day01/bin/hello.efi
day02a ~ 02b
cd /workspaces/mikanos-devcontainer/mikanos git checkout osbook_day02a cd ~/edk2 source edksetup.sh build cd /workspaces/mikanos-devcontainer/ ~/osbook/devenv/run_qemu.sh ~/edk2/Build/MikanLoaderX64/DEBUG_CLANG38/X64/Loader.efi
コンテナをリビルドした際に入力するコマンドを分けるのが面倒だったので、一度しか入力しなくていいコマンドも入れています。
たくさん打つのが面倒な場合は、適当なテキストファイルにコマンド達をコピーして ; でつなぎ、行コピーでまとめてコピーできるようにすると快適になります。
cd ~/edk2; source edksetup.sh; build
みたいな感じです。
day03a ~ 03b
cd /workspaces/mikanos-devcontainer/mikanos git checkout osbook_day03a cd 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 --entry KernelMain -z norelro --image-base 0x100000 --static -o kernel.elf main.o cd ~/edk2 source edksetup.sh build cd /workspaces/mikanos-devcontainer/ ~/osbook/devenv/run_qemu.sh ~/edk2/Build/MikanLoaderX64/DEBUG_CLANG38/X64/Loader.efi /workspaces/mikanos-devcontainer/mikanos/kernel/kernel.elf
day03c
cd /workspaces/mikanos-devcontainer/mikanos git checkout osbook_day03c cd kernel source ~/osbook/devenv/buildenv.sh clang++ -O2 -Wall -g --target=x86_64-elf -ffreestanding -mno-red-zone -fno-exceptions -fno-rtti -std=c++17 -c main.cpp ld.lld --entry KernelMain -z norelro --image-base 0x100000 --static -o kernel.elf main.o cd ~/edk2 source edksetup.sh build cd /workspaces/mikanos-devcontainer/ ~/osbook/devenv/run_qemu.sh ~/edk2/Build/MikanLoaderX64/DEBUG_CLANG38/X64/Loader.efi /workspaces/mikanos-devcontainer/mikanos/kernel/kernel.elf
day04b ~ 18a
cd /workspaces/mikanos-devcontainer/mikanos git checkout osbook_day04a cd kernel source ~/osbook/devenv/buildenv.sh make cd ~/edk2 source edksetup.sh build cd /workspaces/mikanos-devcontainer/ /workspaces/mikanos-devcontainer/osbook/devenv/run_qemu.sh ~/edk2/Build/MikanLoaderX64/DEBUG_CLANG38/X64/Loader.efi /workspaces/mikanos-devcontainer/mikanos/kernel/kernel.elf
6章でマウスの動きを実装した際、マウスカーソルが画面の一部でしか動かせないという現象が起きました。 このあと進めていくと直るので、今は放置しましょう。
day18b ~ 24g
cd /workspaces/mikanos-devcontainer/mikanos git checkout osbook_day18b source ~/osbook/devenv/buildenv.sh cd ~/edk2 source edksetup.sh build cd /workspaces/mikanos-devcontainer/mikanos/ ./build.sh run
day25a ~ 27d
cd /workspaces/mikanos-devcontainer/mikanos git checkout osbook_day25a source ~/osbook/devenv/buildenv.sh cd ~/edk2 source edksetup.sh build cd /workspaces/mikanos-devcontainer/mikanos/ APPS_DIR=apps ./build.sh run
day28a ~ 30f
cd /workspaces/mikanos-devcontainer/mikanos git checkout osbook_day28a source ~/osbook/devenv/buildenv.sh cd ~/edk2 source edksetup.sh build cd /workspaces/mikanos-devcontainer/mikanos/ APPS_DIR=apps RESOURCE_DIR=resource ./build.sh run
tviewコマンドで日本語が表示できなかったりgviewコマンドでjpgが表示できないことがありましたが、day04とかの昔のところのビルドをした後に試したら普通に表示できました。
なんでだろう
アプリなどを作ったりしています! よかったらみていってください→
つくったもの
今のイチオシ↓