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
970
OpenSolaris を RISC-V で動かしたい
hayashi
February 08, 2020
Tweet
Share
Other Decks in Programming
See All in Programming
レベル1の開発生産性向上に取り組む − 日々の作業の効率化・自動化を通じた改善活動
kesoji
0
270
AI時代の『改訂新版 良いコード/悪いコードで学ぶ設計入門』 / ai-good-code-bad-code
minodriven
23
9.1k
Claude Code + Container Use と Cursor で作る ローカル並列開発環境のススメ / ccc local dev
kaelaela
12
6.8k
Startups on Rails in Past, Present and Future–Irina Nazarova, RailsConf 2025
irinanazarova
0
210
iOS 26にアップデートすると実機でのHot Reloadができない?
umigishiaoi
0
140
ペアプロ × 生成AI 現場での実践と課題について / generative-ai-in-pair-programming
codmoninc
2
20k
Google Agent Development Kit でLINE Botを作ってみた
ymd65536
2
260
たった 1 枚の PHP ファイルで実装する MCP サーバ / MCP Server with Vanilla PHP
okashoi
1
290
ふつうの技術スタックでアート作品を作ってみる
akira888
1
1.1k
PicoRuby on Rails
makicamel
2
140
はじめてのWeb API体験 ー 飲食店検索アプリを作ろうー
akinko_0915
0
140
Rubyでやりたい駆動開発 / Ruby driven development
chobishiba
1
750
Featured
See All Featured
Making Projects Easy
brettharned
116
6.3k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
44
2.4k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.8k
What’s in a name? Adding method to the madness
productmarketing
PRO
23
3.5k
Git: the NoSQL Database
bkeepers
PRO
430
65k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
29
9.6k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
20
1.3k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
3.9k
Thoughts on Productivity
jonyablonski
69
4.7k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
53
2.9k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
281
13k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
229
22k
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