Downloadliste

Projektbeschreibung

TinyVisor is a hypervisor(VMM) which assigns cpus, memory and I/O in personal computer(PC) to VMs, and allows OSs controlling them. OSs work without host OS.

The first milestone is that two OSs work in one PC. The second milestone is that OSs reboot individually. The milestones have been achived in Jan. 2014, and 1.0 is released.

Linux, Windows, and FreeBSD work.

VMM is based on BitVIsor(BSD license). AML interpriter and some functions of standard library are ported from NetBSD and FreeBSD.

Guest BIOS is based on SeaBIOS(BSD license).

Systemanforderungen

Die Systemvoraussetzungen sind nicht definiert

Veröffentlicht: 2014-01-11 23:13
tinyvisor 1.0 (1 files Verstecken)

Versionsanmerkungen

TinyVisor 1.0 (r153)


新機能

VM1の動作中に、VM0を再起動可能にしました。

VM0, VM1でFedora 20を起動・再起動可能にしました。


その他の変更

VMM実行中は割り込みを無効化しておき、割り込み関連の要因でVMexitが発生したときのみ、割り込みを一つ受け取りInjectするようにしました(ベースとしたBitVisorの設計に戻しました)。

バグ修正をしました。「修正した問題」を参照してください。


動作確認内容

以下のことを確認済です。


1. USB メモリに TinyVisor をインストール可能なこと。

2. Linux のファイルシステムに TinyVisor をインストール可能なこと。

3. vm0 のみで OS を起動可能なこと。

14. qemu 上で TinyVisor を起動可能なこと。

15. IvyBridge マシンにおいて、次の組み合わせで OS を起動可能なこと。
   vm0: Debian GNU/Linux 7.0 (amd64版)
   vm1: FreeBSD 9.2-RELEASE (amd64版)
        この時、vm1のOSから以下のI/Oデバイスを使用可能なこと。
        SATA: ASMedia ASM1062 
        NIC: Realtek RTL8111E
        USB: Intel 7 Series/C210 Series ChipsetのxHCI

18. IvyBridge マシンにおいて次の組み合わせで OS を起動可能なこと。
   vm0: Fedora 20 (x86_64版)
   vm1: Debian GNU/Linux 7.0 (amd64版)
        この時、vm1のOSから以下のI/Oデバイスを使用可能なこと。
        SATA: ASMedia ASM1062 
        NIC: Realtek RTL8111E
        USB: Intel 7 Series/C210 Series ChipsetのxHCI
        VGA: GeForce 8400 GS

19. IvyBridge マシンにおいて次の組み合わせで OS を起動可能なこと。
   vm0: FreeBSD 9.2-RELEASE (amd64版)
   vm1: Fedora 20 (x86_64版)
        この時、vm1のOSから以下のI/Oデバイスを使用可能なこと。
        SATA: ASMedia ASM1062 
        NIC: Realtek RTL8111E
        USB: Intel 7 Series/C210 Series ChipsetのxHCI
        VGA: GeForce 8400 GS

12. IvyBridge マシンにおいて vm1 で動作している Debian GNU/Linux 7.0
    (amd64版) を再起動可能なこと。

20. IvyBridge マシンにおいて vm1 で動作している Fedora 20 (x86_64版)
    を再起動可能なこと。

21. IvyBridge マシンにおいて vm0 で動作している Debian GNU/Linux 7.0
    (amd64版) を再起動可能なこと。

22. IvyBridge マシンにおいて vm0 で動作している FreeBSD 9.2-RELEASE
    (amd64版) を再起動可能なこと。

23. IvyBridge マシンにおいて vm0 で動作している Fedora 20 (x86_64版)
    を再起動可能なこと。

24. Debian GNU/Linux 7.0 (amd64版)でビルド可能なこと。

25. Fedora 20 (x86_64版)でビルド可能なこと。


修正した問題


#32827 Fedora 20でビルドするとBIOSのコンパイルがエラーになる

#32812 VM0/VM1でFedora 20を起動すると、CPU1以降を認識できない

#31925 Qemu上でTinyvisorを起動したところ、Linuxが起動しない

#32764 FreeBSDをVM0で起動すると、ログインプロンプトが画面に表示されない

