- 最新のマイクロソフト組み込み技術を学ぶ一日 ドライバー開発から Windows ストア デバイス アプリ まで

Windows Embedded Community Day 株式会社デバイスドライバーズ 日高亜友  Windows 8.1とEmbedded Systemの関係を知る ◦ Windows デバイスドライバーとドライバー モデル ◦ USB と USBドライバーの構成 ◦ WinUSBの拡張

 Windows 8.1のデバイスとデバイスドライバー

 Windows ストア アプリでハードウェア制御

Windows Embedded Community Day 2013/10/29 2  今回の話題は Windows Embedded 8 ファミリー (WES系) ◦ Windows Embedded 8.1 Pro ◦ Windows Embedded 8 Standard ◦ Windows Embedded 8.1 Industry ◦ Windows Embedded 8 Handheld ◦ Windows 2012 for Embedded Systems ◦ SQL Server 2012 for Embedded Systems ◦ System Center 2012 SP1 と Windows 8.1 でのデバイス・アクセスがテーマ

Windows Embedded Community Day 2013/10/29 3  画面の様子

画面・機能は Windows 8.1 とほぼ同じ

CUIアプリ

Windows Embedded Community Day 2013/10/29 4  ストアアプリケーションでデバイスを扱える ◦ Windows 8 で本来実現できるはずだった機能 build 1(2011年9月) では多数のデバイス制御のセッション ◦ しかしTechnical Previewでは機能が削除

 デバイスドライバー アーキテクチャの変更 ◦ KMDF: Version 1.9 → 1.11→1.13 ソースコード共通化 ◦ UMDF: Version 1.9 → 1.11→2.0 ( c ! not c++) CUIアプリ

 USB関連クラス追加とWinUSBの位置づけの変更 ◦ WinUSB がデバイスサポートの鍵になる!?

Windows Embedded Community Day 2013/10/29 5  配布、インストール、起動、中断から終了までの 振る舞いの変更  セキュリティー、権限、制約の変更 ◦ ブランディングとロックダウン的なものを導入 ◦ WEC アプリ的な動作 → 組み込み用途に適している  新APIの導入 × ストア CUIアプリ Windows Application アプリ

UI変更だけではない

Windows Embedded Community Day 2013/10/29 6 ◦ 水色が追加されたライブラリ、黄緑色が強化されたライブラリ

デバイスアクセスの強化

Windows Embedded Community Day 2013/10/29 7  デバイスは ◦ 他と異なる、差別化する機能を実装⇔使いこなし (MS-DOSの頃から…) ◦ 最近は高性能・高機能化する一方標準化、汎用化が進む ◦ 最近はデバイスや半導体メーカーが淘汰してきている?

 デバイスドライバーは ◦ デバイスアクセスに必須(MS-DOSの頃から…) ◦ デバイス個別の差異を吸収⇔デバイス別に用意 ◦ 最近インボックス(インストール済、汎用)ドライバー利用が増加

Windows Embedded Community Day 2013/10/29 8  アプリケーション操作への対応  カーネル操作への対応 アプリケーション  デバイスを制御するソフトウェア CreateFile, ReadFile, WriteFile,… ◦ 入出力操作, 割り込み操作,…

◦ バッファ操作, 排他制御,… User mode デバイスドライバー ユーザモード NTカーネル ネットワーク ドライバーインストール ファイルシステム PnP(デバイスの脱着) Kernel mode デバイスドライバー 電源管理

カーネルモード

ハードウェア デバイス

Windows Embedded Community Day 2013/10/29 9  デバイスドライバーを開発する 古いアーキテクチャ ◦ WDM ドライバー ◦ KMDF ドライバー 開発工数がWDMの1/5 ◦ UMDF ドライバー ユーザーモードの制約

 Windowsにプレインストールされているインボックスド ライバーを利用する ◦ USBストレージ, USB-HID, WinUSB… 今後の主流

 汎用ドライバー(サードパーティ製)を利用する ◦ UUSBD, LibUSB, …

Windows Embedded Community Day 2013/10/29 10  基本的にインストール不要(特定条件) ◦ INFファイル等が必要な場合がある デバイス側ファームウェアで ◦ VID&PID vs. Compatible ID デバイスクラスが定義済なら不要

 ドライバー開発が不要 ◦ INFファイルやカタログファイルの作成が必要な場合はある

今後の主流  ドライバーの品質が安定している

 Windowsアプリケーションとの連携が容易

Windows Embedded Community Day 2013/10/29 11  アプリケーションから汎用的に使えるUSBドライバー ◦ Microsoft社が初めて提供した汎用ドライバー ◦ Windows Vista以降に事前インストール済 ◦ USB UMDF V1ドライバーに必須 (USB入出力をサポート)  一般的なUSB入出力機能を提供 ◦ WinUSB.SYS – カーネルモード・ドライバー UMDFの ◦ WinUSB.DLL – APIライブラリ サポート用として開発  Windows 8.1 ストアアプリで注目 ◦ ドライバー開発&インストール不要 アプリケーションから ◦ 汎用的なデバイスアクセスを実現 直接利用可能 ◦ Windows RT 対応(INF不要のインストール) ◦ (以前は文献やサンプルが少なかった)

Windows Embedded Community Day 2013/10/29 12  構造図

アプリケーション

Win 32 API ユーザーモード

カーネルモード WDM ドライバー IOマネージャー usbport.sys 下位ドライバー usbhub.sys usbehci.sys usbhub.sys デバイス usbd.sys

Windows Embedded Community Day 2013/10/29 13  構造図

アプリケーション

Win 32 API ユーザーモード

