「RocketChip on Zedboard 」 - ビルド済みイメージを使用してRISC-VのRocketChipをFPGAで動かす


はじめに

@a163236です。
RISC-Vを手っ取り早くFPGA上で動かしてみたいなと思い、カリフォルニア大学バークレー校の Rocket Chip on Zynq FPGAsをやってみました。2年位前のやつですしあまりやる人はいないと思いますが、皆さんの役に立てればいいなと思い、ここではその手順を記しておきます。
結果としては、Hello WorldはできてPetaLinuxのブートも出来てriscv-linuxもブート出来ましたが、riscv-linuxのログインになぜか失敗しました。未解決です。
Takaya様 @takayaZ のご教授によりriscv-linuxも使えるようになりました!

目次

概要

ZedboardというXilinxのZynqが載っているFPGAボードを用いて、ビルド済みのイメージを使いRISC-V on FPGAを行う手順を記します。
結論を言うと、今回はPetaLinuxをブートして、hello worldをすることに成功しました。また、riscv-linuxも起動させることができました。

準備

まずはgithubのリポジトリのクローンをして、ビルド済みのイメージをゲット。
自分の環境でビルドする手間と時間がかからないのはとてもイイですね(・∀・)!!。

$ git clone https://github.com/ucb-bar/fpga-zynq.git
$ cd fpga-zynq/zedboard
$ make fetch-images

SDカードへの書き込み

SDカードへの書き込みはWSLでやる場合と普通のUbuntuでやる場合の2通りを記しておきます。

WSL でやる場合

msykspinzさんのこちらの記事を参考にしました。

まず、SDカードをPCに差し込みます。SDカードがE:ドライブにあるとき、

$ sudo mkdir /mnt/e
$ sudo mount -t drvfs E: /mnt/e
$ make load-sd SD=/mnt/e
$ sudo umount /mnt/e 

これでSDにイメージが書き込まれました。

Ubuntuでやる場合

流れはWSLと同じです。
SDカードをPCに差し込みます。
まず、下のコマンドを打ってSDカードが認識されているデバイス名を確認します。

$ lsblk

私のSDカードはmmcblk0p1という名前で認識されていました。そしたら、その右の方にマウントポイントが書かれています。それがSDカードへのパスになります。ここでは「SDPATH」としておきます。

$ make load-sd SD=SDPATH
$ sudo umount SDPATH

これでSDカードにイメージが書き込まれました。

ZedboardでRocketChipを動かす

ここからは用意したSDカードとFPGAボードを使い、ZedboardとPCをUARTを使い通信していきます。

TeraTermとZedboardの準備

Tera TermじゃなくてもGKTtermでもターミナルでsshでもよいのですが、Tera Termを使ってやります。
まずは、FPGAの方を準備していきます。ZedboardにSDカードを挿入して、電源ケーブルとUSB UARTを接続します。UARTはPCと繋いでおきます。
また、ZedboardはSDカードから起動させるので、ジャンパを設定します。こちらのサイトに分かりやすく書かれておりました。

Tera Termはシリアル通信を使い、

このように設定します。シリアルポート設定も下のようにします。

PetaLinuxのブート

ここまで進むと勝手に下の画像のようにログイン画面が出てきます。

ここで、ユーザ名「root」、パスワード「root」でログインします。

ログイン出来ました。
試しにHello Worldをしてみます。

root@zynq:~# ./fesvr-zynq pk hello

とすると

Hello, World! と出すことができました。

riscv-linuxのブート

このコマンドでriscv-linuxがブートされます。

root@zynq:~# ./fesvr-zynq +blkdev=buildroot.rootfs.ext2 bbl

この画面からバーッと色々流れていって、最終的に(うまくいけば)

このようにログイン画面となります。さきほどと同じようにユーザ名「root」パスワード「root」(後で書きますが、このパスワードは間違いでした!)で入ります。

....入れませんでした。
全然welcomeじゃねーじゃん。

ここで終わっていたのですが、Takaya様 @takayaZ からパスワードは「sifive」であると教わりました。

入力すると…

ログインできました!!
でも# が一個出るだけなので案外地味ですね。最初できたのか分かりませんでした。
とにかく、全てうまく行ったところでこの記事を終わりにしたいと思います。

おわりに

以前までriscv-linxを起動させることが出来なかったところ、Takaya様 @takayaZ にパスワードを教えていただき、できるようになりました。改めて感謝いたします。
また、間違い指摘・または感想等のコメントは私のTwitter@a163236へDMでもしていただければ幸いです。