昉・星光2 VisionFive2

「麦わら帽子はもう消えた」(「夏休み」吉田拓郎1971/1/1)。
というわけで、夏休みの自由研究として「昉・星光2」VisionFive2。
IMG_20230811_131743164


IMG_20230811_131816149


0.ざっくりスペック

  • CPU:StarFive JH7110 (U74 4 Core 1.5GHz) RV64GC
  • LPDDR4 SDRAM 2GiB/4GiB/8GiB 2800Mbps
  • QSPI Flash(Boot Loader)
  • microSD Card Slot(TF Card Slot)
  • eMMC Socket
  • M.2 M-key NVMe Connector(2280)
  • 1000BASE-T × 2
  • USB 3.0 × 4
  • USB-C(Power Supply)
  • MIPI CSI/DSI
  • GPIO Headers
  • Video Processing Unit/GPU
  • HDMI

1.ブートローダ更新

SPL(Secondary Program Loader)と U-Boot が古く、最新の Debian を起動できない。
書き込みツールと最新版の SPL(Secondary Program Loader)と U-Boot をダウンロードする。
VisionFive2 Software v3.4.5
  1. sdcard.img 書き込みツール(Minimum LINUX)
  2. u-boot-spl.bin.normal.out SPL
  3. visionfive2_fw_payload.img U-Boot
ETCHER(microSDカード書き込みツール)で sdcard.img を microSDカードに書き込む。
microSDカードを挿入、電源ON。
Advanced Port Scanner(ネットワークスキャナ)で IPアドレスを特定。
Tera Termで ssh接続。(root/starfive)
u-boot-spl.bin.normal.out と visionfive2_fw_payload.img を Tera Term にドラッグ&ドロップ(scp によるファイル転送)。
# flashcp -v u-boot-spl.bin.normal.out /dev/mtd0
# flashcp -v visionfive2_fw_payload.img /dev/mtd1
以上でブートローダの更新完了。
reboot して正常に起動することを確認。

2.Debian のディスクイメージの microSDカードを作成する

今回は最新版にしておこう。
VisionFive2 Debian starfive-jh7110-202306-SD-minimal-desktop.img.bz2 をダウンロード。
WSL で解凍。
nitobe@X280-i5:~$ bzip2 -d starfive-jh7110-202306-SD-minimal-desktop.img.bz2
解凍された starfive-jh7110-202306-SD-minimal-desktop.img を ETCHER で microSDカードに書き込む。
以上でディスクイメージの作成完了。

3.Debian 起動

microSD カードを取り換えて、起動。
Tera Term でログイン。(user/starfive)

bookworm


user@starfive:~$  uname -a
Linux starfive 5.15.0-starfive #1 SMP Sun Jun 11 07:48:39 UTC 2023 riscv64 GNU/Linux
user@starfive:~$ cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux bookworm/sid"  # おっ!debian12の sid だね。
NAME="Debian GNU/Linux"
VERSION_CODENAME=bookworm
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
user@starfive:~$ cat /etc/debian_version
bookworm/sid
user@starfive:~$ su -
Password:
root@starfive:~# passwd root            # root パスワード変更。
New password:
Retype new password:
passwd: password updated successfully
root@starfive:~# adduser nitobe           # ユーザ追加。
Adding user `nitobe' ...
Adding new group `nitobe' (1001) ...
Adding new user `nitobe' (1001) with group `nitobe (1001)' ...
Creating home directory `/home/nitobe' ...
Copying files from `/etc/skel' ...
New password:
Retype new password:
passwd: password updated successfully
Changing the user information for nitobe
Enter the new value, or press ENTER for the default
        Full Name []: Hiroaki Nitobe
        Room Number []: 204
        Work Phone []:
        Home Phone []:
        Other []:
Is the information correct? [Y/n] y
Adding new user `nitobe' to supplemental / extra groups `users' ...
Adding user `nitobe' to group `users' ...
root@starfive:~# apt install vim           # vim インストール。
  :