カーネルモード KMDF ドライバー IOマネージャー Framework usbport.sys 下位ドライバー usbhub.sys usbehci.sys usbhub.sys デバイス usbd.sys

Windows Embedded Community Day 2013/10/29 14  構造図

UMDFホスト・プロセス アプリケーション UMDF ドライバー

Framework WinUSB API WinUSB.dll Win 32 API ユーザーモード

カーネルモード リフレクタ WinUSB.SYS Framework IOマネージャー usbport.sys 下位ドライバー usbhub.sys usbehci.sys usbhub.sys デバイス usbd.sys

Windows Embedded Community Day 2013/10/29 15  構造図

アプリケーション

Win 32 API / WinUSB API WinUSB.dll ユーザーモード

カーネルモード WinUSB.SYS Framework IOマネージャー usbport.sys 下位ドライバー usbhub.sys usbehci.sys usbhub.sys デバイス usbd.sys

Windows Embedded Community Day 2013/10/29 16  ストアアプリでのアイソクロナス転送

 ストアアプリでの指定外クラスの利用

 Windowsカーネルがサポートしている機能の代替 ◦ LAN, Modem, Storage, …

 ソフトウェア構造としてアプリケーションとドライバー部 分を分離すること ◦ アプリケーションが直接デバイスを制御する構造(DLL化可能)

Windows Embedded Community Day 2013/10/29 17 WinUSBで  開発環境OS 対応できない ◦ Windows 7, Windows 8, Windows 8.1 場合は開発し ましょう  開発対象 OS 以前より簡単 ◦ Windows 7, Windows 8, Windows 8.1 になりました  ツール ◦ Visual Studio 2012/2013+WDK8.1(+SDK)(+ADK) ◦ デバッガとテストツール、デプロイツールが全て含まれる。 ◦ F5キーでカーネルモードドライバーを署名付加後に、 リモート・インストールしてリモートデバッグ可能 ◦ カーネルモードドライバーのデバッグ・テスト時には ターゲット専用マシンが別に1台必要

Windows Embedded Community Day 2013/10/29 18  ストアアプリにはデバイス利用制限がある

 利用するためには ◦ Windows ストアデバイスアプリとしてドライバーとともに開発  ドライバーまたはINFファイルの開発が必要  特定デバイスを占有して利用

◦ WinUSB利用ストア アプリとして開発  ドライバー開発は不要(INFファイル無しでもインストール可能)

Windows Embedded Community Day 2013/10/29 19  特定(自社製)デバイス専用のアプリケーション ◦ マルウェア等の他のアプリケーションに悪用されない ◦ 想定外の使われ方をしない ◦ 課金対象等のデバイス利用を制限可能 ◦ デバイス装着時のAuto Play(自動再生)機能 ◦ デバイス メタデータでアプリケーションと紐づけ、権限管理 ◦ 典型的なサポートデバイス  プリンター、モバイル ブロードバンド、カメラ、テレビ、ステレオ、 レシーバー、ゲーム デバイス

◦ デモ (Custom driver access sample:OSRFX2)

Windows Embedded Community Day 2013/10/29 20  デバイス(ファームウェア)がWinUSBクラス対応の場合 ◦ INF ファイルを使わなくても インストール可能 ◦ レジストリを操作してデバイス固有のGUIDを登録 ◦ クラスインストーラーがWinUSBクラスドライバーをインストール ◦ デモ (Custom USB device access sample:OSRFX2)  ベンダーがカスタムINFファイルを用意する場合  ドライバー パッケージとしてINFファイルをベンダーが用意  Windows.Devices.Usb 名前空間により、WinUSB(Winusb.sys) をデバイス ドライバーとして使う外部 USB デバイスと Windows ストア アプリが通信可能  デモ (USB CDC Control sample:ELECOM-Gadgeteer)

Windows Embedded Community Day 2013/10/29 21  デバイスクラスは以下のいずれかに制限 ◦ name:cdcControl, classId:02 * * ◦ name:physical, classId:05 * * ◦ name:personalHealthcare, classId:0f 00 00 ◦ name:activeSync, classId:ef 01 01 ◦ name:palmSync, classId:ef 01 02 ◦ name:deviceFirmwareUpdate, classId:fe 01 01 ◦ name:irda, classId:fe 02 00 ◦ name:measurement, classId:fe 03 * ◦ name:vendorSpecific, classId:ff * * →アプリケーションで可能な動作を制限

Windows Embedded Community Day 2013/10/29 22  USB用のMicrosoft固有のディスクリプターを定義

 いままでディスクリプターに全てを含めることができな かった画像、アイコン、カスタム ドライバーといったデバ イス固有の情報をユーザーに提供する

 WinUSB用の情報を拡充し、ドライバー無しで利用でき るデバイス種類を増やす。

Windows Embedded Community Day 2013/10/29 23  Windows 8.1とEmbedded Systemの関係を知る  Windows デバイスドライバーとドライバー モデル  USB と USBドライバーの構成  WinUSBの拡張

 Windows 8.1のデバイスとデバイスドライバー

 Windows ストア アプリでハードウェア制御

Windows Embedded Community Day 2013/10/29 24  Windows 8.1 向け Windows ストア デバイス アプリの新機能  http://msdn.microsoft.com/ja- jp/library/windows/hardware/dn265149(v=vs.85).aspx

 Windows 向けハードウェアの設計、開発、認定  http://msdn.microsoft.com/ja-jp/windows/hardware/

 WinUSB デバイス  http://msdn.microsoft.com/library/windows/apps/hh450799

 Windows 8.1: キットとツールのダウンロード  http://msdn.microsoft.com/ja-jp/windows/hardware/gg454513.aspx

Windows Embedded Community Day 2013/10/29 25