#32722 VM0でFreeBSDを起動すると、ACPI tableのcheck sumエラーがでる


既知の問題


#32902 VM1でFedora 20を再起動すると、xHCIに接続されているデバイスが認識できない

#32901 VM1でFedora 20を再起動すると、ログイン画面が表示されない

#32660 VM0で起動したFreeBSDを再起動すると、NICで通信ができない

#32404 VM1にCPUを1個しか割り当てずにVM1でFreeBSDを起動しようとすると、NICがリンクアップしない

#31392 vm1のFreeBSDを再起動すると、AHCIの初期化に失敗する

Änderungsprotokoll

------------------------------------------------------------------------
r127 | yuichi_xy | 2013-11-23 22:27:51 +0900 (土, 23 11月 2013) | 1 line

BIOS: AHCI HBA reset を実行
------------------------------------------------------------------------
r128 | yuichi_xy | 2013-11-24 17:28:05 +0900 (日, 24 11月 2013) | 1 line

VM0のOSによるACPI RESET_REGへの書き込みフックし、VM0の仮想CPUをリセットし、guestbootコードを再度メモリにロードし、VM0のBSPにguestbootを実行させるようにした。 #31349 参照
------------------------------------------------------------------------
r129 | yuichi_xy | 2013-11-24 22:02:25 +0900 (日, 24 11月 2013) | 1 line

guestboot コードの不要なコードを削除
------------------------------------------------------------------------
r130 | yuichi_xy | 2013-11-24 23:28:21 +0900 (日, 24 11月 2013) | 1 line

VM0の起動時、ビデオモードの設定と、INT 13/AH=0Dhによる HDD DISKS のリセットを行うようにした。 #31349 参照
------------------------------------------------------------------------
r131 | yuichi_xy | 2013-12-08 23:18:37 +0900 (日, 08 12月 2013) | 1 line

r128 で、 VM1 の OS がキーボードコントローラにアクセス可能になってしまい Free BSD が起動しなくなったため、アクセス不可能に戻した。
------------------------------------------------------------------------
r132 | yuichi_xy | 2013-12-09 21:51:54 +0900 (月, 09 12月 2013) | 6 lines

OSの再起動に伴うVMリセットを強化
  * VM0のリセット時にPICを初期化
  * VM0のリセット時にIOAPICのRDTを全てマスク
  * VM0/VM1のリセット時にAPICのLVTを全てマスク
  * VM0/VM1のリセット時にvBSPのAPICを有効のままにする
#31349 参照
------------------------------------------------------------------------
r133 | yuichi_xy | 2013-12-15 17:33:24 +0900 (日, 15 12月 2013) | 3 lines

VMM起動時、BSP以外の論理プロセッサのLocal APICも有効にした。
VMのリセット時、vBSP以外の論理プロセッサのLocal APICも有効にした。
VMのリセット時、Local APICのLVTをマスクするため、Local APICを一時的に無効化してすぐに有効化するようにした。
------------------------------------------------------------------------
r134 | yuichi_xy | 2013-12-15 23:03:01 +0900 (日, 15 12月 2013) | 1 line

VM のリセット時、PIC や I/O APIC 、Local APIC をマスクした後、最大256個の割り込みを受信して EOI を発行するようにした。
------------------------------------------------------------------------
r135 | yuichi_xy | 2013-12-15 23:32:09 +0900 (日, 15 12月 2013) | 1 line

r134 で rflags レジスタの IF ビットの位置を間違えていたため修正。
------------------------------------------------------------------------
r136 | yuichi_xy | 2013-12-16 22:08:32 +0900 (月, 16 12月 2013) | 1 line

VMM実行時は割り込みを無効化しておき、割り込みをinject可能なときに割り込みを一個だけ受け取る。 #31349 参照
------------------------------------------------------------------------
r137 | yuichi_xy | 2013-12-16 23:45:11 +0900 (月, 16 12月 2013) | 1 line

VM0 かどうかの判定に cpu_is_bsp を使っていた部分を vm_get_id に変更。
------------------------------------------------------------------------
r138 | yuichi_xy | 2013-12-21 00:03:48 +0900 (土, 21 12月 2013) | 1 line

