はじめに
RISC-V は……お好きですか?(スラムダンク第1話っぽく)
名前だけは聞いたことあるよー、って人!
……いない!?
ならなんで、この記事を開いた! お前たち100点だ。
RISC-V ボードをゲットした後、最初にやりたいこと。それは neofetch/fastfetch でシステム情報を表示して、スクショを撮ることではないでしょうか。
でも、RISC-V ボードでそれらを実行しても、RISC-V 固有情報が表示されるわけではありません。
ISA 拡張文字列の詳細、Hart 数、ハードウェア ID、ベクトル拡張の状態……。これらの情報は見られないか、表示されても生の文字列のままです。
そこで作ったのが riscfetch です。
riscfetch とは
riscfetchは、RISC-V 専用のシステム情報表示ツールです。RISC-V アーキテクチャに特化した情報を、neofetch 風のスタイルで表示します。
RISC-V 固有の情報(上半分)と、一般的なシステム情報(下半分)を分けて表示します。
なぜ作ったのか
RISC-V が楽しいから!
日本のアニメや、アメリカの映画、中国の食べ物が好きだし、クールな技術と未来が好きです。
RISC-V 特有の情報を確認したいとき、毎回 /proc/cpuinfo を cat して ISA 文字列を目で追うのは面倒です。「rv64imafdc」の各文字が何を意味するのか、ベクトル拡張は有効なのか、ひと目でわかるツールがあれば便利だと思いました。
誰でも思いつきそうなアイデアなのに、調べても誰も作ってないみたいでした。
中国に何億人もいるのにっ!?
主な機能
ISA 拡張の解析と表示
ISA 文字列を解析して、標準拡張と Z 拡張を分けて表示します。
ISA: rv64imafdcv_zicsr_zifencei_zba_zbb_zbs
Ext: I M A F D C V
Z-Ext: zicsr zifencei zba zbb zbs
-e フラグで各拡張の意味も表示できます:
riscfetch -e
Ext: I (Integer) M (Multiply) A (Atomic) F (Float) D (Double) C (Compressed) V (Vector)
Z-Ext: zicsr (CSR Instructions) zifencei (Fence.I) zba (Address) zbb (Basic Bit) zbs (Single-bit)
38 種類の Z 拡張パターンに対応しています。
ハードウェア ID 表示
RISC-V CSR から取得したハードウェア ID を表示します:
HW IDs: vendor:0x489 arch:0x8000000000000007 impl:0x0
- vendor: mvendorid(ベンダー ID)
- arch: marchid(アーキテクチャ ID)
- impl: mimpid(実装 ID)
ベクトル拡張と VLEN 検出
V 拡張の有無だけでなく、VLEN の値も検出します:
Vector: Enabled, VLEN>=128
11 種類のベンダーロゴ
-l オプションでベンダーロゴを切り替えられます:
riscfetch -l starfive
riscfetch -l sifive
riscfetch -l milkv
対応ベンダー:
| ベンダー | 代表的なボード |
|---|---|
default |
汎用 RISC-V ロゴ |
sifive |
HiFive Unmatched, Unleashed |
starfive |
VisionFive 2 |
kendryte |
K210, K510 |
allwinner |
D1 |
espressif |
ESP32-C3, C6 |
spacemit |
K1, Orange Pi RV2 |
thead |
XuanTie C906, C910 |
milkv |
Duo, Mars, Pioneer |
sipeed |
Lichee, Maix シリーズ |
sophgo |
CV1800B, SG2000 |
ロゴは figlet-rs を使って動的に生成しています。
マイナーなベンダーのボードを所持してる人は
「こんな RISC-V ボード、オレは 36 枚持っているよ……」みたいに自慢しましょう。
JSON 出力
-j フラグで機械可読な JSON 形式で出力できます:
riscfetch -j | jq .
スクリプトとの連携に便利でしょう。しらんけど。
fastfetch との使い分け
riscfetch は fastfetch と競合ではなく補完の関係です。
- fastfetch: Shell、Terminal、パッケージ数、DE、GPU 等の汎用情報
- riscfetch: ISA 拡張、Hart、ハードウェア ID 等の RISC-V 固有情報
両方使うことで、お持ちのRISC-V セットアップの全体像が見えてきます。
fastfetch && riscfetch
RISC-V 以外は動かない
岸辺露伴は動かない、みたいな?
これは意図的な設計です。RISC-V 以外のアーキテクチャでは、情報を表示せずに終了します。
「RISC-V 専用」というアイデンティティを明確にするためです。x86 や ARM へのフォールバックは実装していません。
neofetch が流行った理由って、
- テキストで美しく再現されたロゴ
- 簡単に実行できる
- ブログに貼れる
というシンプルな仕様の裏に
- あわよくばユーザー名とマシンスペックを見せたい!
- マイナーな OS を使える技量を自慢したい!
みたいな、ほのかな欲を匂わせず(← ここ重要)叶えてくれたからと思うのです。
ついでに写っちゃったみたいな。
それを超えて
riscfetchの実行結果をブログに貼れた時点で、すげー!ってなったら面白いと思いました。
実行自体が困難……というね。
技術的な話
Rust + ワークスペース構成
プロジェクトは 2 つのクレートで構成されています:
crates/
├── riscfetch-core/ # ライブラリ(システム情報取得)
└── riscfetch-cli/ # CLIツール(表示・オプション処理)
- riscfetch-core: RISC-V 情報取得のライブラリ。他のプロジェクトからも使えます
- riscfetch: CLI ツール本体
情報ソース
| 情報 | ソース |
|---|---|
| ISA 文字列 | /proc/cpuinfo |
| Hart 数 | /proc/cpuinfo |
| ハードウェア ID |
/proc/cpuinfo (CSR values) |
| ボードモデル | /proc/device-tree/model |
| SoC | /proc/device-tree/compatible |
| キャッシュ | /sys/devices/system/cpu/cpu0/cache/ |
| メモリ |
sysinfo crate |
| カーネル | uname -r |
| OS | /etc/os-release |
ライブラリとしても使える(riscfetch-core)
CLI ツールだけでなく、riscfetch-core というライブラリも公開しています。自作ツールに RISC-V 情報取得機能を組み込みたい場合に使えます。
十年後くらいに、超便利なライブラリとして発見されてるんじゃないかな? きっと……
使い方
[dependencies]
riscfetch-core = "1.0"
use riscfetch_core::*;
fn main() {
if is_riscv() {
// ISA文字列を取得
println!("ISA: {}", get_isa_string());
// 拡張をコンパクトに表示
println!("Extensions: {}", get_extensions_compact());
// Hart数
println!("Harts: {}", get_hart_count());
// ハードウェアID
let hw = get_hardware_ids();
println!("Vendor ID: {}", hw.mvendorid);
// すべての情報をまとめて取得(JSON シリアライズ可能)
let info = collect_all_info();
println!("Board: {}", info.board);
}
}
ユースケース
- CI/CD: RISC-V ビルドサーバーで環境情報をログに出力
- システム監視: RISC-V デバイスのダッシュボード
- ベンチマークツール: ISA 拡張に応じたテスト分岐
- 組み込みアプリ: 起動時の自己診断表示
SystemInfo 構造体は Serde に対応しているので、JSON へのシリアライズも簡単です。
インストール
cargo install(推奨)
cargo install riscfetch
GitHub Releases から
curl -LO https://github.com/kako-jun/riscfetch/releases/latest/download/riscfetch-linux-riscv64
chmod +x riscfetch-linux-riscv64
sudo mv riscfetch-linux-riscv64 /usr/local/bin/riscfetch
テスト協力のお願い
テスト用のハードウェアが限られています。(コレクターじゃないし……)
以下の環境でテストできる方は、ぜひ結果を教えてください:
- RV32E(16 レジスタ組み込み向け)- ESP32-C3, CH32V003 等
- Vector 非対応 CPU - VisionFive 2, Allwinner D1 等
- 異なる VLEN 値 - VLEN=128, 512, 1024 等
- 特殊な Z 拡張 - Zk(暗号), Zcmp, Zacas 等
仕様通りに実装してみたけど、これらの実行結果を作者自身が見たことないんです。
「動きました」という報告だけでも助かります。ここのコメントか Issue で /proc/cpuinfo と riscfetch の出力を共有してください。
なんだか、なんでも鑑定団の「日本に 10 体しかない古いフィギュアの情報募集!」みたいなノリになってしまいますね……
RISC-V を扱ってる企業の中の人とかいるはず……きっと!
おわりに
みんなの興味あるものばかりじゃなくて、自分の興味あるものを作るのって大事だなって思いました。
読んでくれてありがとうございます。
ここまでずっと、RISC-Vをリスクブイって読んできた人ー?
リスクファイブだ!
でも、アメリカ人もRVって書くし
リスクヴィー……って気だるそうに発音するからセーフ!
