Upload
buidieu
View
225
Download
0
Embed Size (px)
Citation preview
2005/9/14 Device Drivers Limited デバイスドライバ開発技術者セミナー 1
Windowsデバイスドライバ開発
デバイスドライバーズ[email protected]
デバイスドライバ開発技術者育成講座
本テキストの内容は出版を予定しているため複製を禁じます
2005/9/14 Device Drivers Limited デバイスドライバ開発技術者セミナー 2
Windowsの進化
n WindowsはDOSから進化してきた
Windows3.0/3.1(1)
Windows1.0/2.0/386
Win98
WindowsNT 3.1
WindowsNT3.5/1
WindowsNT 4.0
Windows2000
WindowsCEAtWork
Win95
CE 3.0
8086 80286 80386 (IA32)
EMS/XMS/DOS Extender/VCPI/DPMIMS-DOS
IA64
WinME
Talisker
WindowsXP / SP1a
OS/2 1.0 OS/2 2.0
386SX
T-engine?
2003sv
longhorn
AMD64/EM64T
XPSP2
2003SP1
2005/9/14 Device Drivers Limited デバイスドライバ開発技術者セミナー 3
Windowsのドライバ
n 各バージョンに対応するドライバ
MS-DOS Windows3.1
WindowsNT4.0
Win98 / Me
Windows2000 / XP / 2003
WDM(.SYS)
Kernel Mode.SYS
VxD(32bit)RealMode
.SYSTSR.EXE .DRV(16bit)
Windows95
2005/9/14 Device Drivers Limited デバイスドライバ開発技術者セミナー 4
セグメント- 16bitから32bitへ(1)
n 8086時代のセグメント
0xA000
<a0000h番地に0fhをWrite>
mov ax,0a000hmov ds,axmov bx,0mov al,0fhmov ds:[bx],al
0x0000
16ビット
16ビット
20ビット
+)
セグメント・レジスタ
ベース・レジスタ
0xA0000
+)
出力アドレス
2005/9/14 Device Drivers Limited デバイスドライバ開発技術者セミナー 5
セグメント- 16bitから32bitへ(2)
n 80286のプロテクトモード
16ビット
16ビット
24ビット
+)
セレクタ(セグメントレジスタ)
セグメント・ベース・アドレス
出力アドレス
24ビットベース・レジスタ
ディスクリプタ・テーブル
64ビット
2005/9/14 Device Drivers Limited デバイスドライバ開発技術者セミナー 6
RAX EAX
AMD64 / EM64Tのアーキテクチャ
n レジスタ ALAH
RBX
RCX
RDX
RBP
RSI
RDI
RSP
RIP
ESP
EDI
ESI
EBP
EBX BLBH
ECX CLCH
EDX DLDH
EIP
RFLAGS EFLAGS
R15R14R13R12R11R10R9R8
BP
SI
DI
SP
IP
FLAGS
XMM0XMM1XMM2XMM3XMM4XMM5XMM6XMM7
XMM8XMM9XMM10XMM11XMM12XMM13XMM14XMM15
CS DS ES FS GS SS
MMX0 / FPR0MMX0 / FPR0MMX0 / FPR0MMX0 / FPR0MMX0~7 / FPR0~7
63 31 15 7 0
63 31 15 0
EM64T拡張部
2005/9/14 Device Drivers Limited デバイスドライバ開発技術者セミナー 7
ドライバの階層構造n さまざまなデバイスドライバ
Hardware
デバイスドライバ
ミニポートドライバ
ポートドライバ(共通部分)
アプリケーション
クラスドライバ(共通部分)
フィルタドライバ
HAL
ユーザモードドライバ
ベンダドライバ
DLL
他のドライバ
2005/9/14 Device Drivers Limited デバイスドライバ開発技術者セミナー 8
カーネルとデバイスドライバ
n カーネル構成モジュール
NTカーネル
デバイスマネージャ
デバイスドライバ
割込コールバック
デバイスドライバ
デバイスドライバ
IOマネージャ
デバイスデバイス
デバイス
デバイス管理
ファイルシステム
PnPPower ...
......
ネットワーク
プロセス管理 メモリ管理リソース オブジェクト セキュリティメッセージ
2005/9/14 Device Drivers Limited デバイスドライバ開発技術者セミナー 9
PCのアーキテクチャ
n 典型的なデスクトップPCの内部構成例
USBCont.
CPU
South Bridge
North Bridge メモリビデオ
LPC/ISAバス PCIバス
2005/9/14 Device Drivers Limited デバイスドライバ開発技術者セミナー 10
階層化ドライバ・アーキテクチャ
n USBジョイスティックの例
PCIバス・デバイススタック・ドライバ
USBホスト・コントローラ・ドライバ
USBハブ・ドライバ
USBプロトコル・ドライバ
HIDクラス・ドライバ
HIDミニポート・ドライバ
pci.sys
hidusb.sys
usbd.sys
usbhub.sys
uhcd.sys/openhci.sysusbehci.sys
xxxxx.sys
2005/9/14 Device Drivers Limited デバイスドライバ開発技術者セミナー 11
用語
n IOマネージャn デバイスの管理
n デバイスドライバへのサービスの提供n IRP(I/O Request Packet) を用いた通信制御
n IRPn カーネルとデバイスドライバの通信手段
struct IRP
IoStatusヘッダー
スタックI/Oスタックロケーション
I/Oリクエストの内容を保持
I/Oステータスブロック
I/Oリクエストの状態
2005/9/14 Device Drivers Limited デバイスドライバ開発技術者セミナー 12
用語(続き)
n ドライバ・オブジェクトn ドライバのロードに作成される
n ドライバ自身のコードとデータ
n デバイス・オブジェクトn 各物理デバイス毎に存在
n デバイス管理
n IRQL(IRQレベル、または割り込み要求レベル)n ハードウェア割り込みを抽象化された割り込みへ変換
Driver Object
Device Object
Device Object
StartIo()
Unload()
Function()
Function()
2005/9/14 Device Drivers Limited デバイスドライバ開発技術者セミナー 13
デバイスドライバの内部構造
n デバイスドライバの内部構造の例
DriverEntry()
ディスパッチ・ルーチン群
割込み処理ルーチン群
★マルチスレッド処理が基本
登録
登録
バックグラウンド処理
呼び出し
2005/9/14 Device Drivers Limited デバイスドライバ開発技術者セミナー 14
ディスパッチ・ルーチン
n DriverEntryで登録するコールバック・ルーチンn ソフト割込みで実行され、優先順位は高いn DISPATCH_LEVEL
n ユーザ要求以外に、システム、OSから発行される
n カーネルからの呼び出しシーケンスは決まっている
n 処理のパラメータはIRPに載っている
2005/9/14 Device Drivers Limited デバイスドライバ開発技術者セミナー 15
ディスパッチ・ルーチンの例
n 一般的なディスパッチ・ルーチンの例
DriverEntry()
AddDevice()
Unload()
PnP()
Power()
Create()
Close()
Read()
Write()
DeviceControl()
… …()
StartIo()
2005/9/14 Device Drivers Limited デバイスドライバ開発技術者セミナー 16
IRQレベル
n 理想化された抽象的なプライオリティレベル発生元
Hardware
Software
IRQL
HIGHEST_LEVEL
POWER_LEVEL
IPI_LEVEL
CLOCK2_LEVEL
CLOCK1_LEVEL
PROFILE_LEVEL
DIRQL
DISPATCH_LEVEL
APC_LEVEL
PASSIVE_LEVEL
目的
マシンチェック、バスエラー
電源異常割込み
マルチプロセッサ通信
インターバルクロックー2
インターバルクロックー1
プロファイリング・タイマー
I/Oデバイス割込み要求(プラットフォーム依存)
スレッド・スケジューラ
非同期処理
標準的なスレッド実行レベル
2005/9/14 Device Drivers Limited デバイスドライバ開発技術者セミナー 17
Buffered I/OとDirect I/O
n Buffered I/On 入出力の度にカーネル内バッファに一度コピーされ
る
n Direct I/On MDL構造体を使って直接メモリを操作n DMA等のハードウェアを効率良く扱える
n Neither I/On BufferedでもDirectでも無い方法、IRP上の
UserBuffer領域を利用して入出力n あまり使わない
2005/9/14 Device Drivers Limited デバイスドライバ開発技術者セミナー 18
ドライバ開発手法
n Windows DDKn Microsoftのツール
n サードパーティーのツール
2005/9/14 Device Drivers Limited デバイスドライバ開発技術者セミナー 19
Windows DDK
n ターゲットOSと、ドライバのタイプによって開発手法が異なるn DDKとコンパイラに依存し、開発環境のOSには依存しない
• DDKとSDKとVC1.5xとMASMが必要(16ビット)• VC1.5x, VC4.xとMASMが必要(一部の古いVxD)• VC++6.0が必要(W2K-DDKまで)• XP-SP1-DDK以降はコンパイラ付
WinXP SP1
WinNT .SYS
Win98/Me WDM
Win98/Me 32Bit VxD
Win2K / WinXP
Win98/Me 16BitVxDと古いVxD
XP-SP1-DDK
W2K-DDK98-DDK
NT-DDK
95-DDK
sv2003SP1
sv2003-DDK
IA-64
AMD64 / EM64T
sv2003
WinXP SP2
Vista
sv2003-SP1-DDK
2005/9/14 Device Drivers Limited デバイスドライバ開発技術者セミナー 20
古いDDKn Win95 DDK
n Windows MeまでのVxD開発には、ほぼ必須 (サウンド、ビデオ...)
n Win98 DDKn Windows 98SEの開発には、必要と言われている
n WinNT DDKn Windows NTのドライバ開発には必須
n Windows2000 CompleteDDK Aug7n W2K-SP2 / Me対応n 現在はsv2003DDK利用を推奨
n WindowsXP 無印 DDKn 廃止
n WindowsXP SP1 DDKn W2K(SP4) / WinMeにも対応
n MSDNの公式サポート見解
Title Support? Availability
Microsoft Windows 2000 DDK Yes Provided in Windows Server 2003 DDK
Windows XP SP1 DDKWindows 98 DDKWindows NT® 4.0 DDK
No Available to MSDN subscribers in the archives at MSDN Subscriber Downloads
2005/9/14 Device Drivers Limited デバイスドライバ開発技術者セミナー 21
どのDDKをつかうべきか?
n MSDNの公式サポート見解If you write drivers for … Use this DDK Use this HCT
Microsoft Windows Server™ 2003 SP1 (not released now)(x86, x64, AMD64)
Windows Server 2003 Service Pack 1 DDK(Beta; available to MSDN Subscriber Downloads)
HCT 12(HCT 12.0 for preliminary testing; HCT 12.1 Beta; available to MSDN subscribers)
Windows Server 2003 family released products(x86 and Intel Itanium)
Windows Server 2003 DDK HCT 11.2
Windows XP Family(including Service Pack 2)
Windows Server 2003 DDK(for SP2-specific technologies, see Windows Server 2003 Service Pack 1 DDK)
HCT 12.x
Windows 2000 Family Windows Server 2003 DDK HCT 11.2
Windows Millennium Edition(unsupported)
Windows XP Service Pack 1 DDK(Available in the archives at MSDN Subscriber Downloads)
HCT 9.6(This product has been discontinued and is unsupported)
Windows 98 Second Edition Windows 98 DDK(Available in the archives at MSDN Subscriber Downloads)
HCT 9.502(Download from Device Testing or System Testing)
Microsoft Windows NT Workstation(unsupported)Microsoft Windows NT 4.0 Server
Windows NT 4.0 DDK(Available in the archives at MSDN Subscribers)
HCT 9.502(Download from Device Testing or System Testing)
2005/9/14 Device Drivers Limited デバイスドライバ開発技術者セミナー 22
伝統的な開発手法
n Windows DDKの特徴n ライブラリ、サンプルコード、ツールとコンパイル環境を提供n MSDNはほぼ必須(MSDNだけで入手できる情報)
n サンプル・コードや情報は頻繁にUpdateされる
n http://www.microsoft.com/ddk/ から申し込む(ダウンロード不可)
n デバイスドライバ開発に必要な情報は、DDKのHelpにある→MSDNライブラリにも収録
n XP-SP1-DDK以降、VC++相当のコンパイラが付属
n コンパイルはコマンドプロンプトで行う
2005/9/14 Device Drivers Limited デバイスドライバ開発技術者セミナー 23
伝統的な開発手法(続き)
n WinDbg (うぃんでばっぐ)n Microsoftが提供するデバッグ手段
n 通常は2台のPCをシリアル・クロスケーブルで接続
n Target側で、boot.iniで/debugオプションを指定して立ち上げる
n Host側でWinDGBを立ち上げる
n リソースが少ない場合は動作が遅い
Target側 Host側デバッギー
デバッガー
2005/9/14 Device Drivers Limited デバイスドライバ開発技術者セミナー 24
Microsoftが提供する開発ツール
n Windows DDKn ダウンロード不可、実費提供またはMSDNで提供n 現在はコンパイラ、アセンブラのほか、各種開発ツールが入っている
n Debugging Toolsn 以前は個別に提供していたものをまとめて提供n http://www.microsoft.com/ddk/debugging/からダウンロード可能
n HCTn ダウンロード不可、実費提供またはMSDNで提供
n Driver Verifiern Windowsとともに提供
n GUIDGENn コンパイラやDDKとともに提供
n Virtual PCn 製品として提供(旧Connectix社製)、1台でWinDbgを実行できる
2005/9/14 Device Drivers Limited デバイスドライバ開発技術者セミナー 25
WHQLとHCT
n HCTとは?n Hardware Compatibility Test
(WHQL: Windowsロゴ取得のためのテスト)n 最新版は12.1 (XP SP2, 2003serverSP1用) n Windows XP SP1/2003serverは、11.2を使用
n 10.x(無印XP用)は今後サポートされない)
n http://www.microsoft.com/whdc/hwtest/
n (主にOEMメーカ向け)無料サポートメール• "Windows Hardware Quality Labs. Japan“
[email protected]対応はやや遅いが、強力なサポートやヒントが得られる
2005/9/14 Device Drivers Limited デバイスドライバ開発技術者セミナー 26
WHQLとHCT
n WHQLとは?n ハードウェアのためのWindowsロゴ・プログラム
http://www.microsoft.com/hwdq/hwtest/n このハードウェアとデバイスドライバは、指定バージョンの
Windowsが正しく動く(動作を妨げない)というマーク
n HCL (Hardware Compatibility List) に掲載されるhttp://www.microsoft.com/hcl/
n ハードウェアとデバイスドライバとinfファイルをセットで認証する
WHQL申請
HCLに登録
ロゴの許可
Signeture交付
審査HCTテスト検証 合格
不合格
2005/9/14 Device Drivers Limited デバイスドライバ開発技術者セミナー 27
INFファイル
n INFファイルの役割n デバイスドライバのインストール補助
• ファイルのコピー• レジストリの操作
n デバイスドライバの設定や情報を補うパラメータ
n 複数のデバイスドライバの関連を示す
n デバイスドライバ自身• プリンタ・ドライバ• モデム・ドライバ
n INFファイルの位置付けn デバイスドライバの一部、または全部
n デバイスドライバの顔(表紙、ヘッダの役割)
2005/9/14 Device Drivers Limited デバイスドライバ開発技術者セミナー 28
INFファイル
n 一般的なINFファイルの種類n Windows95n WindowsNTn WindowsXPn Windows95 / 98 / Me / 2000 / XP共通 (Chicago)
n INFファイルのシンタックスn MSDNライブラリ(DDK->Device Installation)n http://msdn.microsoft.com/library/default.asp
n INFファイルのチェックn INF-CHECK (HCT)n INFCATREADY (HCT)
2005/9/14 Device Drivers Limited デバイスドライバ開発技術者セミナー 29
サードパーティーのツール
n ツールを用いた開発n Wizard型
n テンプレート型
n GUIでの操作、デバッグが可能
n ツールの例n WinDK, DriverWizard (ツールクラフト, BlueWater)n NuMega DriverStudio (CompuWare)
• DriverWorks, Driver Agent, VtoolsD, DriverWorkbench• SoftICE, BoundsChecker• TrueCoverage, TrueTime, FieldAgent
2005/9/14 Device Drivers Limited デバイスドライバ開発技術者セミナー 30
サードパーティーのツール(続き)
n SoftICEn CompuWareが提供(旧NuMega製品)
n 実質的にはドライバ業界標準のデバッグツールn 1台で、WinDbg同等の事が、高速にできる
2005/9/14 Device Drivers Limited デバイスドライバ開発技術者セミナー 31
その他有用なサイトとツール
n SysInternalsn http://www.sysinternals.com/
n OSRn http://www.osr.com/
n Walter Oneyn http://www.oneysoft.com/
n Coce Machine Trainingn http://www.codemachine.com/
n VMwaren http://www.vmware.com/n 1台でWinDbgを実行できる
2005/9/14 Device Drivers Limited デバイスドライバ開発技術者セミナー 32
日本語の参考サイト
n Windows Developer Centern http://www.microsoft.com/japan/msdn/windows/
n パソコン電脳職人道n http://www.ouk.co.jp/ogawa/sforum/sfrm.html
n デバドラ掲示板n http://www.sciencepark.co.jp:8080/bbs1/wwwboard.html
2005/9/14 Device Drivers Limited デバイスドライバ開発技術者セミナー 33
Windowsとの付き合い方n WEBを有効活用する
n Microsoftのサイト• http://www.microsoft.com/ddk/• http://www.microsoft.com/whdc/• http://www.microsoft.com/whdc/DevTools/HCTKit.mspx
n その他のサイト• 掲示板と個人の情報サイト(質問してみることも…)
n MSDNは必須だが...n ライブラリの情報(初心者にはあまり意味が無いが…)n HELPはDDKのHelpを使うべきn ユニバーサル(輸出するならば)n オンライン配布(Subscriber Download)の利用が当たり前n MSDNは万全ではない
n Vistaに向けた準備