4.パーティション拡張

パーティション /dev/mmcblkp4 が 2.5GByte しかないのでmicroSD最大(60GByte)まで拡張。
root@starfive:~# df
Filesystem     1K-blocks    Used Available Use% Mounted on
udev             4036000       0   4036000   0% /dev
tmpfs             809964    3212    806752   1% /run
/dev/mmcblk1p4   2538164 2280560    241220  91% /
tmpfs            4049816       0   4049816   0% /dev/shm
tmpfs               5120      12      5108   1% /run/lock
tmpfs             809960      40    809920   1% /run/user/110
tmpfs             809960      24    809936   1% /run/user/1000
root@starfive:~# 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 (5529599 != 123596799) 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): p                      # 現在の状況

Disk /dev/mmcblk1: 58.94 GiB, 63281561600 bytes, 123596800 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: E05DB137-41F7-47A6-B1C1-E9BE91A4BC0E

Device          Start     End Sectors  Size Type
/dev/mmcblk1p1   4096    8191    4096    2M HiFive BBL
/dev/mmcblk1p2   8192   16383    8192    4M HiFive FSBL
/dev/mmcblk1p3  16384  221183  204800  100M EFI System
/dev/mmcblk1p4 221184 5527518 5306335  2.5G Linux filesystem  # 2.5GByte

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-123596766, default 221184): 221184 # Firstはデフォルト 221184
Last sector, +/-sectors or +/-size{K,M,G,T,P} (221184-123596766, default 123594751):
                            # Lastはデフォルト 123594751
Created a new partition 4 of type 'Linux filesystem' and of size 58.8 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.

root@starfive:~# resize2fs /dev/mmcblk1p4      # リサイズ
resize2fs 1.46.6-rc1 (12-Sep-2022)
Filesystem at /dev/mmcblk1p4 is mounted on /; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 8
The filesystem on /dev/mmcblk1p4 is now 15421696 (4k) blocks long.

root@starfive:~# df
Filesystem     1K-blocks    Used Available Use% Mounted on
udev             4036000       0   4036000   0% /dev
tmpfs             809964    3212    806752   1% /run
/dev/mmcblk1p4  60686316 2296992  58372940   4% / # 58.8 GiBに増えた!
tmpfs            4049816       0   4049816   0% /dev/shm
tmpfs               5120      12      5108   1% /run/lock
tmpfs             809960      40    809920   1% /run/user/110
tmpfs             809960      24    809936   1% /run/user/1000
root@starfive:~#
reboot して正常に起動することを確認。

5.リポジトリの設定

deb https://snapshot.debian.org/archive/debian-ports/20221225T084846Z unstable main を最新のsidに変更する。

trixie


root@starfive:~# mv /etc/apt/sources.list{,.d/snapshot.conf.disabled}
root@starfive:~# echo "deb http://deb.debian.org/debian-ports unstable main" | sudo tee /etc/apt/sources.list
root@starfive:~# wget https://deb.debian.org/debian-ports/pool/main/d/debian-ports-archive-keyring/debian-ports-archive-keyring_2023.02.01_all.deb
root@starfive:~# apt install ./debian-ports-archive-keyring_2023.02.01_all.deb
root@starfive:~# apt update
root@starfive:~# apt full-upgrade
  :                 # 800近くの更新がある かなりの時間がかかる
root@starfive:~# uname -a
Linux starfive 5.15.0-starfive #1 SMP Sun Jun 11 07:48:39 UTC 2023 riscv64 GNU/Linux
root@starfive:~# cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux trixie/sid"      # なんと!debian13の sid だ!
NAME="Debian GNU/Linux"
VERSION_CODENAME=trixie
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
root@starfive:~# cat /etc/debian_version
trixie/sid
root@starfive:~# apt install mtd-utils # flashcp インストール
  :
root@starfive:~# flashcp --version
flashcp (mtd-utils) 2.1.5
root@starfive:~# apt install pciutils  # lspci インストール
  :
