Open8
ハイパーバイザーのOSの切り替わり部分を解説する
参考資料
- Armv8-R virtualization
- Best Practices for Armv8-R Cortex-R52+ Software Consolidation
- Device Virtualization Principles for Real-time Systems
- 解説のネタ(サンプルソース)
題材
- 以下の中の「Guest OS switcher with virtual interrupts example」
- ディレクトリ構成は以下
-
Armv8-R Virtualization Example 3 - Guest OS Switcher with Virtual Interrupts
がhypervisorの本体-
guest_os1.s
、guest_os2.s
がGuest OS1/2をリンカに配置させるためのファイル -
hyp_start.s
がhypervisorの初期化と割り込みハンドラ、Guest OSの切り替え処理を内包したファイル -
main.c
がmain文を内包したファイル -
scatter.scat
がいわゆるリンカスクリプト
-
-
Armv8-R Virtualization Ex3 Guest OS 1
、Armv8-R Virtualization Ex3 Guest OS 2
がhypervisor上で動作するGuest OS相当-
guest_os1_start.s
、guest_os2_start.s
がGuest OS 1、Guest OS 2の初期化処理を内包したファイル(EL1で動作) -
main.c
がGuest OS 1、Guest OS 2のmain文を内包したファイル -
scatter.scat
がいわゆるリンカスクリプト -
Guest_OS1.bin
、Guest_OS2.bin
がGuest OS 1、Guest OS 2のイメージ
-
-
.
└── Armv8-R Virtualization Examples/
├── Armv8-R Virtualization Example 3 - Guest OS Switcher with Virtual Interrupts/
│ ├── guest_os1.s
│ ├── guest_os2.s
│ ├── hyp_start.s
│ ├── main.c
│ └── scatter.scat
├── Armv8-R Virtualization Ex3 Guest OS 1/
│ ├── guest_os1_start.s
│ ├── Guest_OS1.bin
│ ├── main.c
│ └── scatter.scat
└── Armv8-R Virtualization Ex3 Guest OS 2/
├── guest_os1_start.s
├── Guest_OS1.bin
├── main.c
└── scatter.scat
構成
- はじめに
- 前提となる事項
- 環境
- Cortex-R52の仮想化支援機構
- 題材とするコード
- 全体概要
- boot時
- Runtime
説明が必要な概念
- Exception levels
全体概要
- 概要図
- 登場人物と各々が行っていること
- Guest OS 1、Guest OS 2
- ハイパーバイザー
環境
- Cortex-R52
前提となる事項
- ハイパーバイザーの概要
hyp_start.s
- Reset
- コア0以外をすべてスリープ状態にセット
- HVBARにベクターテーブルをセット
- ハイパーバイザーのスタックポインタ、CNTFRQ、浮動小数点周り、GICの設定、