- 最新のマイクロソフト組み込み技術を学ぶ一日 ドライバー開発から 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 Server 2012 for Embedded Systems ◦ Microsoft 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