🐥

VisonFive2 (RISC-Vの評価ボード)が届いたのでその作業の記録

2023/03/18に公開
1


ボード上のシルクにはv1.3Bと書いてありました。

このQuick User Guide を見ています。
https://doc-en.rvspace.org/VisionFive2/PDF/VisionFive2_QSG.pdf

ドキュメントはここからたどれます。
https://rvspace.org/en/home

最初に結論

私はこのボードをクラウドファンディングでなくて、アマゾンで購入しました。
なので、ベータ版ではなくて正式版として出荷されたはずです。
しかしポカがあってこの時点での最新版の202302 Release をそのままでは起動することができません。

https://rvspace.org/en/project/VisionFive2_Debian_Wiki_202302_Release
このリリースノートを見ると、このバージョンのブートイメージからパーティションの個数が3個から4個に代わり、ディレクトリ構成も変わりました。U-Bootもそれに合わせて2023年2月版がリリースされ、正式版として出荷されたボードにはそのU-Bootがフラッシュメモリに書き込まれています。
本来ならばU-Bootの中のパラメータの初期値は、ブートイメージのパーディションとディレクトリ構成の変更に合わせて修正されるべきでしたが、そのままになってしまっていました。そのため普通にQuick User Guideに書かれている手順に従っても202302 ReleaseのDebianを起動することができません。

このU-Bootのパラメータを変更することは容易ですが、そのためにはU-Bootのシリアルコンソールでの操作が必要です。USB-シリアル変換ケーブルで先がバラバラになっているものを入手する必要があります。
(私はずいぶん前に秋葉原の店頭で買ったのですが、どこで買ったか忘れてしまいました。3.3V用のGND, VCC, RX, TXの4本が出ているものです。秋月電子の通販にあるものは先がバラバラになっていないので適していません。)

試していませんが、うまくいかない理由から逆算すると新しい 202302 はダメですが、ひとつ前のリリースの'Image 69'をマイクロSDカードに書けば起動できるかもしれません。 試してみたけどダメでした。不毛なのでこの件は深追いしません。

正常にDebianが起動した場合には、ボード上にある緑のLEDが定期的に点滅します。そうならない場合には起動に失敗していると思われます。

奮闘記

以降はいろいろ試したものをリアルタイムに追記していったものです。

DebianのイメージをマイクロSDカードに書き込んで、それを差し込んで電源を入れました。赤いLEDのみが点灯しました。
使用したイメージファイルはhttps://drive.google.com/drive/folders/1fBNI8kKIpwBfET1tCkfWgqsP0DM8X_yy
にあるstarfive-jh7110-202302-SD-minimal-desktop.img.bz2です。
HDMIにディスプレイをつないでみましたが信号は出ていませんでした。

UARTにつないでみる

UARTのピンの情報はQuick User Guide に記載されています。

Ubuntu 22.04を入れたMacBookAir をホストにしてUSBシリアルでVisonFive2をつないでみる。(LinuxならUSBシリアルの各種ドライバが標準で入っているから準備がいらない)

Ubuntu側では

$ sudo screen /dev/ttyUSB0 115200

これでVisionFive2の電源を入れたら反応あり。
(反応がなかったらUSBシリアル変換ケーブルのTXとRXを入れ替えて挿してみて試すつもりだった。)

どうやらU-Bootで止まっていてLinuxの起動まで行っていないようだ。

screenコマンドではスクロールバックできないので最後の30行くらいしかみられない。これだと不便なので、別のコマンドを試すことにした。

$ sudo apt install gtkterm

/dev/ttyUSB0をsudo しなくてもアクセスできるようにする。

$ ls -l /dev/ttyUSB0 
crw-rw---- 1 root dialout 188, 0 Mar 18 16:08 /dev/ttyUSB0

現在のユーザにdialoutを追加する。

$ sudo adduser $USER dialout

これは次のログインから反映されるので、一度ログアウトしてから再度ログインする。
確認。

$ id |grep dialout

これでgtktermで/dev/ttyUSB0をアクセスできる。これでスクロールバックできるようになった。

U-Boot

U-Bootのバージョンの確認。

StarFive # version
U-Boot 2021.10 (Feb 12 2023 - 18:15:33 +0800), Build: jenkins-VF2_515_Branch_SDK_Release-24

