Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
OpenSolaris を RISC-V で動かしたい
Search
hayashi
February 08, 2020
Programming
0
1k
OpenSolaris を RISC-V で動かしたい
hayashi
February 08, 2020
Tweet
Share
Other Decks in Programming
See All in Programming
Package Management Learnings from Homebrew
mikemcquaid
0
230
MUSUBIXとは
nahisaho
0
140
開発者から情シスまで - 多様なユーザー層に届けるAPI提供戦略 / Postman API Night Okinawa 2026 Winter
tasshi
0
210
CSC307 Lecture 09
javiergs
PRO
1
840
24時間止められないシステムを守る-医療ITにおけるランサムウェア対策の実際
koukimiura
1
120
AIによる開発の民主化を支える コンテキスト管理のこれまでとこれから
mulyu
3
470
要求定義・仕様記述・設計・検証の手引き - 理論から学ぶ明確で統一された成果物定義
orgachem
PRO
1
220
CSC307 Lecture 05
javiergs
PRO
0
500
AIによるイベントストーミング図からのコード生成 / AI-powered code generation from Event Storming diagrams
nrslib
2
1.9k
Rust 製のコードエディタ “Zed” を使ってみた
nearme_tech
PRO
0
210
React 19でつくる「気持ちいいUI」- 楽観的UIのすすめ
himorishige
11
7.5k
2026年 エンジニアリング自己学習法
yumechi
0
140
Featured
See All Featured
How to Think Like a Performance Engineer
csswizardry
28
2.5k
The #1 spot is gone: here's how to win anyway
tamaranovitovic
2
950
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.1k
Discover your Explorer Soul
emna__ayadi
2
1.1k
The Cost Of JavaScript in 2023
addyosmani
55
9.5k
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
2.3k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
270
Raft: Consensus for Rubyists
vanstee
141
7.3k
How to Ace a Technical Interview
jacobian
281
24k
Joys of Absence: A Defence of Solitary Play
codingconduct
1
290
Site-Speed That Sticks
csswizardry
13
1.1k
WENDY [Excerpt]
tessaabrams
9
36k
Transcript
OpenSolaris を RISC-V で動かしたい カーネル/VM探検隊@関西 10回目 林 直之
OpenSolaris について 2005年、SUN が Solaris をオープンソース化 2010年、Oracle が SUN を買収
2010年、illumos が発足。 OpenSolaris の クローズドバイナリをオープンな実装に するのが目的だった Oracle が OpenSolaris の開発を中止したので事実上 の後継 現在も(細々と?)開発中 pg 2
OpenSolaris を RISC-V で動かしたい Oracle による Solaris の移植は絶望的 Oracle は
RISC-V Foundation の Platinum Members だった (2016) 現在、https://riscv.org/ の Members から消えて いるっぽい 動かしたければ自分で移植するしかない pg 3
RISC-V の開発ボード HiFive Unleashed ➢ RV64GC 4コア (FPU と MMU
あり) ➢ 8 GB DDR4 ➢ GbE, uSD (ただし、SPI接続), jtag ➢ $1250 (Early Access), $999 pg 4
RISC-V の開発ボード HiFive Unleashed ➢ RV64GC 4コア (FPU と MMU
あり) ➢ 8 GB DDR4 ➢ GbE, uSD (ただし、SPI接続), jtag ➢ $1250 (Early Access), $999 Early Access 版を買った 日本で一番最初に申し込んだ(はず) 届いたのは最初じゃないけど pg 5
HiFive Unleashed のデバッグ環境 OpenOCD に対応している (JTAG デバッグ可) https://github.com/riscv/riscv-openocd.git PC の上位24bitが0になるエラッタがあるので、
OpenOCD を修正する GDB で set arch riscv:rv64 としておく 逆アセンブリの化けが解消 当然シリアルデバッグもできる pg 6
RISC-V アーキテクチャ (SBI) RISC-V の仕様を読んだ時の疑問 IPI の発生のさせ方がわからない Timer をセットできるのは M-mode
だけ。 カーネルが動く S-mode でどうやってセットするのか pg 7
RISC-V アーキテクチャ (SBI) RISC-V の仕様を読んだ時の疑問 IPI の発生のさせ方がわからない Timer をセットできるのは M-mode
だけ。 カーネルが動く S-mode でどうやってセットするのか これらは、SBI を使って実装するのが作法らしい pg 8
RISC-V アーキテクチャ (SBI) Supervisor Binary Interface CPU実装依存を抽象化して、移植性を高めるため のインターフェース 一つのOSのバイナリが色々なCPUで動作する Alpha
の PALcode みたいなもの pg 9
RISC-V アーキテクチャ (SBI) BBL と OpenSBI の実装がある BBL (Berkeley Boot
Loader) https://github.com/riscv/riscv-pk OpenSBI https://github.com/riscv/opensbi OpenSBI が後発のプロジェクトだが、最近 BBL から OpenSBI に切り替わることが多い Fedora Freedom Unleashed SDK pg 10
RISC-V アーキテクチャ (SBI) pg 11 ID name 0 sbi_set_timer 1
sbi_console_putchar 2 sbi_console_getchar 3 sbi_clear_ipi 4 sbi_send_ipi 5 sbi_remote_fence_i 指定された hart で fence.i 6 sbi_remote_sfence_vma 指定された hart で sfence.vma 7 sbi_remote_sfence_vma_asid 8 sbi_shutdown
RISC-V アーキテクチャ (MMU) ページテーブルは階層型 PTE に キャッシュ属性はない 物理アドレスで属性が決まる Alpha っぽい
それ以外は割と普通 pg 12
RISC-V アーキテクチャ (例外・割込み) 例外はこれといった特徴なし 割込みは、Software(IPI), Timer, 外部割込み の3つ 3つをそれぞれ有効・無効の設定ができる 割り込みコントローラの優先度は外部割込みのみ
Interrupt Priority Threshold Register で設定して いる値より低い優先度の割り込みが入ることがあるっぽい pg 13
RISC-V アーキテクチャ (命令セット) 命令セットはサブセットのみのハードウェア実装でも よい trap してソフトウェアエミュレーションする OpenSBI や BBL
でハンドリング 予期せぬボトルネックとなるので注意 たとえば、rdtime 命令が未実装 HiFive Unleashed だけでなく、QEMU でも… Solaris にはスピンロック競合時、タイムスタンプで delay を入れるコードがあって… pg 14
OpenSolaris の移植の仕方 基本的に以下の4つをやるだけで移植できる 1. クロスコンパイラを用意する 2. ブートローダを用意する 3. カーネルを移植する 4.
ユーザランド (大きな作業が必要なのは、libc とか rtld)を移植する pg 15
クロスコンパイラ gcc + binutils riscv64-*-solaris2.11 を追加 #pragma init, fini を有効化
SUNPro Compiler の pragma libgcc に __sync_lock_test_and_set_を追加 RISC-V に1byte と 2byte の atomic 命令がない pg 16
HiFive Unleashedのブートシーケンス FSBL → OpenSBI → u-boot → inetboot →
unix (solaris kernel) OpenSBIに u-boot が埋め込まれている FSBL, OepnSBI は M-mode で動作 S-mode に切り替えて u-boot にジャンプ 初期の公式 SDK は FSBL → u-boot (M- mode) → BBL → Linux だった。 pg 17
inetboot SPARC の ネットワークブート用のブートローダ ZFS 対応したが SPARC とは異なるやり方 NIC や
ストレージのデバドラを追加 OpenPROM がないので。 NFS or ZFS から boot_archive を読み出し、そ こからカーネルをロードする boot_archive は カーネルとカーネルモジュールを含む ISO9600 形式のファイル pg 18
kernel の移植 vm 階層型のページテーブルなので x86 のコードベースでよ い。 割込み・例外 割り込み優先度に気を付ける (IPI,
タイマ、外部) Solaris では割り込み優先度ごとにスレッドが動作 優先度ごとに、IPI, タイマ, 外部割込みを有効無効 割り込みコントローラの優先度は使えない 多重割込みを正しくハンドリングしなくてはならない pg 19
kernel の移植 その他 boot まわり lock コンテキスト切り替え デバイスドライバ UART GbE
uSD (SPI Mode) pg 20
ユーザランド libc と rtld(ld.so) 以外はアーキテクチャ依存部 がほぼない Makefile の数が多くて大変 autoconf すごい
--host=riscv64-solaris2.11 で大体ビルドが通る デバッグは難しい Doors が多用されていて、追跡困難 DTrace が使えない…未対応なので pg 21
さいごに https://bitbucket.org/hayashin/illumos- gate でしばらく公開しておきます。 たまにパニックします。 遅い スピンロック競合時に rdtime 命令を呼んでいる MMC
SPI Mode が遅い 他にもいろいろ pg 22