Halycon はRISC-V 64上で動作するハイパーバイザです。
セキュリティ・キャンプ2024で作成したAArch64向けのハイパーバイザをRISC-Vに移植しています。
現在はゲストとしてu-bootが動作します。
- QEMU(>= 9.0.2)
cd tools
./boot.sh
cd u-boot
# ビルドに失敗する場合は、riscv64-linux-gnu-gcc, make, gcc, bc, bison, flex, libssl-dev, python3, pkg-config, device-tree-compiler などのビルド用パッケージがインストールされているか確認してください
./build.sh
u-boot/u-boot.binを、Halycon/bin/配下にコピーする
rustup target add riscv64gc-unknown-none-elf
# run hypervisor
cargo xtask build -f nested && cargo xtask run
- 2段階ページング
- ゲストへの移行
- ゲスト用u-bootのロード
- virtioからのファイル読み出し
- ファイルのメモリ上への展開
- ゲスト用u-bootへ渡すデバイスツリーの用意
- 仮想マシンを起動するために必要な情報をまとめた構造体の用意
- RISC-V AIA (Advanced Interrupt Architecture)への対応
- 割り込みコントローラ(aplic)のデバイスドライバの実装
- IMSICのドライバの実装
- デバイス仮想化
- シリアルデバイスの仮想化
- SBIコールの仮想化
- タイマデバイスの仮想化
- ブロックデバイスの仮想化
- virtio-blkデバイスの実装(パススルー)
- 割り込みコントローラの仮想化
- Linuxの起動
- メモリアロケータの実装
- デバイスツリーの解析によるデバイスの把握
- virtio queueを使いまわさずにRing構造を利用する
- virtio-blkの読み書き完了を割り込みによって把握する
- デバイスツリーの解析によるデバイスの把握
- ネットワークの仮想化
- 複数ゲストの起動
- ファイルシステムの実装
- UARTの完全仮想化