riscv64-buildroot-linux-gnu-gcc.br_real (Buildroot VF2_515_v2.10.0) 10.3.0
GNU ld (GNU Binutils) 2.36.1
StarFive # 

電源ONからのログは以下の通り。

U-Boot SPL 2021.10 (Feb 12 2023 - 18:15:33 +0800)
DDR version: dc2e84f0.
Trying to boot from SPI

OpenSBI v1.2
   ____                    _____ ____ _____
  / __ \                  / ____|  _ \_   _|
 | |  | |_ __   ___ _ __ | (___ | |_) || |
 | |  | | '_ \ / _ \ '_ \ \___ \|  _ < | |
 | |__| | |_) |  __/ | | |____) | |_) || |_
  \____/| .__/ \___|_| |_|_____/|____/_____|
        | |
        |_|

Platform Name             : StarFive VisionFive V2
Platform Features         : medeleg
Platform HART Count       : 5
Platform IPI Device       : aclint-mswi
Platform Timer Device     : aclint-mtimer @ 4000000Hz
Platform Console Device   : uart8250
Platform HSM Device       : jh7110-hsm
Platform PMU Device       : ---
Platform Reboot Device    : pm-reset
Platform Shutdown Device  : pm-reset
Firmware Base             : 0x40000000
Firmware Size             : 292 KB
Runtime SBI Version       : 1.0

Domain0 Name              : root
Domain0 Boot HART         : 1
Domain0 HARTs             : 0*,1*,2*,3*,4*
Domain0 Region00          : 0x0000000002000000-0x000000000200ffff (I)
Domain0 Region01          : 0x0000000040000000-0x000000004007ffff ()
Domain0 Region02          : 0x0000000000000000-0xffffffffffffffff (R,W,X)
Domain0 Next Address      : 0x0000000040200000
Domain0 Next Arg1         : 0x0000000042200000
Domain0 Next Mode         : S-mode
Domain0 SysReset          : yes

Boot HART ID              : 1
Boot HART Domain          : root
Boot HART Priv Version    : v1.11
Boot HART Base ISA        : rv64imafdcbx
Boot HART ISA Extensions  : none
Boot HART PMP Count       : 8
Boot HART PMP Granularity : 4096
Boot HART PMP Address Bits: 34
Boot HART MHPM Count      : 2
Boot HART MIDELEG         : 0x0000000000000222
Boot HART MEDELEG         : 0x000000000000b109


U-Boot 2021.10 (Feb 12 2023 - 18:15:33 +0800), Build: jenkins-VF2_515_Branch_SDK_Release-24

CPU:   rv64imacu
Model: StarFive VisionFive V2
DRAM:  8 GiB
MMC:   sdio0@16010000: 0, sdio1@16020000: 1
Loading Environment from SPIFlash... SF: Detected gd25lq128 with page size 256 Bytes, erase size 4 KiB, total 16 MiB
*** Warning - bad CRC, using default environment

StarFive EEPROM format v2

--------EEPROM INFO--------
Vendor : StarFive Technology Co., Ltd.
Product full SN: VF7110B1-2253-D008E000-00002979
data version: 0x2
PCB revision: 0xb2
BOM revision: A
Ethernet MAC0 address: 6c:cf:39:00:3a:a2
Ethernet MAC1 address: 6c:cf:39:00:3a:a3
--------EEPROM INFO--------

