Skip to content

Linuxを動かす (シミュレーション)

本章ではLinuxをCPUで動かします。

執筆中!!!(概要だけ書いてます)

RISC-VとOS

RISC-Vに対応しているOSとして、Linuxや学習向けの小さなOSであるxv6が挙げられる。 本章ではLinuxをCPUで動かす。 Linuxを起動するには、次の拡張が必要である。 また、OSのようなソフトウェアを動かすことができる標準的なRISC-Vの拡張のセットはRISC-V profilesとして管理されている。(例えばRVA23)

OSが起動する手順を確認する

ROMに格納されたローダがプログラムを展開、最低限の準備をする。 展開されたプログラムがOSを起動する準備をし、OSのエントリーポイントにジャンプ。 OSが起動する。

CPUはM-modeで起動し、一般的なOSはS-modeで動作します。 M-modeとS-modeの間の操作を抽象化するインターフェースとしてSBI(Supervisor Binary Interface)が定義されています。 SBIの実装としてOpenSBIがあります。

デバイスツリー

どのCPUでも動く汎用なOSを起動するとき、今使っているCPUの構成が分からないと困ります。 CPUがどのようなデバイスと接続されていて、どのようなメモリマップかなどを記述する方式に、DTS(Device Tree Source)があります。 DTSは次のように記述されます。

DTSの例

それぞれのフィールドの簡単な説明

作成しているCPU向けのDTSを記述します。

ちょっとした説明

DTSはデバイスツリーコンパイラによってバイナリ形式(dtb)にコンパイルすることができます。 dtbを読み込んでパースして、そのデバイスに合わせた処理を行うことで、メモリマップや構成をソフトウェアにハードコードする必要が無くなり、CPUの構成が変わってもソフトウェアに変更が必要なくなります。

Linuxのビルド

buildroot OpenSBI ぬん!

Linuxの実行

わお!