Windows10 IoT CoreをVMwareで仮想化(1)

`I wrote it in English in the comment section.`

##◆はじめに
前回記事の次のトライアルとしてBluetoothドングルの追加を試行したが、どうもHyper-Vは簡単にはWi-Fi以外のUSBを認識しないようだ。(RemoteFX USBリダイレクションはリモートデスクトップを経由した接続を前提としているが、Win10IoTCoreはリモートデスクトップによる接続をサポートしていない。ちなみにWindows IoT Remote Clientでも無理。)
今後、暇があればUSBリダイレクタを試行してみるが、時間と金を無駄にかけるぐらいなら華麗に方向転換し、VMwareで試行することとした。
自分のような薄給リーマンは時間と金の投資にシビアであるべきだ。

前回の記事（Windows10 IoT CoreをHyper-Vで仮想化）
http://qiita.com/PINTO/items/0cf1a303be8666ca4643

以下、せっかくなのでMinnowBoard Maxのイメージでトライ。（Jouleでもいける）

##◆Windows10 IoT Core仮想化の前提環境
１．ホストマシン
Windows10 Pro x64 (Hyper-v機能の無効化必要、管理者コマンドプロンプトから「bcdedit /set hypervisorlaunchtype off」実行でHyper-vモードを無効化可能)
~~※MinnowBoard MaxはゲストにMEM:4GB以上の割り当てが無いとエラーが発生して起動失敗するため注意。~~

２．VMware Workstation 12 Pro for Windows 64-bit (評価版)　https://www.vmware.com/jp/products/workstation/workstation-evaluation.html
※無償版のVMware Workstation 12 Player というものもあるが、以下作業のうち、ファームウェアの選択 並びに SATA Controllerの指定が出来ない。

３．StarWind V2V Image Converter

##◆Windows10 IoT Core仮想化の手順
１．下記をダウンロード、インストール。捨てアカウントの登録が必要となる点以外は行き詰まる要素は無い。
（１）VMware Workstation 12 Pro for Windows 64-bit (評価版)　https://www.vmware.com/jp/products/workstation/workstation-evaluation.html
※製品版を購入しようとすると30,000円。高過ぎる。
（２）StarWind V2V Image Converter
２．Microsoft の公式ページからIoT Core インストールファイルISOをダウンロードしてPCにマウントし、中身のMSIをホストにインストールする（自分はBuild 16257のISOでトライ）
３．C:\Program Files (x86)\Microsoft IoT\FFU\xxx　にFFUイメージ「flash.ffu」が生成される
※xxxの部分はOSイメージによって変わる。分からなければエクスプローラを開いてどんなフォルダ名になっているか調べる
４．ImgMountをダウンロードしてデスクトップに解凍する（ImgMount.exe）https://forum.xda-developers.com/showthread.php?t=2066903
５．管理者としてコマンドプロンプトを起動し、「CD C:\Program Files (x86)\Microsoft IoT\FFU\xxx」を実行
※xxxの部分はOSイメージによって変わる。分からなければエクスプローラを開いてどんなフォルダ名になっているか調べる。
６．C:\Users\ (username)\Desktop\ImgMount\ImgMount.exe .\flash.ffuを実行
※(username)の部分はホストPCへのログインユーザーID
７．コントロールパネル→管理ツール→コンピュータの管理→ディスクの管理
８．flash.ffuのイメージをマウント(６．)した結果増えた「ディスクn」を右クリック→VHDの取り外し
９．取り外しを選んだ瞬間に表示されるダイアログ内に表示されているパスをコピーし、notepadに張り付けて退避しておく
10．StarWind V2V Image Converter を起動
11．次へ
12．「Local file」を選択して次へ
13．「File name:」に９．で退避したフルパスを指定して次へ
14．「VMware growable image」を選択して次へ
15．「Virtual disk type」に「SCSI」を指定して次へ
16．「File name:」に変換後.vmdkファイルの出力先をフルパスで指定、notepadに張り付けて退避して次へ
17．Finishボタンクリック
18．VMware Workstation Pro を起動
19．ホームタブ → 新規仮想マシンの作成
20．「カスタム(上級)」を選択して次へ
21．次へ
22．「後でOSをインストール」を選択して次へ
23．ゲストOSに「Microsoft Windows」、バージョンに「Windows 10」（jouleの場合は Windows 10 x64）を選択して次へ
24．「仮想マシン名:」に好きな名前を入力して次へ
25．ファームウェアタイプに「EFI」を指定して次へ
26．次へ
27．「1024」MB以上を設定して次へ
28．「ブリッジ」又は「NATを使用」を指定して次へ
29．「LSI Logic SAS」を指定して次へ
30．「SATA」を指定して次へ
31．「既存の仮想ディスクを使用」を指定して次へ
32．「既存のディスクファイル」に16．で退避したフルパスを指定して次へ
33．完了ボタンクリック

