M2Macで「ゼロからのOS自作入門」

M2Macで「ゼロからのOS自作入門」
カテゴリー: まなぶ
投稿日:
更新日:
書いた人: 山椒ねこまんま

M2Macで「ゼロからのOS自作入門」(通称:みかん本)のMikanOSを動かしたので、環境構築やビルドコマンドをまとめました。

こちらの VSCode Devcontainer 設定ファイルを使ったのでとっても簡単にできました! ありがとうございます!


初期準備

こちらにアクセスし、右上の Use this templateCreate a new repository を押します。

ローカルに落としたら、VSCodeで開きます。

ターミナルに、

$ git clone https://github.com/uchan-nos/mikanos.git
$ 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

~/edk2/Conf/target.txt を開き、(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とかの昔のところのビルドをした後に試したら普通に表示できました。
なんでだろう


アプリを作ったりしています! よかったらみていってくださいね→ つくったもの
今のイチオシ↓