VM の再起動時、デバイスのリセットを行った後に、割り込みの受信とEOIの発行をするようにした。 #31349 参照
------------------------------------------------------------------------
r139 | yuichi_xy | 2013-12-21 17:17:52 +0900 (土, 21 12月 2013) | 1 line

r136 で行ったVMM 実行時は割り込みを無効化する改造を、 SVM にも対応させた。 #31349, #31925 参照
------------------------------------------------------------------------
r140 | yuichi_xy | 2013-12-23 15:04:52 +0900 (月, 23 12月 2013) | 1 line

VM0の再起動時、PIT,RTCを初期化し、IO APICのGSI 1をExtINTに設定し、PICのISA IRQ0をアンマスクするようにした。 #31349 参照
------------------------------------------------------------------------
r141 | yuichi_xy | 2013-12-23 20:17:16 +0900 (月, 23 12月 2013) | 1 line

BIOS: r127 で追加した AHCI HBA reset を無効化した。 #32658 参照
------------------------------------------------------------------------
r142 | yuichi_xy | 2013-12-24 22:05:05 +0900 (火, 24 12月 2013) | 1 line

vm0.boot_int18を指定した場合、VM0の再起動時に80hのHDDのMBRをロードするようにした。 #31349 参照
------------------------------------------------------------------------
r143 | yuichi_xy | 2013-12-28 19:20:29 +0900 (土, 28 12月 2013) | 1 line

VM0 の再起動時も、Secondary Bus Resetを発行する
------------------------------------------------------------------------
r144 | yuichi_xy | 2013-12-31 22:18:54 +0900 (火, 31 12月 2013) | 1 line

ACPI tableを書き換えるときにchecksumを更新していなかったので更新するようにした。 #32722 参照
------------------------------------------------------------------------
r145 | yuichi_xy | 2014-01-01 23:17:52 +0900 (水, 01  1月 2014) | 1 line

シリアルコントローラエミュレータが、TBR empty 割り込みが無効化されているにも関わらず、割り込みをinjectしていた不具合を修正。
------------------------------------------------------------------------
r146 | yuichi_xy | 2014-01-02 12:56:42 +0900 (木, 02  1月 2014) | 1 line

VM0 においても、シリアルコントローラエミュレータが割り込みを Inject 可能にした。 #32764 参照
------------------------------------------------------------------------
r147 | yuichi_xy | 2014-01-02 13:04:41 +0900 (木, 02  1月 2014) | 1 line

I/O APIC のテーブルが論理ディスティネーションモードに設定されている場合、エミュレータ契機の割り込みを Inject しないようにした。
------------------------------------------------------------------------
r148 | yuichi_xy | 2014-01-03 12:05:41 +0900 (金, 03  1月 2014) | 1 line

SVM 環境において、VMexit 時に exitintinfo を intr_info へコピーするようにした。 #31925 参照
------------------------------------------------------------------------
r149 | yuichi_xy | 2014-01-03 18:12:31 +0900 (金, 03  1月 2014) | 1 line

FACP flag を見て、ACPI RESET_REG への対応有無を確認するようにした。
------------------------------------------------------------------------
r150 | yuichi_xy | 2014-01-04 23:46:44 +0900 (土, 04  1月 2014) | 1 line

BIOS: TinyVisor 用の設定ファイル bios/tinyvisor_config を登録。bios/.config が存在しない場合、bios/tinyviso_config を bios/.config へコピーするようにした。 LC_ALL=C make SeaBIOS をビルドするようにした。 #32827 参照。
------------------------------------------------------------------------
r151 | yuichi_xy | 2014-01-06 23:14:16 +0900 (月, 06  1月 2014) | 1 line

Non-paged protect modeの場合、supoervisor-mode execution preventionを無効化した。また、DSH を使用した自分宛のプロセッサ間割り込みを送信可能にした。 #32812 参照
------------------------------------------------------------------------
r152 | yuichi_xy | 2014-01-07 23:26:57 +0900 (火, 07  1月 2014) | 1 line

ゲストソフトウェアによるCR0 の PG ビットの変更時に、CR4 の値を更新するようにした。
------------------------------------------------------------------------
r153 | yuichi_xy | 2014-01-11 21:40:23 +0900 (土, 11  1月 2014) | 1 line

例外処理関連のデバッグメッセージを無効化
------------------------------------------------------------------------