Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
OpenSolaris を RISC-V で動かしたい
Search
hayashi
February 08, 2020
Programming
1.1k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
OpenSolaris を RISC-V で動かしたい
hayashi
February 08, 2020
Other Decks in Programming
See All in Programming
機械に任せるテスト、人が見るテスト ⽣成AIで引き直した、運⽤保守フェーズの線引き
dske104
0
190
全ての永続トークンを、生まれる前に消し去りたい!
sylph01
2
880
コードで差別化できない時代の ソフトウェアエンジニアリング / Software Engineering in an Era Where Code Doesn’t Differentiate
kishida
2
180
phperだってパンチカードでコーディングしたい
o0h
PRO
0
330
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
180
気持ちぃ〜角丸 Squircle
ryu1013
0
310
ActionController meets Protocol Buffers
sorah
0
520
【加筆修正版】Laravel のアプリケーションをどこにデプロイするか #phpcon_ehime
akase244
0
150
[2026-09-26]空論ジェネリックプロセス~テスト資産とAIで紡ぐ、再現可能なパフォーマンスチューニングの話~
tosite
0
270
月間100万人のサービス刷新で、 技術選定をHonoに振り切った話
yutobara
8
6.6k
Vue Fes Japan の “作る側”に関わってみて
naokihaba
0
160
UnityでSystem.Net.WebSocketsなWebSocketサーバが動かないのでUnity Monoのコードを覗いてみた / about implementing websocket server with unity mono
drumath2237
1
610
Featured
See All Featured
sira's awesome portfolio website redesign presentation
elsirapls
0
450
Intergalactic Javascript Robots from Outer Space
tanoku
273
28k
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2.2k
Darren the Foodie - Storyboard
khoart
PRO
4
4k
Art, The Web, and Tiny UX
lynnandtonic
304
22k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
RailsConf 2023
tenderlove
30
1.6k
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
630
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
2
410
Designing Powerful Visuals for Engaging Learning
tmiket
1
610
Building AI with AI
inesmontani
PRO
1
1.3k
We Have a Design System, Now What?
morganepeng
55
8.4k
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