VisionFive 2 のセットアップ記録
VisionFive 2 のセットアップ記録
この記事では、StarFive Techという会社がKickstarter上で行っていたプロジェクト VisionFive 2 - open source quad-core RISC-V dev board への支援のリターンとして得られた64bit RISC-V シングルボードコンピュータ 「VisionFive 2」をセットアップした様子について記録を残します。
こんな人は記事を読むといいかも
- RISC-Vの実機に興味がある
- VisionFive 2で環境構築している様子を知りたい
こんな人が記事を書いています
- 情報系の大学生
- 電子工作をしたことがない、ソフトウェア側の人間
概要
- VisionFive 2が届いてからDebian Image 69を起動させるまで
- serial-USB変換ケーブルを用いたSPLとU-bootの更新
- SSHログインする
- Debian上でC言語を用いてHello World
- objdumpを用いてバイナリを確認
- その他
- スペック確認
- 今後やってみたいこと
本題
VisionFive 2が届く
RISC-Vの時代...!
私はKickstarterで $89以上のプレッジ: Super Early Bird - 8GB version の内容で支援を行いました。これはEthernet portが少ししょぼい代わりに早くお届けするよ!というものです。
お届け予定は2022/12だったのですが発送連絡がなく、来年になるかな〜と思っていたら2022/12/31にポストに入っていました。
中身は以下のようになっています。Raspberry piみたいですね。
袋に入っています
Ethernet部分はなんかQRやシリアルナンバーっぽかったので隠しました
RISC-V実機はいくつかありますが、私がVisionFive 2を選択したのは以下の理由です
- GUIが動きそう
- HDMI端子がある
- メモリ8GB積んでいるRISC-Vボードでお値段がそんなにしないのがこれしかないと思った
- 払った金額は日本への送料込みで$101です
- ラズベリーパイくらいの大きさで手頃
Debian Image-69が動くまで
documentは pdf: VisionFive 2 Single Board Computer Quick Start Guide にあるのでまずこれを読みます。これは、 KickstarterのアップデートのSDK Release からたどり着くことができます。
他にも、 RVspace Documentation Center VisionFive 2 に色々資料がありそうです。
私が最初に遭遇した問題の概要は以下の通りです。
- Imageを焼き込むmicroSDカードが16GBで容量が足りない
- Quick Start Guideに「32GB or more」とあるように、32GBは必要です。16GBのmicroSDカードでやろうとして、Debian Image 69が16.8GBくらいで無理でした。
- 64GBのmicroSDカードを使って解決
- SPL, U-BootのアップデートなしではDebian Image 69が動かない
- アップデートしたら解決、HDMI出力されてDebianが動くように
以下で順を追って説明します。
microSDカードにDebianのイメージを焼き込む
Raspberry piとか自作PCにUbuntu入れたことある人なら分かると思うんですが、PCは基本的に以下のようにしてOSが起動します
- 電源を入れる
- ボードの特殊なメモリに元々焼き込まれているブート用のプログラムが動作する
- SSD、USBやmicroSDカードに入っているOS本体が起動する
- HDMIで繋いだディスプレイに表示される
今回は3でmicroSDカードを使います。
先ほどのpdf の 3.3.1 Flashing with Linux or Windowsの2.のリンクからDebianのイメージがダウンロードできます。
私は Google Cloud Disk, Image-69を選択しました。ガイドの手順通りBalenaEtcherをWindows機に入れてmicroSDカードに焼きます。
...16GBのmicroSDカードなので容量的にできませんでした。
Too small
気を取り直して64GBのmicroSDカードを用意して再チャレンジするとDebianのイメージを焼き込むことができました。
16GBではなく、32GB以上を使おう!
SPL, U-Bootのupdate
これで問題1つめは解決しました。しかし、電源を入れてもHDMI出力がありません。
microSDカードに GitHub: starfive-tech/VisionFive2のRelease にある sdcard.img
といういかにもそれらしいイメージファイルを焼き込んで電源を入れたところ、HDMI出力はありせんが電源ランプが緑に点滅しました。しかしDebianイメージの方では緑の点滅すらありません。
これは何か問題があるなと思って調べたところ、Kickstarterのコミュニティに上がっていたドイツの方の記事: RISC-V-Board: Erste Schritte mit Starfive Visionfive 2 に詳しく書いてありました。
要約すると以下のような内容です。
- 現在出荷されているVisionFive 2はSPL flash, U-Bootが古く、Debian Image-55しか入れられない。Debian Image-69は起動しない
- SPL flash, U-bootのupdate方法は2種類ある。本体からのupdateと、シリアル通信を通してピンを通じての更新の2つ。
- Debian Image-55からは本体からのupdateができない
- 従って、シリアル通信によるSPL flash, U-Bootのupdateが必要。
- SPL flash, U-Bootのupdateが済んだらDebian Image-69でHDMI出力できる。
つまり、OSが起動するまでで説明した2の「ボードに積んだ特殊なメモリに書き込まれている、OSを起動させるプログラム」をアップデートする必要があります。
というわけでserial-USB変換ケーブルを購入しました。どのserial usb変換ケーブルがいいのかは VisionFive 2 Compatibility Test 2022.9.15 を眺めて debug UARTの項目の CP2102 というチップが載っているものを購入しました。
USB-serial変換ケーブルをVisionFive 2に繋いだ様子
USB-serial変換ケーブルをピンに挿す時は 先ほどから何度も登場しているpdf: QuickStartGuide をよくみて行いました。
VisionFive 2概念図
つなげる線は上のようになっています。
- 電源をUSB-Type Cケーブルでつなぐ
- ピン - serial-USB変換ケーブル - PC
- Ethernet(内側の方につなぐ)
また、microSDカードは緑のランプが点滅した sdcard.img
を入れたものを挿しました。
ドイツの方の記事に書いてありますが、外側のEthernet portはDHCPサポートがないので、Ethernet portは内側を使います。
QuickStartGuide(pdf)と GitHubのVisionFive2リポジトリのappendix の手順を参考にしてSPL, U-Bootをupdateします。今回はVisionFive2を接続したPCはUbuntu Serverです(Ubuntu 22.04)
シリアル通信の確立
/dev/ttyUSB0
が存在していて、今回はこれが対象でした。(環境により異なります。)
まず何か出てないか調べます。素直に cat
してみます。
$ sudo cat /dev/ttyUSB0
!���BHԆ�!�������J�����
!�ԥ��1���
���
!��
電源を入れるとなんか出ているので通信はしてそうです。
Linuxにおけるシリアルポートのトラブルシューティング を参考にして、以下のコマンドで接続できました。
# 現在の設定確認
$ sudo stty -F /dev/ttyUSB0 -a
# 変更
$ sudo stty -F /dev/ttyUSB0 115200 cs8 -parenb -cstopb
# 接続
$ sudo screen /dev/ttyUSB0 115200,cs8
# 何も出ないが、`help` など文字を打つと反応が返ってくる
aaaaって打ったら返事が来た
これはU-bootに接続しています。BIOS的なものだと理解しています。 help
version
などのコマンドが使えます。
StarFive # version
U-Boot 2021.10 (Oct 31 2022 - 12:11:37 +0800), Build: jenkins-VF2_515_Branch_SDK_Release-10
riscv64-buildroot-linux-gnu-gcc.br_real (Buildroot VF2_515_v2.3.0) 10.3.0
GNU ld (GNU Binutils) 2.36.1
TFTPサーバをたてる
ここでPC側でTFTPサーバを立てます。Ubuntu Serverでは以下のようにしました。Windowsなどでもできるそうです。
# @ Ubuntu Server
$ sudo apt install tftpd-hpa
# 自動で起動している
FTPサーバみたいな動きをするので、port設定をしてから /srv/tftp/
にSPL, U-Boot更新用のファイルを2つおきます。このファイルは GitHubのRelease にあります。
以下のように配置すればOK
# @ Ubuntu Server
/srv/tftp/u-boot-spl.bin.normal.out
/srv/tftp/visionfive2_fw_payload.img
SPL, U-Bootのupdate
以下がコマンドを打っている様子です(IP addressは *
でマスクしています)
StarFive # setenv ipaddr 192.168.*.*;setenv serverip 192.168.*.*
# check ethernet ping
StarFive # ping ${serverip}
EQOS_DMA_MODE_SWR stuckFAILED: -110ethernet@16040000 Waiting for PHY auto negotiation to complete.... done
Using ethernet@16040000 device
host 192.168.*.* is alive
StarFive # sf probe
SF: Detected gd25lq128 with page size 256 Bytes, erase size 4 KiB, total 16 MiB
StarFive # tftpboot 0xa0000000 ${serverip}:u-boot-spl.bin.normal.out
Using ethernet@16040000 device
TFTP from server 192.168.*.*; our IP address is 192.168.*.*
Filename 'u-boot-spl.bin.normal.out'.
Load address: 0xa0000000
Loading: #########
5.1 MiB/s
done
Bytes transferred = 127816 (1f348 hex)
StarFive # sf update 0xa0000000 0x0 $filesize
device 0 offset 0x0, size 0x1f348
127816 bytes written, 0 bytes skipped in 0.719s, speed 181279 B/s
StarFive # tftpboot 0xa0000000 ${serverip}:visionfive2_fw_payload.img
Using ethernet@16040000 device
TFTP from server 192.168.*.*; our IP address is 192.168.*.*
Filename 'visionfive2_fw_payload.img'.
Load address: 0xa0000000
Loading: #################################################################
#################################################################
#############################################################
5.9 MiB/s
done
Bytes transferred = 2793045 (2a9e55 hex)
StarFive # sf update 0xa0000000 0x100000 $filesize
device 0 offset 0x100000, size 0x2a9e55
835157 bytes written, 1957888 bytes skipped in 6.364s, speed 449203 B/s
StarFive #
これで電源を落として、microSDをDebian Image-69を入れたものにして再起動するとHDMIに表示がされました。
嬉しい
有線マウス、英字キーボードをUSBで繋いだら普通に使えてログインできました。
これでDebian Image-69が動くようになりました。
SSHログインするまで
モニタがラズパイ用で小さく、家には4Kモニタしかなくて、Changelogを見る限り4K対応はまだのようだったのでSSHログインすることにしました。
シルバニアファミリーもびっくりの小さなモニタ
ちなみに、解像度変更はDebianのGUIでのSettingsからは変更できましたが、xrandrを用いてカスタムの解像度に変更するとOSごと落ちました。また、4Kのモニタにつなぐとカーソルが真ん中に出てそのまま固まりました。発展途上なところがあります。
以下の内容を小さなモニタに気合いで打ちます。sshでrootログインを可能にします。
$ ip a
eth1: 192.168.*.*
$ echo "PermitRootLogin=yes" >> /etc/ssh/sshd_config
$ /etc/init.d/ssh restart
sshでログインできました。
IP addressはマスクしています
Cコンパイラを入れる
gcc
がみたところ入っていなかったので入れます。
使えるコマンド一覧は for x in ${PATH//:/ }; do ls -1 $x; done | sort | uniq
を使うと見れます。
gccはないがnodeは元から入っている
色々考えていたのですが、なんと apt install gcc
でriscv native binaryが入りました。
gccがaptで入る!
Hello Worldしてみます。
hello RISC-V!
objdump -d
してみると、確かにRISC-VのISA感があります。
objdumpした様子
その他
スペック: ちゃんとメモリ8GBのようです。プロセッサは4つ。
root@starfive:~/workspaces# free -h
total used free shared buff/cache available
Mem: 7.7Gi 515Mi 7.0Gi 11Mi 273Mi 7.2Gi
Swap: 0B 0B 0B
root@starfive:~/workspaces# cat /proc/cpuinfo
processor : 0
hart : 1
isa : rv64imafdc
mmu : sv39
uarch : sifive,u74-mc
processor : 1
hart : 2
isa : rv64imafdc
mmu : sv39
uarch : sifive,u74-mc
processor : 2
hart : 3
isa : rv64imafdc
mmu : sv39
uarch : sifive,u74-mc
processor : 3
hart : 4
isa : rv64imafdc
mmu : sv39
uarch : sifive,u74-mc
今後やってみたいこと
実現可能性は置いておきます。
- Cコンパイラが入ったので、自作CコンパイラをRISC-Vボードの上で書くという縛りで書く
-
vi
はあるのでコードが書ける
-
-
node
が入っているのでWebサーバを動かす -
rust
が書きたいのでrustup
やcargo
やrustc
がVisionFive 2上で動かないか試す- メモリは8GBある
- 4Kモニタ対応
- せっかくGUIがあるなら使いたい
- M.2にSSDを挿して使いたい
- Compatibility testにM.2のテストがなくて悲しい
- microSDカードは容量が少なく、安定でなく、遅いと思う
- CIマシンにしたい
- GitHub self-hosted runnerを動かしたいが、RISC-V対応していないのでそのままでは動かない & C#でできているので困難が予想される
Discussion