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の実行
わお!