Milk-V Duo 256MでUbuntuを使ってみる

Ubuntuのインストール

Milk-V Duo 256Mに使われているSoCはSOPHGOのSG2002で、CPUはC906@1GHz+C906@700MHz+Cortex-A53@1GHzの 3コアです。
これ以外に8051 8-bit microcontroller core@25が搭載されています。
C906はT-HEAD Semicondactor(Alibabaの子会社)のXuanTieシリーズのRISC-VのCPUです。
XuanTieシリーズについてはこ ちらに詳しく紹介されています。
Raspberry Pi、OrangePi、NanoPi、LuckfoxPicoなど、今までArmのCPUばかり使ってきました。
RISC-VのCPUはESP32Cシリーズに使われていますが、このCPUを使ったLinuxボードは初めてです。

CPUコアは沢山ありますが、Linuxで使用するコアは1つだけです。
Cortex-A53@1GHzではFreeRTOSが動いているみたいです。

Milk-Vの公式イメージはbuildrootですが、これ以外のOSイメージがいくつか公開されています。
そこで、今回はUbuntuを使うことにしました。
Ubuntuイメージはこ ちらからダウンロードすることができます。
今回使用したのは「milkv-duo-256m-ubuntu-22.04-riscv64-v0.0.4-spiritdude」のイメージ です。

SDカードへの書き込みはrufusを使いましたが、イメージファイルが圧縮されていないので、SDカードへの書き込みは結構時間が掛かります。
SDカードが準備できたら、USB-TTL変換アダプターを本体のデバッグポートに接続します。
GPIOのピン配置はこち らに公開されていますが、デバッグポートはピン番号16(TX)、17(RX)です。
USB-TTLアダプターをWindowsマシンに接続し、TeraTermを起動してから、ボードのUSB経由で電源を供給します。
ずらずらとブートメッセージが表示されてログインプロンプトが表示されます。


root/milkvのユーザが事前に登録されています。


提供されているUbuntuのバージョンはUbuntu22.04です。


Swapは有りません。


/etc/fstabを見てみましたが/dev/mmcblk0p3のマウントが間違っています。


/etc/fstabの最後のエントリをコメントアウトして再起動し、以下のコマンドでSwapを再登録してみました。
swaponが正しく動きません。


以下のコマンドでSwapファイルを作ってみましたが、やはりswpaonが正しく動きません。
Swapはあきらめました。


提供されているUbuntuはRNDIS機能が最初から有効になっていて、USBポートに対して「192.168.42.1」のIPアドレス がアサインされます。
WindowsやLinuxホストのIPアドレスを同じセグメントに変更することで、USBポートを使ったネットワークが使えるようになります。


RNDISを使ったネットワーク共有についてはこ ちらで紹介していま す。
母艦側のネットワーク共有を有効にすることで、Milk-Vから外部にネットワークが繋がります。


Milk-V Duo64Mではメモリが小さすぎて、aptコマンドは使い物になりませんでしたが、
Milk-V Duo256Mではapt updateもapt upgradeも問題なく動きます。
開発環境はインストールされていません。


aptを使ってbuild-essentialをインストールしました。
cコンパイラーが動くようになりました。


デフォルトではpipがインストールされていません。


pipをインストールし、pip本体を更新します。
# apt install python3-pip python3-setuptools

# python3 -m pip install -U pip
Requirement already satisfied: pip in /usr/lib/python3/dist-packages (22.0.2)
Collecting pip
  Downloading pip-24.1.1-py3-none-any.whl (1.8 MB)
     qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq 1.8/1.8 MB 1.3 MB/s eta 0:00:00
Installing collected packages: pip
  Attempting uninstall: pip
    Found existing installation: pip 22.0.2
    Not uninstalling pip at /usr/lib/python3/dist-packages, outside environment /usr
    Can't uninstall 'pip'. No files were found to uninstall.
Successfully installed pip-24.1.1
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv

全く問題なくインストールすることが出来ました。


デバイスファイルを確認してみます。
SPIデバイスが間違って定義されています。
ledsもpwmも有りません。


UnixBenchをインストールしてみました。
$ apt install git

$ git clone https://github.com/kdlucas/byte-unixbench.git

$ cd byte-unixbench/UnixBench

$ ./Run


========================================================================
   BYTE UNIX Benchmarks (Version 5.1.3)

   System: milkv-duo: GNU/Linux
   OS: GNU/Linux -- 5.10.4-tag- -- #1 PREEMPT Sun Dec 31 12:38:36 UTC 2023
   Machine: riscv64 (riscv64)
   Language: en_US.utf8 (charmap="ANSI_X3.4-1968", collate="ANSI_X3.4-1968")
   07:32:24 up 21 min,  0 users,  load average: 0.53, 0.20, 0.07; runlevel

