xv6のRISC-V版とそのビルド手順など

xv6のRISC-V版とそのビルド手順など

/images/riscv.png

1. はじめに


xv6という小さなOSのRISC-V版のビルド手順についてまとめました。


2. xv6とは?


MITが開発したUnixの思想をベースにした教育用途の小さなOSです。

ソースコード

公式オリジナルのソースコードは以下?
https://github.com/mit-pdos/xv6-public


3. RISC-V向けxv6のビルド手順


RISC-VかつQEMUで動作するように向けにポーティングされたxv6のソースコードは 以下にあります。
https://github.com/mit-pdos/xv6-riscv

教育用と言うだけあってソースコードの量もかなり少なく、ビルドもすぐに終わります。

事前準備

RISC-V Toolchainのインストール手順の手順に従って、RISC-VのToolchainをインストールしておきます。

ソースコード取得

$ git clone https://github.com/mit-pdos/xv6-riscv

カーネルのビルド

$ cd xv6-riscv
$ make

ビルドが成功するとkernel/ディレクトリにkernelファイル (efl) が作成されています。 これがxv6のカーネルのイメージです。エントリーポイントは0x8000_0000になっている様子です。

Userlandプログラムのビルド

Userland側のイメージをビルドして、ファイルシステム用のイメージデータを作成します。

xv6カーネルは、ブート終盤にvirtio diskに格納されるこのファイルシステムをメインメモリにロードし、 catlsといったユーザプログラムをシェルから使えるようにしてくれます。

$ make fs.img

ビルドが成功すると、カレントディレクトリにfs.imgファイルが作成されているはずです。


4. xv6 for RISC-Vの構成


CPU2コアで動作するように作られている様子ですが、1コアだけでも動作します。

ペリフェラルは、UART 1ch, PLIC (割り込みコントローラ), CLINT (TImer), Virtio (ディスク)の4つを想定しており、 メモリマップはmemlayout.hに定義されています。割り込みはUart (ID=1) と Virtio (ID=10) の2つだけです。


5. 参考文献


RISC-V 

See also