ゲスト起動時にエラーのようなものが表示されるが無視／非表示にしても問題ない。
ホストPCへUSBデバイスを接続するとVMware側へ自動的にバイパスされ、VMware画面右下の接続アイコンをクリックすると、IoT Core側へ接続が認識される。素晴らしい。 Easy。
ホストPCにBluetoothが内蔵されている場合は勝手にゲストOS側で認識するようだ。求めていたのはこれ。素晴らしい。
ゲストOSのBluetoothは、ホストOSとペアリング済みのデバイスのみがペアリング対象として検出される。(20170826追記：ホストとゲスト間でデバイスを共有する設定となっている場合のみ。共有設定ではなく占有設定であればホストとの事前ペアリング不要、詳細は次回記事を参照)
試しにスマホとホストOSをペアリングしてから、ゲストOSを起動し、「Bluetoothデバイスの管理」ページを表示するとスマホがペアリング対象として表示された。
「ペアリング」ボタンを押すと何事もなく「ペアリング済み」になる。
Virtualboxと違ってNATでもブリッジでもIPが普通に取得できる。IPが取得出来ない時点で致命的。Virtualboxの改善を切に望む。

##◆ネットワークブリッジが正常に動作しなくなった時の対処方法
１．編集→仮想ネットワークエディタ
２．設定の変更ボタンをクリック
３．「VMnet0」のブリッジ先を「自動」から「(物理NIC)」に変更する 又は 「VMnet0」を選択した状態で、デフォルトに戻すボタンをクリックする

##◆おわりに
ネックは、VMware Workstation 12 Proが高価すぎて自分には手が出せないことのみ。
I2Cのリモートデバッグも、試す前に実現できそうなことだけイメージが湧いた。
下記のものを使用予定。ポイントはWindowsの標準ドライバで通信できるらしい、ところ。1,700円か…高い…高いが、数千円～万円単位の投資には代えられない。これが実現出来れば、チーム開発で、少ないマイコン実機の奪い合いに終止符が打てる。また完全ではないが、マイコンをスペックダウンした場合、スペックアップした場合のOSとアプリの動きを比較・検証できる。
余談だが、vmwareのコンシューマ向け部門の技術者が全員解雇された、という噂もあるなか、Workstation Proの将来性は甚だ疑問を残すところだ。だが、色々なマイコンボードを実機１台でフォローできる点は大きなメリットなので、買えなくなる前にこれだけはボーナスで買っとくか。ハードをちょこちょこ買い足すと家内に怒られるし…

##◆USB・I2C（SMBus）変換モジュール MM-CP2112A　1,700円
http://www.sunhayato.co.jp/material2/index.php/item?cell003=%E6%95%99%E8%82%B2%E5%AE%9F%E7%BF%92%E3%83%BB%E9%9B%BB%E5%AD%90%E5%B7%A5%E4%BD%9C%E8%A3%BD%E5%93%81&cell004=IC%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB&name=USB%E3%83%BBI2C%EF%BC%88SMBus%EF%BC%89%E5%A4%89%E6%8F%9B%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB+MM-CP2112A&id=1083&label=1

##◆次の記事
Windows10 IoT CoreをVMwareで仮想化(2) Bluetooth/BluetoothLE(BLE)
http://qiita.com/PINTO/items/97fcf179483efe11de57