5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

世界初のRISC-V専用fetchツール「riscfetch」をリリースしました

Posted at

はじめに

RISC-V は……お好きですか?(スラムダンク第1話っぽく)

名前だけは聞いたことあるよー、って人!

……いない!?
ならなんで、この記事を開いた! お前たち100点だ。


RISC-V ボードをゲットした後、最初にやりたいこと。それは neofetch/fastfetch でシステム情報を表示して、スクショを撮ることではないでしょうか。

でも、RISC-V ボードでそれらを実行しても、RISC-V 固有情報が表示されるわけではありません。

ISA 拡張文字列の詳細、Hart 数、ハードウェア ID、ベクトル拡張の状態……。これらの情報は見られないか、表示されても生の文字列のままです。

そこで作ったのが riscfetch です。

riscfetch とは

riscfetchは、RISC-V 専用のシステム情報表示ツールです。RISC-V アーキテクチャに特化した情報を、neofetch 風のスタイルで表示します。

riscfetch screenshot

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って書くし
リスクヴィー……って気だるそうに発音するからセーフ!

5
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?