In:    serial@10000000
Out:   serial@10000000
Err:   serial@10000000
Model: StarFive VisionFive V2
Net:   eth0: ethernet@16030000, eth1: ethernet@16040000
switch to partitions #0, OK
mmc1 is current device
found device 1
bootmode flash device 1
** Invalid partition 3 **
Couldn't find partition mmc 1:3
Can't set block device
** Invalid partition 3 **
Couldn't find partition mmc 1:3
Can't set block device
Hit any key to stop autoboot:  0 
** Invalid partition 3 **
Couldn't find partition mmc 1:3
Can't set block device
Importing environment from mmc1 ...
## Warning: Input data exceeds 1048576 bytes - truncated
## Info: input data size = 1048578 = 0x100002
Can't set block device
## Warning: defaulting to text format
## Error: "boot2" not defined
switch to partitions #0, OK
mmc1 is current device
Scanning mmc 1:1...
libfdt fdt_check_header(): FDT_ERR_BADMAGIC
Card did not respond to voltage select! : -110
No EFI system partition
ethernet@16030000 Waiting for PHY auto negotiation to complete...... done
BOOTP broadcast 1
BOOTP broadcast 2
BOOTP broadcast 3
BOOTP broadcast 4
DHCP client bound to address 192.168.0.12 (2269 ms)
*** ERROR: `serverip' not set
Cannot autoload with TFTPGET
BOOTP broadcast 1
BOOTP broadcast 2
DHCP client bound to address 192.168.0.12 (512 ms)
*** ERROR: `serverip' not set
Cannot autoload with TFTPGET
StarFive # 

ん?マイクロSDカードの読み込みに失敗しているっぽいな。

そのマイクロSDカードをMacBookAir のUbuntu 22.04につないでも認識できない。壊れているっぽい。別のマイクロSDカードで再度トライする。

別のマイクロSDカードではMacBookAirのUbuntuで認識できた。これをVisionFive2につけて電源を入れても以下のようになって起動できない。

witch to partitions #0, OK
mmc1 is current device
found device 1
bootmode flash device 1
406 bytes read in 6 ms (65.4 KiB/s)
Importing environment from mmc1 ...
Can't set block device
Hit any key to stop autoboot:  0 
Can't set block device
## Warning: defaulting to text format
Can't set block device
libfdt fdt_check_header(): FDT_ERR_BADMAGIC
Retrieving file: /boot/extlinux/extlinux.conf
Can't set block device
Error reading config file
StarFive # 

64GBと8GBのマイクロSDカードで試したが同様の結果。
8GBだと最初からrootの使用量が95%になっているので、起動できたとしてもすぐに容量不足になりそう。 これはどの容量でもそうで、2GB分しか書き込まれていないから。Linuxが起動した後でパーティションのサイズを拡張する。
Quick User Guideにも32GBかそれ以上のものを使えと書いてある。

Linux起動に成功

以下のようにU-Bootで2つのパラメータを変更して、saveenv で保存し、電源を入れ直すとLinuxの起動ができるようになりました。

StarFive # setenv bootdir
StarFive # setenv fatbootpart 1:3
StarFive # saveenv
Saving Environment to SPIFlash... Erasing SPI flash...Writing to SPI flash...done
OK

setenv bootdir で値を指定しないのはこの環境変数を未定義にするという意味です。
この設定変更を見つけるまでだいぶ苦労しました。ロードするファイルが見つからない場合は黙ってないで、ちゃんとFile Not Found :<ファイル名> というエラーメッセージを出してくれれば、もっと解決が早かったのに。

starfive login: 

このプロンプトにはroot パスワードに starfive でログインできます。これはQuick User Guideに記載されています。

最初に試したときにマイクロSDカードが壊れていたのはSDカードリーダライターの不良だったようです。(書き込みにはMacOS用のbalenaEtcherを使用したのですが、このツールは本当にベリファイしているのかな??私が使ったEtcherは2021年版の古いものでした。とりあえずそれは消して新しいバージョンをダウンロードしました。)

ルートのパーティションの拡張

こちらの手順を参照。
https://doc-en.rvspace.org/VisionFive2/Quick_Start_Guide/VisionFive2_QSG/extend_partition.html

# df -h /
Filesystem      Size  Used Avail Use% Mounted on
/dev/mmcblk1p4  2.0G  1.9G   82M  96% /

最初は2GB分しか書き込まれていません。これを広げます。この方法はQuick User Guideに記載されています。

fdiskでパーティション情報を一度削除して作り直します。危険な作業なので間違えないように。

# fdisk /dev/mmcblk1

