- 最新のマイクロソフト組み込み技術を学ぶ一日
Windows 8.1とEmbedded Systemの関係を知る
◦ Windows デバイスドライバーとドライバー モデル ◦ USB と USBドライバーの構成 ◦ WinUSBの拡張 Windows 8.1のデバイスとデバイスドライバー
Windows ストア アプリでハードウェア制御
今回の話題は
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
画面の様子
CUIアプリ
画面・機能は Windows 8.1
ストアアプリケーションでデバイスを扱える
◦ Windows 8 で本来実現できるはずだった機能 build 1(2011年9月) では多数のデバイス制御のセッション ◦ しかしTechnical Previewでは機能が削除 デバイスドライバー アーキテクチャの変更
◦ KMDF: Version 1.9 → 1.11→1.13 ◦ UMDF: Version 1.9 → 1.11→2.0 USB関連クラス追加とWinUSBの位置づけの変更
◦ WinUSB がデバイスサポートの鍵になる!? CUIアプリ ソースコード共通化 ( c ! not c++)
配布、インストール、起動、中断から終了までの
振る舞いの変更
セキュリティー、権限、制約の変更
◦ ブランディングとロックダウン的なものを導入 ◦ WEC アプリ的な動作 → 組み込み用途に適している 新
APIの導入
CUIアプリ × Windows Application ストア アプリ UI変更だけではない◦ 水色が追加されたライブラリ、黄緑色が強化されたライブラリ デバイスアクセスの強化
デバイスは
◦ 他と異なる、差別化する機能を実装⇔使いこなし (MS-DOSの頃から…) ◦ 最近は高性能・高機能化する一方標準化、汎用化が進む ◦ 最近はデバイスや半導体メーカーが淘汰してきている? デバイスドライバーは
◦ デバイスアクセスに必須(MS-DOSの頃から…) ◦ デバイス個別の差異を吸収⇔デバイス別に用意 ◦ 最近インボックス(インストール済、汎用)ドライバー利用が増加NTカーネル
アプリケーション操作への対応
カーネル操作への対応
デバイスを制御するソフトウェア
◦ 入出力操作, 割り込み操作,… ◦ バッファ操作, 排他制御,… デバイス Kernel mode デバイスドライバー アプリケーションCreateFile, ReadFile, WriteFile,…
ドライバーインストール PnP(デバイスの脱着) 電源管理 ネットワーク ファイルシステム ユーザモード カーネルモード ハードウェア User mode デバイスドライバー
デバイスドライバーを開発する
◦ WDM ドライバー ◦ KMDF ドライバー ◦ UMDF ドライバー Windowsにプレインストールされているインボックスド
ライバーを利用する
◦ USBストレージ, USB-HID, WinUSB…
汎用ドライバー(サードパーティ製)を利用する
◦ UUSBD, LibUSB, … 古いアーキテクチャ 開発工数がWDMの1/5 ユーザーモードの制約今後の主流
基本的にインストール不要(特定条件)
◦ INFファイル等が必要な場合がある ◦ VID&PID vs. Compatible ID ドライバー開発が不要
◦ INFファイルやカタログファイルの作成が必要な場合はある ドライバーの品質が安定している
Windowsアプリケーションとの連携が容易
デバイス側ファームウェアで デバイスクラスが定義済なら不要今後の主流
アプリケーションから汎用的に使える
USBドライバー
◦ Microsoft社が初めて提供した汎用ドライバー
◦ Windows Vista以降に事前インストール済
◦ USB UMDF V1ドライバーに必須 (USB入出力をサポート)
一般的な
USB入出力機能を提供
◦ WinUSB.SYS – カーネルモード・ドライバー ◦ WinUSB.DLL – APIライブラリ Windows 8.1 ストアアプリで注目
◦ ドライバー開発&インストール不要 ◦ 汎用的なデバイスアクセスを実現 ◦ Windows RT 対応(INF不要のインストール) ◦ (以前は文献やサンプルが少なかった) アプリケーションから 直接利用可能 UMDFの サポート用として開発
構造図
ユーザーモード アプリケーション カーネルモード IOマネージャー 下位ドライバー デバイス Win 32 API WDM ドライバー usbport.sys usbhub.sys usbehci.sys usbhub.sys usbd.sys
構造図
ユーザーモード アプリケーション カーネルモード IOマネージャー 下位ドライバー デバイス Win 32 API KMDF ドライバー Framework usbport.sys usbhub.sys usbehci.sys usbhub.sys usbd.sys
構造図
ユーザーモード アプリケーション カーネルモード IOマネージャー リフレクタ UMDFホスト・プロセス UMDF ドライバー Framework デバイス 下位ドライバー Win 32 API usbport.sys usbhub.sys usbehci.sys usbhub.sys usbd.sys WinUSB.SYS WinUSB API WinUSB.dll Framework
構造図
ユーザーモード アプリケーション カーネルモード IOマネージャーWinUSB.SYS
デバイス 下位ドライバー Win 32 API / WinUSB API usbport.sys usbhub.sys usbehci.sys usbhub.sys usbd.sys WinUSB.dll Framework
ストアアプリでのアイソクロナス転送
ストアアプリでの指定外クラスの利用
Windowsカーネルがサポートしている機能の代替
◦ LAN, Modem, Storage, …
ソフトウェア構造としてアプリケーションとドライバー部
分を分離すること
開発環境
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台必要 WinUSBで 対応できない 場合は開発し ましょう 以前より簡単 になりました
ストアアプリにはデバイス利用制限がある
利用するためには
◦ Windows ストアデバイスアプリとしてドライバーとともに開発 ドライバーまたはINFファイルの開発が必要 特定デバイスを占有して利用 ◦ WinUSB利用ストア アプリとして開発 ドライバー開発は不要(INFファイル無しでもインストール可能)
特定(自社製)デバイス専用のアプリケーション
◦ マルウェア等の他のアプリケーションに悪用されない ◦ 想定外の使われ方をしない ◦ 課金対象等のデバイス利用を制限可能 ◦ デバイス装着時のAuto Play(自動再生)機能 ◦ デバイス メタデータでアプリケーションと紐づけ、権限管理 ◦ 典型的なサポートデバイス プリンター、モバイル ブロードバンド、カメラ、テレビ、ステレオ、 レシーバー、ゲーム デバイス
デバイス(ファームウェア)が
WinUSBクラス対応の場合
◦ INF ファイルを使わなくても インストール可能
◦ レジストリを操作してデバイス固有のGUIDを登録
◦ クラスインストーラーがWinUSBクラスドライバーをインストール
◦ デモ (Custom USB device access sample:OSRFX2)
ベンダーがカスタム
INFファイルを用意する場合
ドライバー パッケージとしてINFファイルをベンダーが用意
Windows.Devices.Usb 名前空間により、WinUSB(Winusb.sys)
をデバイス ドライバーとして使う外部 USB デバイスと
Windows ストア アプリが通信可能
デバイスクラスは以下のいずれかに制限
◦ 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 * * →アプリケーションで可能な動作を制限
USB用のMicrosoft固有のディスクリプターを定義
いままでディスクリプターに全てを含めることができな
かった画像、アイコン、カスタム ドライバーといったデバ
イス固有の情報をユーザーに提供する
WinUSB用の情報を拡充し、ドライバー無しで利用でき
るデバイス種類を増やす。
Windows 8.1とEmbedded Systemの関係を知る
Windows デバイスドライバーとドライバー モデル
USB と USBドライバーの構成
WinUSBの拡張
Windows 8.1のデバイスとデバイスドライバー
Windows ストア アプリでハードウェア制御
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