FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

Freedom-U-SDKで生成したLinuxバイナリを自作RISC-Vシミュレータで実行 (2. Linuxのブート成功)

HiFive Unleashedは高くて買えないのだけれども、RISC-V SDKであるFreedom-U-SDKを使ってみることにした。

自作RISC-Vシミュレータを使ってRISC-VのLinuxをブートさせたいのだけれども、なかなか動作しないので四苦八苦していた。 #自作RISC-Vシミュレータは、そのうちGitHubに公開できるように調整中。

いろいろ修正して、とりあえずログイン画面まで進むようになった。

f:id:msyksphinz:20180818195916p:plain f:id:msyksphinz:20180818201936p:plain
図. 自作RISC-VシミュレータでLinuxをブート

Freedom-U-SDKのビルド

freedom-u-sdkリポジトリをダウンロードして、makeをビルドするだけでよい。

github.com

$ 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

riscv.org

  • Draft Privileged ISA Specification

riscv.org

U54-MCの仕様書

U54-MCの仕様書もしっかり読まなければならない。この中でCLINTの実装は必須。

www.sifive.com

さらに、RISC-Vの標準入出力やタイマレジスタの仕様などはほとんど公開されていないので、QEMURISC-V ISA Simの実装を見ながら真似ていく。

github.com

書籍

Linuxのブートに関してほとんど知識がなかったので、こんな本も買って勉強した。 もうSpikeを頼りにしたので、最終的にはあまり参考にしなかったけど...

Spikeシミュレータの実装

最初はRISC-Vの(公式?)シミュレータであるSpikeと全く同じ動きをするように自作命令セットシミュレータを調整していき、双方の出力するログを一致比較するようなツールを作って調整するのが手っ取り早い。

私も今回のRISC-V Linuxをブートさせるため、Spikeのログと一致比較するようにした。


というわけで、Linuxのログイン画面まで来たのだが、そこから先キーボードの入力を受け付けられないので、そこを改良していく必要がある。