hiroの長い冒険日記

主にコンピュータ周辺の興味を持った内容を綴ります

【起動できず】qemu for windows を debian で cross build (whpx有効編、その2)

前回、whpx 有効で build した qemu を Windows10 で起動させてみたが、No accelerator found で起動させる事が出来なかった。
hiro20180901.hatenablog.com
しかし、Hyper-V 仮想マシンを使用してるし、Docker for Windows も起動している。Hyper-V が機能していないという事はない。なんとか qemu でも whpx を有効にできないか、!whpx_cap.HypervisorPresent の条件を外して build してみた。

# diff -u whpx-all.c.bak whpx-all.c
--- whpx-all.c.bak      2019-02-17 17:27:10.779656206 +0900
+++ whpx-all.c  2019-02-17 17:27:57.413574701 +0900
@@ -1383,7 +1383,8 @@
     hr = whp_dispatch.WHvGetCapability(
         WHvCapabilityCodeHypervisorPresent, &whpx_cap,
         sizeof(whpx_cap), &whpx_cap_size);
-    if (FAILED(hr) || !whpx_cap.HypervisorPresent) {
+/*    if (FAILED(hr) || !whpx_cap.HypervisorPresent) { */
+    if (FAILED(hr)) {
         error_report("WHPX: No accelerator found, hr=%08lx", hr);
         ret = -ENOSPC;
         goto error;

もう一度 make して qemu-system-x86_64.exe を作成した。前回の build を残してあるので、whpx-all.c のみ compile、link されるので、時間は殆どかからない。Path through 仮想マシンで実行した。

Windows10側に scp して、既存の物に上書きして実行してみた。

PS C:\Program Files\qemu> .\qemu-system-x86_64.exe -accel accel=whpx
C:\Program Files\qemu\qemu-system-x86_64.exe: WHPX: Failed to create partition, hr=c0351000
C:\Program Files\qemu\qemu-system-x86_64.exe: failed to initialize WHPX: Invalid argument

やっぱりダメか...
qemu/target/i386/whpx-all.c :

... 略 ...
    hr = whp_dispatch.WHvGetCapability(
        WHvCapabilityCodeHypervisorPresent, &whpx_cap,
        sizeof(whpx_cap), &whpx_cap_size);
/*    if (FAILED(hr) || !whpx_cap.HypervisorPresent) { */
    if (FAILED(hr)) {
        error_report("WHPX: No accelerator found, hr=%08lx", hr);
        ret = -ENOSPC;
        goto error;
    }
    hr = whp_dispatch.WHvCreatePartition(&whpx->partition);
    if (FAILED(hr)) {
        error_report("WHPX: Failed to create partition, hr=%08lx", hr);
        ret = -EINVAL;
        goto error;
    }
... 略 ...

一つ目の FAILED(hr) を通っても二つ目の FAILED(hr) で引っ掛かるので、!whpx_cap.HypervisorPresent の条件が立っていないと進まないようだ。Hypervisor 初期化の手順が不足しているように感じる ... が、これ以上は知識が足りず対処できない。whpx_cap の中身を見たら少しは分かるかと思うが、正常に動作する個体と比較しながらじゃないと掴めない。

結果

  • もがいてみたが、残念ながら qemu を whpx 有効な状態で起動させる事は出来なかった。
  • おそらく、Virtualbox仮想マシンHyper-V で起動できる環境だと、qemu 仮想マシンも whpx 有効で起動できると思う。
  • もう少し Windows Hypervisor Platform に関する sample があれば良いのだが ...

Virtualboxqemu も、source 内の該当箇所が分かったので、進展あるまでは(諦めてないが)中断する。