Welcome to fdisk (util-linux 2.38.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

GPT PMBR size mismatch (4505599 != 60899327) will be corrected by write.
The backup GPT table is not on the end of the device. This problem will be corrected by write.
This disk is currently in use - repartitioning is probably a bad idea.
It's recommended to umount all file systems, and swapoff all swap
partitions on this disk.


Command (m for help): d
Partition number (1-4, default 4): 4

Partition 4 has been deleted.

Command (m for help): n
Partition number (4-128, default 4): 4
First sector (34-60899294, default 221184): 
Last sector, +/-sectors or +/-size{K,M,G,T,P} (221184-60899294, default 60897279): 

Created a new partition 4 of type 'Linux filesystem' and of size 28.9 GiB.
Partition #4 contains a ext4 signature.

Do you want to remove the signature? [Y]es/[N]o: N

Command (m for help): w

The partition table has been altered.
Syncing disks.

次にresize2fs1コマンドを使います。

#  resize2fs /dev/mmcblk1p4
resize2fs 1.46.6-rc1 (12-Sep-2022)
Filesystem at /d[ 2082.199214] EXT4-fs (mmcblk1p4): resizing filesystem from 535291 to 7584512 blocks
ev/mmcblk1p4 is mounted on /; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 4
[ 2083.637768] EXT4-fs (mmcblk1p4): resized filesystem to 7584512
The filesystem on /dev/mmcblk1p4 is now 7584512 (4k) blocks long.
# df -h /
Filesystem      Size  Used Avail Use% Mounted on
/dev/mmcblk1p4   29G  1.9G   27G   7% /

うまく拡張できて、空き領域が増えました。これくらいなら8GBのマイクロSDカードでもいけそうですね。

sshd と avahi を動かす

# sudo apt update
# sudo apt upgrade
# sudo apt install ssh avahi-daemon

確認。

# ps ax |grep [s]sh
   1204 ?        Ss     0:00 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
# ps ax |grep [a]vahi
    351 ?        Ss     0:06 avahi-daemon: running [starfive.local]
    361 ?        S      0:00 avahi-daemon: chroot helper

一般ユーザーの作成。kobaというユーザーを作り、sudo権限を与えます。

# adduser koba
# adduser koba sudo

これで他のマシンからsshでログインすることができるようになります。

$ ssh koba@starfive.local

sshの公開鍵を登録してパスワードなしでログインできるようにしておきます。

$ cat ~/.ssh/id_ed25519.pub |ssh starfive.local sh -c "cat >> ~/.ssh/authorized_keys"

sshでログインできるようになれば、USBシリアル変換ケーブルはもう抜いても大丈夫です。

その他もろもろ

そうそう、cpuinfoとメモリサイズを確認しましょう。

$ 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

$ free -h
               total        used        free      shared  buff/cache   available
Mem:           7.7Gi       312Mi       7.0Gi       6.3Mi       529Mi       7.4Gi
Swap:             0B          0B          0B

タイムゾーンの設定

$ sudo timedatectl set-timezone Japan

GUIを起動しない

$ sudo systemctl set-default multi-user.target

次回の起動から有効。

2023/04/29 追記

VisionFive 2で使用しているSoC(StarFive JH7110)がLinuxカーネル6.3でサポートされるようになります。そこにはVisionFive 2ボード用のデバイスツリーのファイルも含まれているようです。これでこのボードでも最新のカーネルが試せそうです。

https://www.cnx-software.com/2023/04/24/linux-6-3-release-notable-changes-arm-risc-v-and-mips-architectures/

でも6.3では最小限で、6.4以降にならないと実用にならなさそう。USBとPCIeがまだレビュー中。
https://rvspace.org/en/project/JH7110_Upstream_Plan

関連

https://zenn.dev/tetsu_koba/articles/6d75546d68bd95
https://qiita.com/tetsu_koba/items/d0ccbce567b9ffbfe409

Discussion

rkarsnkrkarsnk

こんにちは.
私が入手したのは,VisionFive 2 ver1.3B (基板に書いてありました)です.

2023/04/01に配布されたDebianのイメージを起動させるために,以下の作業をやりました.

  • https://github.com/starfive-tech/VisionFive2 で配布されている BuildRoot環境のLinux (sdcard.img) を起動
  • SPLとu-bootを最新のものにアップデート(Feb 12 2023ビルドのものから,Mar 24 2023へ)

2023/04/01に配布されたDebianでは,リポジトリの鍵に関するエラーが起きたので,source.listを修正し,sidにfull-upgradeすることで,使えるようになりました.

参考URL : https://gihyo.jp/admin/serial/01/ubuntu-recipe/0752