root@starfive:~# lspci
00:00.0 PCI bridge: PLDA XpressRich-AXI Ref Design (rev 02)
01:00.0 USB controller: VIA Technologies, Inc. VL805/806 xHCI USB 3.0 Controller (rev 01)

6.開発環境インストール

開発環境をインストールする。
root@starfive:~# apt install build-essential m4   # 開発環境をインストール
  :
root@starfive:~# cc --version
cc (Debian 13.1.0-9) 13.1.0            # なんと!Version13!
Copyright (C) 2023 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
FizzBuzzでテストしてみる。
nitobe@starfive:~$ mkdir FizzBuzz
nitobe@starfive:~$ cd FizzBuzz
nitobe@starfive:~/FizzBuzz$ vi FizzBuzzVF2.s
#include        

int main(void)
{
        int     i = 0;

        while (i++ ^ 100) {
                printf(i%3? "": "Fizz") |
                printf(i%5? "": "Buzz") ||
                printf("%d", i);
                printf(" ");
        }
        printf("\n");

        return 0;
}
nitobe@starfive:~/FizzBuzz$ cc -S FizzBuzzVF2.c
nitobe@starfive:~/FizzBuzz$ vi FizzBuzzVF2.c
        .file   "FizzBuzzVF2.c"
        .option pic
        .attribute arch, "rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_zicsr2p0_zifencei2p0"
        .attribute unaligned_access, 0
        .attribute stack_align, 16
        .text
        .section        .rodata
        .align  3
.LC0:
        .string ""
        .align  3
.LC1:
        .string "Fizz"
        .align  3
.LC2:
        .string "Buzz"
        .align  3
.LC3:
        .string "%d"
        .text
        .align  1
        .globl  main
        .type   main, @function
main:
.LFB0:
        .cfi_startproc
        addi    sp,sp,-48
        .cfi_def_cfa_offset 48
        sd      ra,40(sp)
        sd      s0,32(sp)
        sd      s1,24(sp)
        .cfi_offset 1, -8
        .cfi_offset 8, -16
        .cfi_offset 9, -24
        addi    s0,sp,48
        .cfi_def_cfa 8, 0
        sw      zero,-36(s0)
        j       .L2
.L10:
        lw      a5,-36(s0)
        mv      a4,a5
        li      a5,3
        remw    a5,a4,a5
        sext.w  a5,a5
        beq     a5,zero,.L3
        lla     a5,.LC0
        j       .L4
.L3:
        lla     a5,.LC1
.L4:
        mv      a0,a5
        call    printf@plt
        mv      a5,a0
        mv      s1,a5
        lw      a5,-36(s0)
        mv      a4,a5
        li      a5,5
        remw    a5,a4,a5
        sext.w  a5,a5
        beq     a5,zero,.L5
        lla     a5,.LC0
        j       .L6
.L5:
        lla     a5,.LC2
.L6:
        mv      a0,a5
        call    printf@plt
        mv      a5,a0
        or      a5,s1,a5
        sext.w  a5,a5
        bne     a5,zero,.L12
        lw      a5,-36(s0)
        mv      a1,a5
        lla     a0,.LC3
        call    printf@plt
.L12:
        nop
        li      a0,32
        call    putchar@plt
.L2:
        lw      a5,-36(s0)
        addiw   a4,a5,1
        sw      a4,-36(s0)
        mv      a4,a5
        li      a5,100
        bne     a4,a5,.L10
        li      a0,10
        call    putchar@plt
        li      a5,0
        mv      a0,a5
        ld      ra,40(sp)
        .cfi_restore 1
        ld      s0,32(sp)
        .cfi_restore 8
        .cfi_def_cfa 2, 48
        ld      s1,24(sp)
        .cfi_restore 9
        addi    sp,sp,48
        .cfi_def_cfa_offset 0
        jr      ra
        .cfi_endproc
.LFE0:
        .size   main, .-main
        .ident  "GCC: (Debian 13.1.0-9) 13.1.0"
        .section        .note.GNU-stack,"",@progbits
