[BitVisor-devel:111] Re: iMac上でBitVisorを動作させることについて
Hideki EIRAKU
hdk @ igel.co.jp
2017年 10月 26日 (木) 17:03:33 JST
イーゲル 榮樂です。
From: 高直我 <naoga.taka @ gmail.com>
Subject: [BitVisor-devel:110] iMac上でBitVisorを動作させることについて
Date: Tue, 17 Oct 2017 21:27:12 +0900
> 1つはMacOS(Sierra 10.12.6) 上でBitVisorを動作させたいと考えております。BitVisor Advent Calendar
> 2015の4日目に掲載されているMacでBitVisor
>
> (https://qiita.com/hdk_2/items/6c73aac9df758dc896c1)というページを参考にして、EFIShellから
> USBブートによってBitVisorを起動し、MacOSを起動することはできました。ですが起動後BitVisor、ゲストOS
> 共にネットワークに繋がりません。上記した参照ページに記載されている、ネットワークドライバのアンロードは行っています。
# BitVisor は OS の下で動くものです (^^)
https://bitbucket.org/bitvisor/bitvisor にある開発版をご利用であれば、
アンロードに関しては、BitVisor が自動的に行うよう改良されています。(リ
ビジョン bc2682729058, 2017-03-03)
もし、macOS の起動開始前に BitVisor との通信ができないようでしたら、何
か変です。Broadcom Gigabit Ethernet Driver のアンロードを手動でされた
ようですので、参照されているページにある起動方法による問題ではないと思
いますが、今のところ、MacBook Air 等での Thunderbolt Ethernet アダプター
を含め、Mac の Startup Manager 経由での起動で、BitVisor 起動後・OS 起
動前に通信不可能という問題は見つかっていません。
> NICはBroadcom社のものを使っているため、config.vmm.driver.pci="class_code=020000,
> id=14e4:1686, number=0, driver=bnx, net=ippass, virtio=1"と指定しています。またbitvisor
> のipを192.168.1.235と静的に与えており、BitVisorのIPが正常に割り当てられていることをdbgshから確認しました。また、MacOS
> 上でethernetカードがvirtioデバイスとして認識されていることも確認しています。ゲストOSに組み込んだvirtio-netモジュールは
> GitHub上で公開されていたvirtio-net-osx(https://github.com/pmj/virtio-net-osx)を用いています。
こちらで公開されているデバイスドライバーには署名がなされていないようで
すので、署名したものを用意するか、System Integrity Protecton を無効化
しないと使用できないかと思いますが、システム情報の Ethernet カードの項
目で、デバイスが認識されているのであれば、大きな問題はないかと思います。
ただし、Thunderbolt で使えないとか、インターフェイスの down/up 後に使
えないとか、いくつかの細かい問題はあるようです。
まずは、OS 起動開始前時点で通信ができないと、virtio-net を使用しても通
信はできません。そこを直したうえで、macOS 起動後に BitVisor との通信が
できなくなる場合や、BitVisor との通信はできるものの macOS 上での通信が
できない場合というのも考えられます。iMac の内蔵の Ethernet デバイスに
ついては影響のないものがほとんどですが、開発版では修正済みです。macOS
の前に、Linux を試してみるほうが簡単かも知れません。
> 2つ目として、私は研究でBitVisor1上のahciドライバにストレージIOの監視システムを組み込む、ということを行っています。そしてそのシステムを
> MacOS(バージョンは前述のとおりです)で動作させたいと考えております。そこでdefconfigにahciを捕捉するように記述をして、EFIShell
> からUSBブートの形でBitVisorを起動したあとにゲストOSを起動(/System/Libray/CoreServices/boot.efiを実行)
> しようとすると、/System以下のディレクトリへアクセスできなくなってしまいます。ahciをパススルーさせると/System以下のディレクトリへcd
> でき、boot.efiを実行することでOSの起動ができます。MacOSの環境下ではahciを捕捉できないのでしょうか。
EFI 上でのディスクアクセスは一応動いたのではないかと思うのですが、少し
特殊な動きをします。UEFI の Ahci ドライバーの実装を見ていただくとわか
るかと思いますが、コマンド完了時にデバイスからホストに返されるデータを、
メモリ上でポーリングして完了を待ちます。しかし、BitVisor の ahci ドラ
イバーは、AHCI コントローラーのレジスターがアクセスされたタイミングで
完了チェックを行い、読み取りアクセス完了の場合は、読み取られたデータの
コピー (暗号化使用時は復号) を行います。ここで、BitVisor はデバイスか
らホストに返されるデータの格納先アドレスを変更しないため、実際には
BitVisor より先に EFI 側の Ahci ドライバーが完了を検知します。しかし、
読み取りコマンドの場合、その時点ではまだバッファーにデータがコピーされ
ていないことになります。その後、ステータスか何かのレジスターがアクセス
されたタイミングで、BitVisor は完了を確認し、コピーが行われます。
他に、ひとつのコマンドで 4MiB (4194304 バイト) を超えるアクセスが行わ
れると ASSERT (totalsize <= 4 * 1024 * 1024) に引っ掛かって落ちる、と
いう問題がありますが、/System ディレクトリにアクセスできないだけで
panic していないのであれば、これではなさそうです。アクセスできないとい
うのは、何かエラーが表示されるのでしょうか? もしかすると、EFI ファーム
ウェアの挙動が以前のものとは変わっているのかも知れません。
あるいは、暗号化設定を間違えていれてしまっていると、データが化けてしまっ
て動かないかと思いますが、記載していただいた defconfig を見る限り、
storage の項目は書かれていないようですので、そうであれば暗号化はされま
せん。
Fusion Drive は未確認です。また、Marvell SSD を搭載している MacBook
Air では、以下の panic が発生する問題が見つかっています:
SATACR0 0x12 SATACR1 0x48 Revision error
--
Hideki EIRAKU <hdk @ igel.co.jp>
BitVisor-devel メーリングリストの案内