1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

自作OSをやってみた

Posted at

自作OSをやってみた

なんとなく自作OSについて興味が湧いたので、以下の動画を参照して、自作OSの初歩に取り組んでみた際のメモ

環境構築

上記の動画ではMac上で、RISC-Vの環境を構築しているが、自分の環境では上手くいかなったので、Docker上のUbuntuで構築することにした。

Dockerをインストールする

Macでインストールする場合は、Docker Desktopをインストールすると良い。

Ubuntuイメージの取得

Ubuntuを利用するので、最新版のイメージを取得しておく。
既に取得済みの場合は、実行不要。

docker pull ubuntu

作業フォルダをバインディングして起動する

単にDockerでUbuntuを起動しただけだと、作業結果が保存されないので、バインドにより、作業結果を保存&ローカルのディレクトリとデータを共有する様にする。

docker run -it -d --name jisaku-os --mount type=bind,src=Mac上のパス,target=Ubuntu上のパス ubuntu

ここで src はMac上のローカルフォルダパス(絶対パス)、targetはUbuntu上で同期させるフォルダのパス(絶対パス)になります。
これを実行しておくと、Mac上でコーディングした結果が、そのままUbuntu上で利用可能になります。

今回作成するUbuntuのコンテナの名前は、わかりやすさ優先でjisku-osとしておきます。

コンテナに入る

以下のコマンドで、作成したコンテナに入れます。
終了する場合は exitを実行してください。

docker exec -it jisaku-os bash

各種コマンドのインストール

各種コマンドをインストールする前に、パッケージの更新を行ってください。

apt update

RISC-Vをgitでインストールするので、gitもインストールしておきます。

apt install -y git

RISC-V環境を構築します。

まず、必要なコマンド、及びライブラリをインストールします。

apt install autoconf automake autotools-dev curl python3 python3-pip python3-tomli libmpc-dev libmpfr-dev libgmp-dev gawk build-essential bison flex texinfo gperf libtool patchutils bc zlib1g-dev libexpat-dev ninja-build git cmake libglib2.0-dev libslirp-dev vim wget ftp -y

RISC-Vのダウンロードを行います。

git clone https://github.com/riscv/riscv-gnu-toolchain

RISC-Vのインストール先を作成します。

mkdir /opt/riscv

後にPATHに追加するので、.bashrc に以下を追記してください。

export RISCV=/opt/riscv

設定を反映させます。

source ~/.bashrc

ビルドを実行します。(2時間ぐらいかかりました)

cd riscv-gnu-toolchain
./configure --prefix=$RISCV --enable-multilib
make

clangをインストールします。
必要なコマンドのインストールや、署名情報を登録なども行っています。

apt install curl gnupg
curl -fsSL https://apt.llvm.org/llvm-snapshot.gpg.key | gpg --dearmor -o /etc/apt/keyrings/llvm.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/llvm.gpg] http://apt.llvm.org/jammy/ llvm-toolchain-jammy main" | tee /etc/apt/sources.list.d/llvm.list > /dev/nul
apt update
apt install clang llvm lld lldb -Y

QEMUをインストールします。

apt -y install qemu-system qemu-system-common qemu-utils

BIOSを取得します。
ダウンロードしたファイルは、作業フォルダに置いてください。

curl -LO https://github.com/qemu/qemu/raw/v8.0.4/pc-bios/opensbi-riscv32-generic-fw_dynamic.bin

QEMU上のショートカットキー

自作OSをQEMUで起動したあとは、単純にexitなどで終了できないので注意してください。
とりあえず、以下のコマンドを覚えておけば、上記の動画と同様のことはできます。
その他のコマンドは、ヘルプを参照してください。

アクション コマンド
終了 Ctrl+A X
モニターモード Ctrl+A C
ヘルプ Ctrl+A H

開発資料

動画内で参照しているPDFは以下のものになります。
動画内で実装しているputchargetchar以外のシステムコールを実装する場合は、こちらの資料を参照することになります。

Mac上で環境が構築できなかった件

既にインストールされているgccのバージョンなどと整合性が取れず、clang(llvm) コマンドのビルド時に、例外が発生して、インストールが完了しませんでした。
動画ではMacOS上で環境構築しているので、できないことはないのだと思いますが、解決しなかったので、諦めてUbuntu上で構築する方向にシフトしました。

MacOS上で環境構築できる人は、MacOSのみで完結しておいたほうが、色々と楽だとは思います。

自作OSを作ってみた感想

「45分で実装する自作OS」に関しては、確かに動画を見ながら、1時間ぐらいで実装はできたのですが、環境構築に倍以上時間がかかったので、一からやるには、明らかに45分じゃ足りないので、その点には注意が必要です。

とりあえず動画の内容を一通り実装すると、システムコールはこんな感じで実装しているだ、とかプロセスの切り替えは、こうやって実現しているんだ的な、基礎が学べるのでオススメです。

参考

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?