概要
riscfetch v2.3.1 リリース時の宣伝記事用の素材集と、各プラットフォーム向けの下書きフック。
公開作業を別 PC からも続けられるように Issue 内に全部書き出す。
ネタの軸
- 「自作ツールが新しいハードを見逃していた話」: 自分で持ってる Orange Pi RV2 で riscfetch を実行したら汎用 RISC-V ロゴへフォールバック。Ky 派生 distro が device-tree に SoC vendor 名
spacemit を出さない(ky,x1 ky,orangepi-rv2 のみ吐く)のが原因。auto-detection 系ツールあるあるの落とし穴。
- 「RISC-V SBC 2機(D1 vs K1)対比」: MangoPi MQ-Pro (Allwinner D1) と Orange Pi RV2 (SpacemiT K1) を riscfetch で並べると、RISC-V 拡張・コア数・メモリの世代差が一目瞭然。教材級ミニマル D1 vs Vector + 暗号 + bit manipulation 載せた現代的 K1。
- 「副産物: rv2 は SD レス起動できる」: U-Boot が SoC SPI flash (mtd0-5) に焼き込まれてる構成。物理的に SD を抜いて電源 ON で起動成功を実証。kernel update のたびに SD
/boot 同期する必要もなし。
検証環境
| デバイス |
SoC |
ボード |
OS |
Kernel |
Memory |
| pi-mango |
Allwinner D1 |
MangoPi MQ-Pro |
Ubuntu 22.04 |
5.19.0-rc1-d1 |
0.96 GB |
| pi-rv2 |
SpacemiT K1 |
Orange Pi RV2 |
Ubuntu 24.04 |
6.6.63-ky |
3.72 GB |
比較ハイライト
|
mango (Allwinner D1) |
rv2 (SpacemiT K1) |
| Harts |
1 |
8 |
| Ext |
I M A F D C |
I M A F D C V + 多数の Z*/S* 拡張 |
| Vector |
× |
有効 |
| Cache |
L1D/I 32K |
L1D/I 32K + L2 512K |
| Memory |
0.96 GB |
3.72 GB |
| Kernel |
5.19.0-rc1-d1 |
6.6.63-ky |
| ビルド時間 (release, clean) |
約 20-25 分 |
3:25 |
| 修正前ロゴ |
Allwinner |
(汎用 RISC-V) |
| 修正後ロゴ |
Allwinner |
SpacemiT |
実出力 — mango (Allwinner D1)
$ ssh pi-mango "riscfetch"
_ _ _ _
/ \ | | | | __ __ (_) _ __ _ __ ___ _ __
/ _ \ | | | | \ \ /\ / / | | | '_ \ | '_ \ / _ \ | '__|
/ ___ \ | | | | \ V V / | | | | | | | | | | | __/ | |
/_/ \_\ |_| |_| \_/\_/ |_| |_| |_| |_| |_| \___| |_|
RISC-V by Allwinner
ISA: rv64imafdc
Ext: I M A F D C
Harts: 1 hart
Cache: L1D:32K L1I:32K
--------------------------------
Board: Allwinner D1 Nezha
OS: Ubuntu 22.04.5 LTS
Kernel: 5.19.0-rc1-d1
Memory: 0.12 GiB / 0.96 GiB
Uptime: 12h 11m
User: pi@pi-mango
実出力 — rv2 修正前 (v2.3.0)
$ ssh pi-rv2 "riscfetch"
██████╗ ██╗███████╗ ██████╗ ██╗ ██╗
██╔══██╗██║██╔════╝██╔════╝ ██║ ██║
██████╔╝██║███████╗██║ █████╗██║ ██║
██╔══██╗██║╚════██║██║ ╚════╝╚██╗ ██╔╝
██║ ██║██║███████║╚██████╗ ╚████╔╝
╚═╝ ╚═╝╚═╝╚══════╝ ╚═════╝ ╚═══╝
Architecture Info
ISA: rv64imafdcv_zicbom_zicboz_zicntr_zicond_zicsr_zifencei_zihintpause_zihpm_zfh_zfhmin_zca_zcd_zba_zbb_zbc_zbs_zkt_zve32f_zve32x_zve64d_zve64f_zve64x_zvfh_zvfhmin_zvkt_sscofpmf_sstc_svinval_svnapot_svpbmt
Ext: I M A F D C V
Z-Base: Zicsr Zifencei Zicntr Zihpm
Z-Bit Manipulation: Zba Zbb Zbc Zbs
Z-Cache: Zicbom Zicboz
Z-Compressed: Zca Zcd
Z-Conditional: Zicond
Z-Cryptography: Zkt
Z-Floating Point: Zfh Zfhmin
Z-Hints: Zihintpause
Z-Vector Crypto: Zvkt
Z-Vector: Zve32f Zve32x Zve64d Zve64f Zve64x Zvfh Zvfhmin
S-Supervisor: Sscofpmf Sstc
S-Virtual Memory: Svinval Svnapot Svpbmt
Vector: Enabled
Harts: 8 harts
HW IDs: vendor:0x710 arch:0x8000000058000001 impl:0x1000000049772200
Cache: L1D:32K L1I:32K L2:512K
--------------------------------
Board: ky x1 orangepi-rv2 board
OS: Ubuntu 24.04.4 LTS
Kernel: 6.6.63-ky
Memory: 0.58 GiB / 3.72 GiB
Uptime: 2m
User: pi@pi-rv2
汎用「RISC-V」ロゴ + "Architecture Info" サブタイトル。Ky 派生カーネルが ky,x1 / ky,orangepi-rv2 を吐き、spacemit,* 文字列を含まないため VENDOR_KEYWORDS の "spacemit" でヒットせず検出失敗していた。
実出力 — rv2 修正後 (v2.3.1)
$ ssh pi-rv2 "riscfetch"
____ _ _____
/ ___| _ __ __ _ ___ ___ _ __ ___ (_) |_ _|
\___ \ | '_ \ / _` | / __| / _ \ | '_ ` _ \ | | | |
___) | | |_) | | (_| | | (__ | __/ | | | | | | | | | |
|____/ | .__/ \__,_| \___| \___| |_| |_| |_| |_| |_|
|_|
RISC-V by SpacemiT
ISA: rv64imafdcv_zicbom_zicboz_zicntr_zicond_zicsr_zifencei_zihintpause_zihpm_zfh_zfhmin_zca_zcd_zba_zbb_zbc_zbs_zkt_zve32f_zve32x_zve64d_zve64f_zve64x_zvfh_zvfhmin_zvkt_sscofpmf_sstc_svinval_svnapot_svpbmt
Ext: I M A F D C V
... (以下同じ)
Board: ky x1 orangepi-rv2 board
"SpacemiT" ロゴ + "RISC-V by SpacemiT" サブタイトル。VENDOR_KEYWORDS に ("ky,x1", "spacemit") を1行追加して検出成功。
修正のミソ(記事に書ける部分)
// crates/riscfetch-cli/src/vendors.rs
const VENDOR_KEYWORDS: &[(&str, &str)] = &[
// ... existing entries ...
("ch32v", "wch"),
("ky,x1", "spacemit"), // ← 追加した1行
// Vendor names (generic, checked after specific keywords)
// ...
];
採用しなかった案:
"ky," 単独マッチ — 将来 Ky が別 SoC を採用したら silent miscategorization になる
"orangepi-rv2" — board 文字列にしか出ない冗長キーワード
- "Ky" を独立ベンダーとして登録 — distro 単位で増殖し始める。既存方針(チップベンダー単位)と矛盾
プラットフォーム別下書きフック
Reddit r/RISCV
タイトル候補:
- "riscfetch v2.3.1 — fixed Orange Pi RV2 detection (Ky-derived DTBs hide the SpacemiT vendor)"
- "TIL: Orange Pi RV2's kernel doesn't put 'spacemit' in /proc/device-tree/compatible"
切り出し: rv2 を買って自作ツール riscfetch を試したら汎用ロゴが出た → 原因は Ky DTB → 修正 → before/after 画像。RISC-V SBC 比較表も入れる。
Zenn
タイトル候補: 「自作 riscfetch が Orange Pi RV2 を見逃していた話 — Ky 派生 DTB の罠」
ターゲット: 日本の RISC-V 触ってる層。before/after を画像で並べると映える。
セクション案:
- riscfetch とは(neofetch の RISC-V 版)
- Orange Pi RV2 を買ったが riscfetch がベンダー検出できない
/proc/device-tree/compatible を読みに行く
- なぜ
ky,* なのか — Orange Pi の distro 派生 DTB 事情
- 修正方針(広いマッチを避ける理由)
- 副産物: rv2 は SD レス起動できる
- v2.3.1 リリース
Dev.to (Part 2 or 3)
- 既存 Part 1 (v2.2.0) の続編として「自作ツールが現実のハードに当たって学んだこと」
- 英語ベース、コードスニペットメイン、対比表入り
X (Twitter)
- 短文 + 画像 (before/after の screenshots を撮る)
- 「riscfetch v2.3.1 出した。Orange Pi RV2 がベンダー検出できない問題を修正。Ky distro のせいで
spacemit 文字列が出ないんだよね」
- リンク: GitHub Release + crates.io
関連リンク
チェックリスト
概要
riscfetch v2.3.1 リリース時の宣伝記事用の素材集と、各プラットフォーム向けの下書きフック。
公開作業を別 PC からも続けられるように Issue 内に全部書き出す。
ネタの軸
spacemitを出さない(ky,x1ky,orangepi-rv2のみ吐く)のが原因。auto-detection 系ツールあるあるの落とし穴。/boot同期する必要もなし。検証環境
比較ハイライト
実出力 — mango (Allwinner D1)
実出力 — rv2 修正前 (v2.3.0)
汎用「RISC-V」ロゴ + "Architecture Info" サブタイトル。Ky 派生カーネルが
ky,x1/ky,orangepi-rv2を吐き、spacemit,*文字列を含まないためVENDOR_KEYWORDSの"spacemit"でヒットせず検出失敗していた。実出力 — rv2 修正後 (v2.3.1)
"SpacemiT" ロゴ + "RISC-V by SpacemiT" サブタイトル。
VENDOR_KEYWORDSに("ky,x1", "spacemit")を1行追加して検出成功。修正のミソ(記事に書ける部分)
採用しなかった案:
"ky,"単独マッチ — 将来 Ky が別 SoC を採用したら silent miscategorization になる"orangepi-rv2"— board 文字列にしか出ない冗長キーワードプラットフォーム別下書きフック
Reddit r/RISCV
タイトル候補:
切り出し: rv2 を買って自作ツール riscfetch を試したら汎用ロゴが出た → 原因は Ky DTB → 修正 → before/after 画像。RISC-V SBC 比較表も入れる。
Zenn
タイトル候補: 「自作 riscfetch が Orange Pi RV2 を見逃していた話 — Ky 派生 DTB の罠」
ターゲット: 日本の RISC-V 触ってる層。before/after を画像で並べると映える。
セクション案:
/proc/device-tree/compatibleを読みに行くky,*なのか — Orange Pi の distro 派生 DTB 事情Dev.to (Part 2 or 3)
X (Twitter)
spacemit文字列が出ないんだよね」関連リンク
チェックリスト