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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
hayashi
February 08, 2020
Programming
0
1k
OpenSolaris を RISC-V で動かしたい
hayashi
February 08, 2020
Tweet
Share
Other Decks in Programming
See All in Programming
今こそ知るべき耐量子計算機暗号(PQC)入門 / PQC: What You Need to Know Now
mackey0225
3
380
生成AIを使ったコードレビューで定性的に品質カバー
chiilog
1
280
AIによる開発の民主化を支える コンテキスト管理のこれまでとこれから
mulyu
3
470
React Native × React Router v7 API通信の共通化で考えるべきこと
suguruooki
0
100
KIKI_MBSD Cybersecurity Challenges 2025
ikema
0
1.3k
AWS re:Invent 2025参加 直前 Seattle-Tacoma Airport(SEA)におけるハードウェア紛失インシデントLT
tetutetu214
2
120
ノイジーネイバー問題を解決する 公平なキューイング
occhi
0
110
CSC307 Lecture 10
javiergs
PRO
1
660
Best-Practices-for-Cortex-Analyst-and-AI-Agent
ryotaroikeda
1
110
Lambda のコードストレージ容量に気をつけましょう
tattwan718
0
140
そのAIレビュー、レビューしてますか? / Are you reviewing those AI reviews?
rkaga
6
4.6k
例外処理とどう使い分ける?Result型を使ったエラー設計 #burikaigi
kajitack
16
6.1k
Featured
See All Featured
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
470
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
0
190
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
110
Deep Space Network (abreviated)
tonyrice
0
64
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.4k
Building the Perfect Custom Keyboard
takai
2
690
The SEO Collaboration Effect
kristinabergwall1
0
350
Code Review Best Practice
trishagee
74
20k
Building an army of robots
kneath
306
46k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
110
Game over? The fight for quality and originality in the time of robots
wayneb77
1
120
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