------------------------------------------------------------------------
Benchmark Run: Sat Jun 15 2024 07:32:24 - 08:00:36
1 CPU in system; running 1 parallel copy of tests

Dhrystone 2 using register variables        2579220.5 lps   (10.0 s, 7 samples)
Double-Precision Whetstone                      928.3 MWIPS (10.0 s, 7 samples)
Execl Throughput                                369.3 lps   (29.9 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks         37166.5 KBps  (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks            9648.9 KBps  (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks        112583.7 KBps  (30.0 s, 2 samples)
Pipe Throughput                              120887.2 lps   (10.0 s, 7 samples)
Pipe-based Context Switching                  27250.0 lps   (10.0 s, 7 samples)
Process Creation                               1009.6 lps   (30.0 s, 2 samples)
Shell Scripts (1 concurrent)                    765.1 lpm   (60.0 s, 2 samples)
Shell Scripts (8 concurrent)                     98.2 lpm   (60.5 s, 2 samples)
System Call Overhead                         340326.9 lps   (10.0 s, 7 samples)

System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0    2579220.5    221.0
Double-Precision Whetstone                       55.0        928.3    168.8
Execl Throughput                                 43.0        369.3     85.9
File Copy 1024 bufsize 2000 maxblocks          3960.0      37166.5     93.9
File Copy 256 bufsize 500 maxblocks            1655.0       9648.9     58.3
File Copy 4096 bufsize 8000 maxblocks          5800.0     112583.7    194.1
Pipe Throughput                               12440.0     120887.2     97.2
Pipe-based Context Switching                   4000.0      27250.0     68.1
Process Creation                                126.0       1009.6     80.1
Shell Scripts (1 concurrent)                     42.4        765.1    180.5
Shell Scripts (8 concurrent)                      6.0         98.2    163.7
System Call Overhead                          15000.0     340326.9    226.9
                                                                   ========
System Benchmarks Index Score                                         123.1

同じCPUコアを使っているボードを持っていないので、比較が難しいですが、エントリーレベルのCortex-A7と比べてみました。
C906はかなり低いスコアであることが分かりました。
64MメモリーのPico Miniと比べても相当低いです。


個別のスコアで比較すると純粋なCPU能力を示すDhrystoneに差が出ています。

Pico Mini
64M
Pico Max
256M
Milk-V
256M
Dhrystone 2 using register variables 383.8 405.4 221.0
Double-Precision Whetstone 187.3 197.8 168.8
Execl Throughput 89.9 104.7 85.9
File Copy 1024 bufsize 2000 maxblocks 112.1 254.9 93.9
File Copy 256 bufsize 500 maxblocks 188.7 203.2 58.3
File Copy 4096 bufsize 8000 maxblocks 29.0 440.3 194.1
Pipe Throughput 265.3 283.3 97.2
Pipe-based Context Switching 205.8 217.7 68.1
Process Creation 101.6 119.5 80.1
Shell Scripts (1 concurrent) 243.5 279.7 180.5
Shell Scripts (8 concurrent) 222.8 256.9 163.7
System Call Overhead 525.2 552.8 226.9



シングルコアのLuckfox Picoと価格を比較してみました。
Picoの価格はこちらのオフィシャ ルページの価格で、Milk-Vの価格はAliExpressの価格です。
AliExpressの価格はセーラーにより変わるので参考です。
Luckfoxの送料は一個口あたりの送料で、同時に複数個購入しても$5.00です。
例えば、Luckfoxを2個同時に購入すると、1個当たりの送料は$2.50になります。
Model CPU Memory NAND FLASH Network Price Shipping Total
Milk-V Duo 64M C906@1GHz 64MB

$6.49 $2.63 $9.12
Milk-V Duo 256M C906@1GHz 256MB

$9.90 $2.63 $12.53
Luckfox Pico Cortex-A7@1.2GHz 64MB

$6.99 $5.00 $11.99
Luckfox Pico Mini-A Cortex-A7@1.2GHz 64MB

$6.99 $5.00 $11.99
Luckfox Pico Mini-B Cortex-A7@1.2GHz 64MB 128MB
$8.99 $5.00 $13.99
Luckfox Pico Plus Cortex-A7@1.2GHz 64MB 128MB Ethernet $9.99 $5.00 $14.99
Luckfox Pico Pro Cortex-A7@1.2GHz 128MB 256MB Ethernet $12.99 $5.00 $17.00
Luckfox Pico Max Cortex-A7@1.2GHz 256MB 256MB Ethernet $14.99 $5.00 $19.99

Milk-V Duo 64Mと比べると全然動きが違います。
メモリが256Mあると、ネットワーク共有もストレスなく動きますが、OSの出来がひどすぎます。
あと$5追加してLuckFox Pico Max購入した方がいいです。