PSVITAドライバをMac/VMware Fusion上のWin8 CP版で認識させる

2012年6月16日土曜日

今日は、TopGate社にて開催された「PSSuite SDK観察会」に参加してきました。

PlayStation Suite SDKのクローズドβが始まってからそろそろ半年、それなりに
ものがこなれてきたということもあり様々な機能に触れてみようという趣旨の
観察会です。

が、集まったのはMac使いばかり。PSSuite SDKは、現在のところWindows版しか
提供されていません。このため、皆VMやBootCamp環境の上にPSSuite SDKを
インストールし、実機にサンプルコードをデプロイして動作させるのが最初の
課題となりました。

そこで大いにハマったので記事にしてみます。


「おとなしくWindows機を用意すればいいじゃない!」という声が聞こえてきそうですが、
既に自前のWindows XP機を用いたデプロイについては正常動作を確認してあり、
今回はあくまでもMac単体での完結にこだわりました。

環境

  • MacBook Air mid-2011(Core i5 / 4GB Memory / 250GB SSD)
  • VMware Fusion 4.1.3
  • Windows 8 Consumer Preview 64bit (2 Virtual Cores / 1GB Memory)

以前それなりに試してUSBドライバのインストールだけがどうもうまく完了出来なかったので、今回はここにフォーカスしました。SDK自体のインストールについては、Windows 8の場合.NET Framework 2.0/3.5が標準状態で含まれないことに注意が必要です(Gtk#のインストールでコケると思います)。Windowsの構成ユーティリティから追加インストールしておいてください。

対象のディレクトリは
C:\Program Files (x86)\SCE\Pss\tools\vita\driver
です。ここのinst.batを管理者権限付きで実行しても、ドライバのインストールに失敗します。
dpinst.exeのマニュアルを読みつつ/Cスイッチ付きでログを出力してみたところ
C:\Program Files (x86)\SCE\Pss\tools\vita\driver>dpinst.exe /SA /EL /C
INFO:   Option set: dumping log info to console.
INFO:   Current working directory: 'C:\Program Files (x86)\SCE\Pss\tools\vita\dr
iver'
INFO:   Running on path 'C:\Program Files (x86)\SCE\Pss\tools\vita\driver'
INFO:   User UI Language is 0x411.
INFO:   Install option set: legacy mode on.
INFO:   Install option set: Suppress Add or Remove Programs entries.
INFO:   Found driver package: 'C:\Program Files (x86)\SCE\Pss\tools\vita\driver\
vita_usbser.inf'.
INFO:   Preinstalling 'c:\program files (x86)\sce\pss\tools\vita\driver\vita_usb
ser.inf' ...
INFO:   ENTER:  DriverPackagePreinstallW
INFO:   RETURN: DriverPackagePreinstallW  (0xE000022F)
INFO:   Returning with code 0x80010000

という結果でした。どうもこれは、ドライバファイルに署名が不足しているのが問題らしいと当たりをつけ、開発者用のテンポラリ署名を行う方法を模索しました。

Windows Vista以降、64bit環境では無署名のドライバファイルインストールを受け付けないよう仕様変更されたということで、状況は納得出来るものです。

ちなみに、デバイスマネージャからPSVITAのドライバ更新を選択し、直接ドライバディレクトリを指定すると以下のようなエラーが出ます。

やはり、デジタル署名が行われていないのが原因のようです。

下準備として、開発用のテスト署名を受け入れられるよう
管理者権限)> bcdedit /set testsigning ON
を実行しVM(またはBootCamp動作ならMac自体)を再起動しておきます。

基本的に MSDN blog: INFファイルを記述する  へ準じていますが、一部異なります。
Makecert.exeはVisual Studioなどに含まれます。Express版やbeta版にも含まれるかと思いますので、適宜入手ください。
適当な作業ディレクトリを作成(この場合は C:\Users\muo\Documents\psssdk_test としました)し、

> Makecert.exe -r -pe -ss TestCert -n "CN= TestCert " TestCert.cer
管理者権限で)> certmgr.exe -add TestCert.cer -s -r localMachine root
管理者権限で)> certmgr.exe -add TestCert.cer -s -r localMachine trustedpublisher
を実行して署名ストアを作成&自マシンで信頼する設定とします。続いて、Windows SDKに含まれるinf2cat.exeを用いて

C:\Users\muo\Documents\psssdk_test>inf2cat.exe /driver:"C:\Users\muo\Documents\p
sssdk_test" /os:7_X64
とします。infのファイル名を直接指定せず、ディレクトリを指定するのがポイントです。

Errors:
22.9.4: Missing AMD64 CatalogFile entry (CatalogFile.ntamd64, CatalogFile.nt, Ca
talogFile) from [Version] section in \vita_usbser.inf


すると、このようなエラーが出てしまいます。元のinfファイルにCatalogFileセクションが含まれないため、infに対応付く署名情報のカタログを出力する先を確定出来ない、という旨のエラーのようです。

このため、

[Version]
Signature = "$Windows NT$"
Class = Ports
Provider = %SCEI%
DriverVer = 12/09/2011,1.0.0.0
ClassGUID={4D36E978-E325-11CE-BFC1-08002BE10318}
を少々いじり

[Version]
Signature = "$Windows NT$"
Class = Ports
Provider = %SCEI%
DriverVer = 12/09/2011,1.0.0.0
ClassGUID={4D36E978-E325-11CE-BFC1-08002BE10318}
CatalogFile=catalog.cat
として再度実行したところ

C:\Users\muo\Documents\psssdk_test>inf2cat.exe /driver:"C:\Users\muo\Documents\p
sssdk_test" /os:7_X64
.....................
Signability test complete.
Errors:
None
Warnings:
None
Catalog generation complete.
C:\Users\muo\Documents\psssdk_test\catalog.cat


正常にカタログファイルが生成されました。
ここで、/os:8_X64としていない理由は、この指定を行うとドライバの作成日が最新OSの割には古すぎるという、なかなかレアなエラーが発生するためです(下記)。

22.9.7: DriverVer set to incorrect date (must be postdated to 4/27/2012 for newe
st OS) in \vita_usbser.inf


あとは、PSVITAを接続してVM側で認識させ、デバイスマネージャのドライバ更新メニューから C:\Users\muo\Documents\psssdk_test ディレクトリを指定すれば



と警告は表示されますが、強行することでドライバのインストールを完了出来ます。

私の環境では、これで無事PlayStation Suite StudioからVITA実機にサンプルコードをデプロイすることが出来ました。

なお、後始末として、

管理者権限)> bcdedit /set testsigning OFF
としておきましょう。


参考: MSDN: DPInst Command-Line Switches

0 件のコメント:

コメントを投稿