nitobe@starfive:~/FizzBuzz$ cc -o FizzBuzzVF2 FizzBuzzVF2.c
nitobe@starfive:~/FizzBuzz$ ./FizzBuzzVF2
1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 FizzBuzz 16 17 Fizz 19 Buzz Fiz
z 22 23 Fizz Buzz 26 Fizz 28 29 FizzBuzz 31 32 Fizz 34 Buzz Fizz 37 38 Fizz Buzz
41 Fizz 43 44 FizzBuzz 46 47 Fizz 49 Buzz Fizz 52 53 Fizz Buzz 56 Fizz 58 59 Fi
zzBuzz 61 62 Fizz 64 Buzz Fizz 67 68 Fizz Buzz 71 Fizz 73 74 FizzBuzz 76 77 Fizz
79 Buzz Fizz 82 83 Fizz Buzz 86 Fizz 88 89 FizzBuzz 91 92 Fizz 94 Buzz Fizz 97
98 Fizz Buzz

7.GMP(The GNU Multiple Precision Arithmetic Library)ビルド

しばらく目を離していたらGMPが6.3.0になっていた。ビルドしよう。
root@starfive:~# wget https://gmplib.org/download/gmp/gmp-6.3.0.tar.lz
  :
root@starfive:~# apt install lzip
  :
root@starfive:~# tar xvf gmp-6.3.0.tar.lz
  :
root@starfive:~# cd gmp-6.3.0
root@starfive:~gmp-6.3.0# mkdir build
root@starfive:~gmp-6.3.0# cd build
root@starfive:~gmp-6.3.0/build# ../configure -prefix=/usr/local/gmp-6.3.0
  :
root@starfive:~gmp-6.3.0/build# make -j 4
  :
root@starfive:~gmp-6.3.0/build# make check
  :
root@starfive:~gmp-6.3.0/build# make install
  :
root@starfive:~gmp-6.3.0/build# make clean
  :
root@starfive:~gmp-6.3.0/build#^d
いつもの円周率百万桁の計算をしてみよう。
nitobe@starfive:~$ rsync -av 192.168.1.xx:/home/nitobe/suzuki/ suzuki/
nitobe@starfive:~$ cd suzuki
nitobe@starfive:~/suzuki$ cc -Wall -static -O2 -I/usr/local/gmp-6.3.0/include pi.c -o pi-6.3.0 /usr/local/gmp-6.3.0/lib/libgmp.a
nitobe@starfive:~/suzuki$ time ./pi-6.3.0 >/dev/null
with gcc-13.1.0, gmp-6.3.0

real    0m8.896s
user    0m8.708s
sys     0m0.180s
nitobe@starfive:~/suzuki$
すずきひろのぶ氏の円周率100万桁ソースコードを用いて各世代RaspberryPiの速度比較を行う
Raspberry Pi 4 より遅く、Raspberry Pi 3 より速い。
  Hardware   Central
  Processing
  Unit
  Operating
  System
  gcc   gmp   time
Raspberry Pi 4
Model B Rev 1.2
(2019)
ARM Cortex-A72
1.5GHz
RaspberryPiOS
(Debian 11 (bullseye))
10.2.1 6.2.1 4.875s
VisionFive2
(2022)
StarFive JH7110
(U74 4 Core 1.5GHz)
RV64GC
Debian GNU/Linux trixie/sid 13.1.0 6.3.0 8.896s
Raspberry Pi 3
Model B Rev 1.2
(2016)
ARM Cortex-A53
1.2GHz
RaspberryPiOS
(Debian 11 (bullseye))
10.2.1 6.2.1 13.826s

T: Y: ALL: Online:
ThemeSwitch
  • Basic
Created in 0.0192 sec.
prev
2024.4
next
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30        
 
strawberry-linux geigercounter Ver.2
Sibasaki, Cyofu City, Tokyo, JAPAN
blogBar