HiFive Unleashedは高くて買えないのだけれども、RISC-V SDKであるFreedom-U-SDKを使ってみることにした。
自作RISC-Vシミュレータを使ってRISC-VのLinuxをブートさせたいのだけれども、なかなか動作しないので四苦八苦していた。 #自作RISC-Vシミュレータは、そのうちGitHubに公開できるように調整中。
いろいろ修正して、とりあえずログイン画面まで進むようになった。
Freedom-U-SDKのビルド
freedom-u-sdkのリポジトリをダウンロードして、makeをビルドするだけでよい。
$ git clone https://github.com/sifive/freedom-u-sdk.git $ cd freedom-u-sdk $ make -j4
work/riscv-pk/bbl
が生成されるので、これをRISC-Vシミュレータに食わせる。
ちなみに、bbl
を生成するためにbuildrootとvmlinuxの生成も行っているので、結構時間がかかる。4並列で実行しても30分程度必要だ。
参考にした資料
当然、RISC-VのISAの仕様書はすべて読み込まなければならない。 通常の算術命令から、wfiの仕様やAtomic演算・LR/SCの実装などもしっかり実装すること。
- User-Level ISA Specification
- Draft Privileged ISA Specification
U54-MCの仕様書
U54-MCの仕様書もしっかり読まなければならない。この中でCLINTの実装は必須。
さらに、RISC-Vの標準入出力やタイマレジスタの仕様などはほとんど公開されていないので、QEMUやRISC-V ISA Simの実装を見ながら真似ていく。
書籍
Linuxのブートに関してほとんど知識がなかったので、こんな本も買って勉強した。 もうSpikeを頼りにしたので、最終的にはあまり参考にしなかったけど...
新装改訂版 Linuxのブートプロセスをみる (アスキー書籍)
- 作者: 白崎博生
- 出版社/メーカー: 角川アスキー総合研究所
- 発売日: 2014/10/02
- メディア: Kindle版
- この商品を含むブログ (2件) を見る
Spikeシミュレータの実装
最初はRISC-Vの(公式?)シミュレータであるSpikeと全く同じ動きをするように自作命令セットシミュレータを調整していき、双方の出力するログを一致比較するようなツールを作って調整するのが手っ取り早い。
私も今回のRISC-V Linuxをブートさせるため、Spikeのログと一致比較するようにした。
というわけで、Linuxのログイン画面まで来たのだが、そこから先キーボードの入力を受け付けられないので、そこを改良していく必要がある。