WinDriver USB - XLsoft.com
WinDriver USB - XLsoft.com
WinDriver USB - XLsoft.com
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
JUNGO<br />
<strong>WinDriver</strong>
JUNGO LTD.<br />
COPYRIGHT<br />
Copyright (c) 1997 – 2006 Jungo Ltd. All Rigths Reserved.<br />
Jungo Ltd.<br />
POB 8493 Netanya Zip - 42504 Israel<br />
Phone (USA) 1-877-514-0537 (WorldWide) +972-9-8859365<br />
Fax (USA) 1-877-514-0538 (WorldWide) +972-9-8859366<br />
<br />
• Jungo Ltd. <br />
• <br />
• <br />
<br />
• <br />
• <br />
<br />
<strong>WinDriver</strong> KernelDriver Jungo <br />
WindowsWin32Windows 98Windows MeWindows CEWindows NTWindows 2000Windows XP<br />
Windows Server 2003 <br />
<br />
<br />
108-0014 5-1-9 4F<br />
TEL 03-5440-7875 FAX 03-5440-7876<br />
E-MAIL: xlsoftkk@xlsoft.<strong>com</strong><br />
Home Page: http://www.xlsoft.<strong>com</strong>/<br />
Rev. 8.0 – 4/2006
............................................................................................................3<br />
..........................................................................................................10<br />
1 <strong>WinDriver</strong> .........................................................................12<br />
1.1 ................................................................................................................................12<br />
1.2 ........................................................................................................................................13<br />
1.2.1 .......................................................................................................... 13<br />
1.2.2 <strong>WinDriver</strong> ................................................................................................ 13<br />
1.3 <strong>WinDriver</strong> ..........................................................................................................14<br />
1.4 ....................................................................................................................................14<br />
1.5 <strong>WinDriver</strong> ..................................................................................................................15<br />
1.6 <strong>WinDriver</strong> ...............................................................................................16<br />
1.7 <strong>WinDriver</strong> ...................................................................17<br />
1.8 (Evaluation Version) .....................................................................................17<br />
1.9 <strong>WinDriver</strong> ...............................................................17<br />
1.9.1 Windows 98 / Me / NT / 2000 / XP / Server 2003 / Linux Solaris.......... 17<br />
1.9.2 Windows CE ........................................................................................................ 18<br />
1.9.3 VxWorks .............................................................................................................. 18<br />
1.10 <strong>WinDriver</strong> ...........................................................................................19<br />
1.10.1 <strong>WinDriver</strong> .................................................................................... 19<br />
1.10.2 .................................................................................................. 20<br />
1.10.3 .......................................................................... 21<br />
1.10.4 .............................................................................................................. 21<br />
1.11 <strong>WinDriver</strong> ...........................................................21<br />
2 .............................................................22<br />
2.1 ....................................................................................................22<br />
3
WINDRIVER <br />
2.2 .................................................................................................22<br />
2.2.1 ..................................................................................... 22<br />
2.2.2 ......................................................................................... 23<br />
2.2.3 ......................................................................................... 24<br />
2.3 OS ...................................................................................................25<br />
2.3.1 WDM ................................................................................................... 25<br />
2.3.2 VxD ..................................................................................................... 25<br />
2.3.3 Unix .................................................................................... 26<br />
2.3.4 Linux ................................................................................... 26<br />
2.3.5 Solaris ................................................................................. 26<br />
2.4 ........................................................................................27<br />
2.5 .........................................................................................27<br />
2.6 .................................................................................................................27<br />
3 <strong>WinDriver</strong> <strong>USB</strong> ................................................................29<br />
3.1 <strong>USB</strong> ............................................................................................................................29<br />
3.2 <strong>WinDriver</strong> <strong>USB</strong> ..........................................................................................................30<br />
3.3 <strong>USB</strong> ........................................................................................................30<br />
3.4 <strong>USB</strong> ...........................................................................................31<br />
3.5 <strong>USB</strong> ....................................................................................................................32<br />
3.6 <strong>USB</strong> ........................................................................................................33<br />
3.6.1 (Control Transfer)................................................................ 33<br />
3.6.2 (Isochronous Transfer)..................................................................... 34<br />
3.6.3 (Interrupt Transfer) ...................................................................... 34<br />
3.6.4 (Bulk Transfer) ................................................................................ 34<br />
3.7 <strong>USB</strong> ................................................................................................................................35<br />
3.8 <strong>WinDriver</strong> <strong>USB</strong>.......................................................................................................................36<br />
3.9 <strong>WinDriver</strong> <strong>USB</strong> ......................................................................................38<br />
3.10 <strong>WinDriver</strong> <strong>USB</strong> ..................................................................39<br />
4 <strong>WinDriver</strong> ..........................................................40<br />
4.1 ................................................................................................................................40<br />
4.1.1 Windows 98 / Me ................................................................................................. 40<br />
4.1.2 Windows NT / 2000 / XP / Server 2003............................................................... 40<br />
4.1.3 Windows CE ........................................................................................................ 40<br />
4.1.4 Linux .................................................................................................................... 40<br />
4
4.1.5 Solaris................................................................................................................... 41<br />
4.1.6 VxWorks .............................................................................................................. 41<br />
4.2 <strong>WinDriver</strong> ...................................................................................................42<br />
4.2.1 Windows 98 / Me / NT / 2000 / XP / Server 2003 ... 42<br />
4.2.2 <strong>WinDriver</strong> CE .......................................................................... 46<br />
4.2.3 Linux <strong>WinDriver</strong> ................................................. 48<br />
4.2.4 Solaris <strong>WinDriver</strong> ............................................... 51<br />
4.2.5 DriverBuilder for VxWorks ..................................... 53<br />
4.3 .....................................................................................54<br />
4.4 .............................................................................................................55<br />
4.4.1 WindowsLinux Solaris .................................... 55<br />
4.4.2 Windows CE .................................................................... 55<br />
4.4.3 VxWorks ................................................................................................. 56<br />
4.5 <strong>WinDriver</strong> ...........................................................................56<br />
4.5.1 Windows 98 / Me / NT / 2000 / XP Server 2003 <br />
.............................................................................................................. 56<br />
4.5.2 Linux <strong>WinDriver</strong> ..................................... 59<br />
4.5.3 Solaris <strong>WinDriver</strong> ....................................... 59<br />
4.5.4 DriverBuilder for VxWorks ................................. 60<br />
5 DriverWizard ...............................................................................61<br />
5.1 DriverWizard .............................................................................................................61<br />
5.2 DriverWizard ..........................................................................................................62<br />
5.3 DriverWizard .............................................................................................................73<br />
5.3.1 .................................................................................................. 73<br />
5.3.2 .............................................................................................. 73<br />
5.3.3 <strong>WinDriver</strong> API ......................................................................... 73<br />
5.3.4 DriverWizard ........................................................................................... 74<br />
5.3.5 .................................................................................................. 74<br />
5.3.6 .............................................................. 75<br />
6 ............................................................................76<br />
6.1 <strong>WinDriver</strong> ..............................................................76<br />
6.2 DriverWizard ..........................................................77<br />
6.2.1 <strong>WinDriver</strong> ................................................... 77<br />
6.2.2 : PCI/ISA .......................................................... 78<br />
5
WINDRIVER <br />
6.2.3 : <strong>USB</strong> ................................................................ 79<br />
6.3 Windows CE ...........................................................................................79<br />
6.4 Visual Basic Delphi ...................................................................80<br />
6.4.1 DriverWizard ................................................................................... 80<br />
6.4.2 .............................................................................................................. 80<br />
6.4.3 Kernel PlugIn ....................................................................................................... 81<br />
6.4.4 .................................................................................. 81<br />
7 .......................................................................................82<br />
7.1 ...................................................................................................82<br />
7.2 Debug Monitor........................................................................................................................82<br />
7.2.1 Debug Monitor ............................... 82<br />
7.2.2 Debug Monitor ....................................... 85<br />
8 PCI <strong>USB</strong> ............................88<br />
8.1 ........................................................................................................................................88<br />
8.2 ................................................88<br />
9 .................................................................90<br />
9.1 DMA ..........................................................................................................................90<br />
9.1.1 Scatter/Gather DMA............................................................................................. 91<br />
9.1.2 Contiguous Buffer () DMA........................................................... 94<br />
9.1.3 SPARC DMA ................................................................................. 96<br />
9.2 .........................................................................................................................96<br />
9.2.1 ...................................................................................... 97<br />
9.2.2 ISA / EISA PCI ....................................................................... 98<br />
9.2.3 VxWorks ............................................................ 100<br />
9.2.4 Windows CE .................................................................................. 101<br />
9.3 <strong>USB</strong> ......................................................................................................103<br />
9.3.1 <strong>USB</strong> ............................................................................................... 103<br />
9.3.2 ................................................................................ 103<br />
9.3.3 ................................................................................... 104<br />
9.3.4 <strong>USB</strong> ............................................... 105<br />
9.3.5 .................................................................... 106<br />
9.3.6 ........................................................................... 106<br />
9.4 <strong>WinDriver</strong> .............................................................................108<br />
6
9.4.1 DriverWizard ............................................................. 108<br />
9.4.2 <strong>WinDriver</strong> API ........................................................... 109<br />
9.5 64 OS ...................................................................................................110<br />
9.5.1 64 .......................................................... 110<br />
9.5.2 64 32 111<br />
9.5.3 64 32 ......................................................... 111<br />
9.6 ..................................................................................................................111<br />
9.6.1 .................................................................................... 111<br />
9.6.2 <strong>WinDriver</strong> ............................................................ 112<br />
9.6.3 PCI ................................................................ 112<br />
9.6.4 PCI .................................................................... 113<br />
10 .............................................................114<br />
10.1 ......................................................................................................................................114<br />
10.1.1 ................................. 114<br />
10.2 .....................................................116<br />
10.2.1 ............................................. 116<br />
10.2.2 ............................................. 117<br />
10.2.3 64- .......................................................................... 117<br />
11 Kernel PlugIn ...........................................................119<br />
11.1 Kernel PlugIn ...........................................................................................................119<br />
11.2 Kernel PlugIn ...........................................................................................119<br />
11.3 ...................................................................................................................120<br />
11.4 ...........................................................................................................120<br />
11.5 <strong>WinDriver</strong> Kernel PlugIn .........................................................................................120<br />
11.5.1 ........................................................................................................ 120<br />
11.5.2 <strong>WinDriver</strong> Kernel Kernel Plugin .............................. 121<br />
11.5.3 Kernel Plugin ......................................................................... 122<br />
11.5.4 Kernel PlugIn ................................................................ 122<br />
11.6 Kernel PlugIn .......................................................................................................126<br />
11.6.1 Kernel PlugIn ................................................. 126<br />
11.6.2 Kernel PlugIn ........................................................................................ 126<br />
11.6.3 Kernel PlugIn ................ 131<br />
11.6.4 Kernel PlugIn 132<br />
11.6.5 Kernel PlugIn ..................................................................... 135<br />
7
WINDRIVER <br />
11.6.6 .................................................................................... 138<br />
12 Kernel PlugIn ..............................................................139<br />
12.1 Kernel PlugIn ........................................................................139<br />
12.2 .................................................................139<br />
12.3 Kernel PlugIn ............................................................................140<br />
12.4 Kernel PlugIn ...................................................................................141<br />
12.5 Kernel PlugIn ............................................................................141<br />
12.6 Kernel PlugIn I/O ....................................................................................142<br />
12.7 Kernel PlugIn ................................................................................143<br />
12.7.1 Windows ................................................................................ 143<br />
12.7.2 Linux ...................................................................................... 145<br />
12.7.3 Solaris .................................................................................... 146<br />
12.8 Kernel PlugIn ............................................................................147<br />
12.8.1 Windows 98/Me/NT/2000/XP/Server 2003 ........................................... 147<br />
12.8.2 Linux ..................................................................................................... 147<br />
12.8.3 Solaris .................................................................................................... 148<br />
13 .............................................................150<br />
13.1 ...........................................................150<br />
13.2 Windows 98/Me/NT/2000/XP/Server 2003 ..........................................................................150<br />
13.2.1 Windows ................................................................................ 150<br />
13.2.2 WDREG ................................................................................. 151<br />
13.2.3 windrvr6.sys INF / ................................ 155<br />
13.2.4 Kernel PlugIn / .................................. 155<br />
13.3 Linux.....................................................................................................................................156<br />
13.4 Solaris ...................................................................................................................................156<br />
14 ........................................................................157<br />
14.1 <strong>WinDriver</strong> .............................................................157<br />
14.2 Windows 98/Me/2000/XP/Server 2003 ....................................................................157<br />
14.2.1 .................................................................................... 158<br />
14.2.2 ................................ 158<br />
14.2.3 Kernel PlugIn ....................... 161<br />
14.3 Windows NT 4.0 ......................................................................................................161<br />
14.3.1 .................................................................................... 161<br />
8
14.3.2 ................................. 162<br />
14.3.3 Kernel PlugIn ........................ 162<br />
14.4 INF ...................................................................................................163<br />
14.4.1 INF ............................................ 163<br />
14.4.2 INF ................. 164<br />
14.4.3 INF ...................... 165<br />
14.5 Windows CE ............................................................................................................167<br />
14.6 Linux ........................................................................................................................168<br />
14.6.1 <strong>WinDriver</strong> Kernel .......................................................................... 168<br />
14.6.2 / <br />
............................................................................................................ 169<br />
14.6.3 Kernel Plugin ................................................................................. 169<br />
14.6.4 ............................................................................... 170<br />
14.7 Solaris ......................................................................................................................170<br />
14.8 VxWorks ..................................................................................................................171<br />
15 <strong>WinDriver</strong> <strong>USB</strong> Device ...........................................................172<br />
15.1 <strong>WinDriver</strong> <strong>USB</strong> Device ...........................................................................................172<br />
15.2 ...............................................................................174<br />
15.3 <strong>WinDriver</strong> (WDF) ...............................175<br />
15.3.1 cypress ....................................................................................... 175<br />
15.3.2 microchip ................................................................................... 176<br />
15.3.3 philips ........................................................................................ 179<br />
15.3.4 silabs .......................................................................................... 181<br />
15.3.5 <strong>WinDriver</strong> <strong>USB</strong> Device .................................... 183<br />
15.3.6 ............................................................................... 183<br />
15.4 <strong>WinDriver</strong> <strong>USB</strong> Device ............................................................................185<br />
15.4.1 Device <strong>USB</strong> ........................................................... 185<br />
15.4.2 ....................................................... 191<br />
15.4.3 ................................................................... 193<br />
15.4.4 ............................................................ 196<br />
15.4.5 <strong>USB</strong> ....................................................................... 196<br />
16 PCI Express ............................................................................197<br />
16.1 PCI Express ..............................................................................................................197<br />
16.2 <strong>WinDriver</strong> PCI Express.........................................................................................................198<br />
9
WINDRIVER <br />
<br />
1.1: <strong>WinDriver</strong> ...................................................................................................16<br />
2.1: ........................................................................................................23<br />
2.2: ............................................................................................................24<br />
2.3: ............................................................................................................25<br />
3.1: <strong>USB</strong> ............................................................................................................32<br />
3.2: <strong>USB</strong> ............................................................................................................................33<br />
3.3: ....................................................................................................35<br />
3.4: <strong>WinDriver</strong> <strong>USB</strong> ..........................................................................................38<br />
5.1: .....................................................................................................................63<br />
5.2: DriverWizard INF ...........................................................................................64<br />
5.3: DriverWizard INF <br />
().......................................................65<br />
5.4: DriverWizard INF <br />
(1 )........................................................................66<br />
5.5: <strong>USB</strong> ............................................................................................................67<br />
5.6: PCI ..........................................................................................................................68<br />
5.7: .....................................................................................................................69<br />
5.8: <strong>USB</strong> ........................................................................................................................70<br />
5.9: .............................................................................................................71<br />
5.10: ...................................................................................................72<br />
5.11: .......................................................................................................................72<br />
7.1: Debug Monitor ...........................................................................................................83<br />
7.2: Debug Options ............................................................................................................84<br />
9.2: <strong>USB</strong> ......................................................................................................104<br />
9.3: .......................................................................................................................108<br />
9.4: ...............................................................................................................................109<br />
9.5: <strong>USB</strong> ......................................................................................................................109<br />
11.1: KernelPlugIn ...........................................................................................................121<br />
11.2: Kernel PlugIn ..........................................................................136<br />
11.3: Kernel PlugIn ..............................................................................137<br />
10
15.1: ............................................................185<br />
15.2: .............................................................................................................186<br />
15.3: Microchip – ......................................................................................186<br />
15.4: ....................................................................................187<br />
15.5: .................................................................................................................187<br />
15.6: ..........................................................188<br />
15.7: Philips PDI<strong>USB</strong>D12 – ......................................189<br />
15.8: Microchip PIC18F4550 Mass Storage – .................................................189<br />
15.9: EZ-<strong>USB</strong> .................................................................................191<br />
11
WINDRIVER <br />
1 <br />
<strong>WinDriver</strong> <br />
<strong>WinDriver</strong> <br />
<br />
1.1 <br />
<strong>WinDriver</strong> <br />
<strong>WinDriver</strong> <br />
<strong>WinDriver</strong> <br />
<br />
<strong>WinDriver</strong> Windows 98 / Me / NT / 2000 / XP / CE / CE.NET / Server 2003LinuxSolaris <br />
VxWorks Windows / 98 / Me / NT / 2000 / XP / Server 2003 <br />
PCI / PCMCIA / CardBus / ISA / EISA /<br />
CompactPCI / PCI Express (PCMCIA Windows 2000/XP/Server 2003 ) <br />
<strong>USB</strong> <strong>WinDriver</strong> <br />
<strong>WinDriver</strong> <br />
<br />
DriverWizard <br />
<strong>WinDriver</strong> <strong>USB</strong> PCI PLXAlteraMarvellAMCC<br />
QuickLogicXilinxCypressSTMicroelectronicsTexas InstrumentsSilicon Laboratories<br />
National Semiconductors <br />
8 10 <strong>WinDriver</strong> Kernel PlugIn <br />
<strong>WinDriver</strong> Kernel PlugIn <br />
<br />
Kernel PlugIn <br />
11 12 <br />
<strong>WinDriver</strong> () <br />
(http://www.xlsoft.<strong>com</strong>/) Jungo (http://www.jungo.<strong>com</strong>/) <br />
<br />
12
1.2 <br />
1 WINDRIVER <br />
1.2.1 <br />
(WindowsLinux Solaris) <br />
( ) <br />
<br />
( Ring 0) <br />
:<br />
1. (98 / Me / NT / XP/ CE/ CE.NET / Server 2003Linux<br />
Solaris VxWorks) <br />
2. <br />
3. (DDKETKDDIDKI ) <br />
<br />
4. <br />
5. <br />
<br />
6. 1 4 <br />
<br />
1.2.2 <strong>WinDriver</strong> <br />
: <strong>WinDriver</strong> PCI / PCMCIA / CardBus / ISA / EISA / CompactPCI / PCI Express<br />
<strong>USB</strong> <br />
<strong>WinDriver</strong> MSDEVVisual C/C++MSDEV .NETBorland C++ Builder<br />
Borland DelphiVisual Basic 6.0MS eMbedded Visual C++MS Platform Builder C++GCC 32 <br />
<strong>WinDriver</strong> <br />
<br />
<br />
: <strong>WinDriver</strong> Windows 98 / Me / NT / 2000 / XP / CE /<br />
CE.NET / Server 2003LinuxSolaris VxWorks <br />
<br />
: DriverWizard <br />
<br />
<br />
DriverWizard <br />
<br />
13
WINDRIVER <br />
- <strong>WinDriver</strong> API <br />
<strong>WinDriver</strong> <strong>WinDriver</strong><br />
Kernel PlugIn<strong>WinDriver</strong> Kernel PlugIn <strong>WinDriver</strong> <br />
(<br />
I/O ) <strong>WinDriver</strong> Kernel PlugIn <br />
Kernel PlugIn <br />
<br />
<br />
<br />
11 <br />
OS <br />
Windows CE VxWorks <br />
Kernel PlugIn <br />
[9.2.3] Kernel PlugIn<br />
VxWorks <strong>WinDriver</strong> <br />
1.3 <strong>WinDriver</strong> <br />
PCI <strong>WinDriver</strong> Kernel PlugIn <br />
<br />
Kernel PlugIn 100,000 <strong>USB</strong> <br />
<strong>USB</strong> 1.1 <strong>USB</strong> 2.0 <br />
<br />
1.4 <br />
<strong>WinDriver</strong> <br />
:<br />
• DriverWizard <br />
• DriverWizard <strong>WinDriver</strong> <br />
1 PCI <br />
<strong>USB</strong> 8 <br />
<br />
• <br />
<br />
Windows (Windows CE ) LinuxSolarisVxWorks (<br />
) <br />
( Windows 98/Me/NT/2000/XP/Server 2003 <br />
OS )<br />
14
1.5 <strong>WinDriver</strong> <br />
1 WINDRIVER <br />
• <br />
• Kernel PlugIn <br />
• DriverWizard <br />
DriverWizard <br />
• DriverWizard CC#Delphi (Pascal) Visual Basic <br />
<br />
• PCI / PCMCIA / CardBus /ISA / EISA / CompactPCI / PCI Express <strong>USB</strong> <br />
<br />
• PLX / Altera / Marvell / AMCC / Xilinx PCI <br />
PCI <br />
• <strong>USB</strong> CypressMicrochipPhilipsTexas InstrumentsSilicon<br />
Laboratories <strong>USB</strong> <br />
• Windows 98 / Me / NT / 2000 / XP / Server 2003 <br />
<br />
• Windows 98 / Me / NT / 2000 / XP / CE.NET / Server 2003Linux<br />
Solaris VxWorks <br />
• MSDEVVisual C/C++MSDEV .NETBorland C++ BuilderBorland DelphiVisual Basic 6.0<br />
MS eMbedded Visual C++MS Platform Builder C++GCC <br />
<br />
• DDKETKDDI <br />
• I/ODMA <br />
• CPU PCI (PCI / PCMCIA / CardBus / ISA / EISA /<br />
CompactPCI / PCI Express) <br />
• 64 PCI <br />
• <br />
• <br />
• CC#DelphiVisual Basic 6.0 <br />
• WHQL (Windows).<br />
• 2 ()<br />
15
WINDRIVER <br />
• <br />
1.6 <strong>WinDriver</strong> <br />
<strong>WinDriver</strong> <br />
<br />
<br />
( YourApp.EXE )<br />
<br />
<strong>WinDriver</strong><br />
<br />
Kernel PlugIn<br />
(SYS, VXD)<br />
<strong>WinDriver</strong><br />
Kernel PlugIn<br />
<br />
<strong>WinDriver</strong> <br />
windrvr6.*<br />
(VXD, SYS, DLL, 0)<br />
<br />
<br />
<br />
1.1: <strong>WinDriver</strong> <br />
<strong>WinDriver</strong> <br />
(windrvr.h) <strong>WinDriver</strong> <br />
<strong>WinDriver</strong> <br />
<strong>WinDriver</strong> <br />
<br />
<br />
() <strong>WinDriver</strong> Kernel PlugIn <br />
<strong>WinDriver</strong> <br />
<br />
Kernel PlugIn 11 Windows<br />
CE VxWorks Kernel PlugIn <br />
<br />
<br />
16
1 WINDRIVER <br />
1.7 <strong>WinDriver</strong> <br />
<strong>WinDriver</strong> Windows 98 / Me / NT / 2000 / XP / CE / CE.NET / Server 2003SolarisLinux VxWorks <br />
<br />
Windows 98 / Me / NT / 2000 / XP / Server 2003 <br />
1 <strong>WinDriver</strong> <br />
<br />
1.8 (Evaluation Version) <br />
<br />
<br />
• <strong>WinDriver</strong> <br />
• DriverWizard <br />
<br />
• LinuxSolarisVxWorks CE 60 <br />
<br />
• Windows 30 <br />
• E (Evaluation Version) <br />
1.9 <strong>WinDriver</strong> <br />
1.9.1 Windows 98 / Me / NT / 2000 / XP / Server 2003 / Linux <br />
Solaris<br />
1. DriverWizard 5 DriverWizard<br />
<br />
2. <strong>WinDriver</strong> <br />
8 <br />
<br />
3. DriverWizard <br />
<br />
4. <br />
5. 10 <br />
<br />
17
WINDRIVER <br />
: DriverWizard read write <br />
Listen<strong>USB</strong> <br />
<br />
1.9.2 Windows CE<br />
1. Windows <br />
2. DriverWizard <br />
3. DriverWizard <br />
4. DriverWizard <br />
5. Visual C++ Platform Builder<br />
*.pbp <br />
6. CE <br />
<br />
: Windows DriverWizard <br />
DriverWizard <br />
<br />
<br />
1.9.3 VxWorks<br />
1. Windows <br />
2. Windows DriverWizard 5 DriverWizard<br />
<br />
3. DriverWizard Tornado makefile <br />
<br />
4. Tornado <br />
5. Tornado 32 <br />
18
1 WINDRIVER <br />
1.10 <strong>WinDriver</strong> <br />
• <strong>WinDriver</strong> CD<br />
• <br />
• API <br />
• <br />
• <br />
• 2 (FAX)<br />
• <strong>WinDriver</strong> <br />
1.10.1 <strong>WinDriver</strong> <br />
• <strong>WinDriver</strong> (<strong>WinDriver</strong>/include/): <br />
−<br />
−<br />
−<br />
−<br />
−<br />
−<br />
−<br />
windrvr.h: <strong>WinDriver</strong> API <br />
wdu_lib.h: <strong>USB</strong> API <strong>WinDriver</strong> <strong>USB</strong> (WDU) <br />
<br />
wdc_lib.h and wdc_defs.h: PCI/PCMCIA/CardBus/ISA/ EISA/CompactPCI/PCI<br />
Express API <strong>WinDriver</strong> Card (WDC) <br />
<br />
windrvr_int_thread.h: <br />
<br />
windrvr_events.h: PnP <br />
utils.h: <br />
status_strings.h: <strong>WinDriver</strong> <br />
API <br />
• DriverWizard ([] - [] - [<strong>WinDriver</strong>] - [Wizard] - [DriverWizard] <br />
): <br />
( 5 DriverWizard)<br />
• Graphical Debugger ([] - [] - [<strong>WinDriver</strong>] - [util] - [wddebug_gui] <br />
): <br />
<strong>WinDriver</strong> Windows CE VxWorks GUI <br />
(<strong>WinDriver</strong>/util/wddebug) <br />
Debug Monitor [7.2] <br />
19
WINDRIVER <br />
• <strong>WinDriver</strong> (<strong>WinDriver</strong>/redist/): <br />
• <strong>WinDriver</strong> Kernel PlugIn: Kernel PlugIn 11 <br />
<br />
• : <strong>WinDriver</strong> <strong>WinDriver</strong>/docs/ <br />
<br />
1.10.2 <br />
• pci_dump.exe (<strong>WinDriver</strong>/util/pci_dump.exe): PCI <br />
PCI <br />
• pci_diag.exe (<strong>WinDriver</strong>/util/pci_diag.exe) : PCI PCI I/O <br />
PCI <br />
• pci_scan.exe (<strong>WinDriver</strong>/util/pci_scan.exe): PCI <br />
<br />
• pcmcia_diag.exe (<strong>WinDriver</strong>/util/pcmcia_diag.exe): PCMCIA <br />
PCMCIA I/O PCMCIA <br />
<br />
• pcmcia_scan.exe (<strong>WinDriver</strong>/util/pcmcia_scan.exe): PCMCIA <br />
<br />
• usb_diag.exe (<strong>WinDriver</strong>/util/usb_diag.exe): <strong>USB</strong> <br />
<strong>USB</strong> <br />
<br />
CE <br />
• \REDIST\...\X86EMU\WINDRVR_CE_EMU.DLL: Windows CE X86 HPC <br />
Windriver DLL<br />
• \REDIST\...\X86EMU\WINDRVR_CE_EMU.LIB: Windows CE X86 HPC <br />
<strong>WinDriver</strong> <br />
<br />
20
1 WINDRIVER <br />
1.10.3 <br />
<strong>WinDriver</strong> API PCI ( 8 <br />
) <br />
• PLX 903090509052905490809056 9656 – <strong>WinDriver</strong>/plx <br />
<br />
• Marvell GT64 - <strong>WinDriver</strong>/marvell/gt64 <br />
• AMCC S5933 - <strong>WinDriver</strong>/amcc <br />
• Altera pci_dev_kit - <strong>WinDriver</strong>/altera/pci_dev_kit/ <br />
• Xilinx VirtexII - <strong>WinDriver</strong>/xilinx/VirtexII <br />
<strong>WinDriver</strong> API <strong>USB</strong> ( 8 <br />
) <br />
• Cypress EZ-<strong>USB</strong> - <strong>WinDriver</strong>/cypress/ <br />
• Microchip PIC18F4550 - <strong>WinDriver</strong>/microchip/pic18f4550/ <br />
• Philips PDI<strong>USB</strong>D12 - <strong>WinDriver</strong>/pdiusbd12/ <br />
• Texas Instruments T<strong>USB</strong>3410T<strong>USB</strong>3210T<strong>USB</strong>2136T<strong>USB</strong>5052: - <strong>WinDriver</strong>/ti/ <br />
<br />
• Silicon Laboratories C8051F320 <strong>USB</strong> - <strong>WinDriver</strong>/silabs/ <br />
1.10.4 <br />
<strong>WinDriver</strong> <br />
<strong>WinDriver</strong> API <br />
• <strong>WinDriver</strong>/samples/ - C <br />
[1.10.2] <br />
• <strong>WinDriver</strong>\csharp.net <strong>WinDriver</strong>\vb.net - .NET C# (Windows)<br />
• <strong>WinDriver</strong>/delphi/samples/ - Delphi (Pascal) (Windows)<br />
• <strong>WinDriver</strong>/vb/samples/ - Visual Basic (Windows)<br />
1.11 <strong>WinDriver</strong> <br />
<strong>WinDriver</strong> <strong>WinDriver</strong> <br />
<br />
(<strong>WinDriver</strong>/docs/license.pdf) <br />
21
WINDRIVER <br />
2 <br />
<br />
<br />
<br />
<strong>WinDriver</strong> API <br />
<br />
2.1 <br />
<br />
OS <br />
<br />
<br />
<br />
<br />
<br />
<br />
2.2 <br />
3 <br />
<br />
2.2.1 <br />
<br />
1 <br />
IO <br />
(IOCTL) DDKETKDDI/DKI <br />
<br />
22
2 <br />
<br />
<br />
<br />
<br />
HW<br />
2.1: <br />
Windows UNIX <br />
<br />
2.2.2 <br />
IO <br />
<br />
/ / <br />
/ <br />
Windows <br />
UNIX OS <br />
23
WINDRIVER <br />
<br />
<br />
<br />
<br />
<br />
<br />
HW<br />
2.2.3 <br />
2.2: <br />
add-on <br />
<br />
<br />
HID <br />
<br />
Windows NT (<br />
2000) Windows NT / 2000 / XP Server 2003 <br />
Windows NT / 2000 / XP / Server 2003 <br />
() <br />
<br />
NDIS NDIS <br />
NT <br />
Windows NT <br />
<br />
NDIS <br />
<br />
24
2 <br />
<br />
<br />
NDIS <br />
<br />
<br />
<br />
HW<br />
2.3: <br />
2.3 OS <br />
2.3.1 WDM <br />
WDM (Windows Driver Model) Windows NT Windows 98 OS <br />
Windows NT Windows NT / 2000 / XP / Server 2003 Windows 98 <br />
Windows 98 Windows Me WDM OS <br />
DMA<br />
Plug-and-Play (Pnp) <br />
WDM <br />
PnP <br />
2.3.2 VxD <br />
VxD Windows 95 / 98 / Me Virtual Device Drivers .vxd <br />
VxDs VxD VxD <br />
OS VxD <br />
<br />
25
WINDRIVER <br />
2.3.3 Unix <br />
Unix 3 1 :<br />
(Char) <br />
<br />
Unix <br />
<br />
Unix <br />
<br />
<br />
Unix <br />
1 <br />
2.3.4 Linux <br />
Linux Unix <br />
Linux <br />
Linux <br />
<br />
Unix <br />
Linux <br />
Linux <br />
Linux <br />
<br />
<br />
<br />
Linux <br />
Unix Linux <br />
<br />
2.3.5 Solaris <br />
Solaris Linux Unix <br />
Linux Solaris <br />
<br />
Unix Linux Solaris <br />
<br />
26
2 <br />
2.4 <br />
C main() main <br />
1 Windows DriverEntry() <br />
Linux init_module() OS <br />
<br />
<br />
DriverEntry() / init_module() <br />
OS <br />
OS Windows <br />
dispatch routines Linux file operations <br />
OS <br />
2.5 <br />
OS OS Windows <br />
INF INF <br />
DriverEntry() OS <br />
INF INF <br />
<br />
Linux init_module() Init_module()<br />
<br />
OS <br />
2.6 <br />
<br />
<br />
API (Application Program Interface) <br />
CreateFile() (Windows ) open()<br />
(Linux ) read <br />
write ReadFile() WriteFile() (Windows <br />
) read() write() (Linux ) DeviceIoControl()<br />
(Windows ) ioctl() (Linux ) I/O <br />
I/O :<br />
• () <br />
• IOCTL <br />
• <br />
27
WINDRIVER <br />
IOCTL <br />
Windows <br />
I/O Request Packet (IRP) I/O Manager <br />
<br />
<br />
28
3 WINDRIVER <strong>USB</strong> <br />
3 <br />
<strong>WinDriver</strong> <strong>USB</strong> <br />
<strong>USB</strong> <strong>WinDriver</strong> <strong>USB</strong> <br />
<br />
: <strong>WinDriver</strong> <strong>USB</strong> <strong>USB</strong> <br />
<strong>WinDriver</strong> <strong>USB</strong> <br />
<strong>USB</strong> <strong>WinDriver</strong> <strong>USB</strong> Device 15 <br />
<br />
3.1 <strong>USB</strong> <br />
<strong>USB</strong> (Universal Serial Bus) PC <br />
IntelCompaqMicrosoftNEC PC <br />
1995 <strong>USB</strong> <br />
PC <br />
<br />
<strong>USB</strong> <strong>USB</strong> 127 ()<br />
<strong>USB</strong> Plug-and-Play <br />
<strong>USB</strong> 1.1 <br />
<strong>USB</strong> 1.5Mbps () <strong>USB</strong> 12Mbps (<br />
) PC <br />
5m <strong>USB</strong> <br />
( 500mA)<br />
<strong>USB</strong>2.0 <strong>USB</strong> 1.1 () 40 480Mbs () <br />
<strong>USB</strong> 2.0 <strong>USB</strong> 1.1 <br />
<br />
<strong>USB</strong>2.0 PC <br />
<br />
<strong>USB</strong>2.0 Web <br />
<br />
<strong>USB</strong> <br />
29
WINDRIVER <br />
3.2 <strong>WinDriver</strong> <strong>USB</strong> <br />
<strong>USB</strong> <strong>USB</strong> <strong>WinDriver</strong> <strong>USB</strong> <br />
<br />
• <br />
• <br />
• <br />
• Kb/s Mb/s <br />
• <br />
• ()<br />
• <strong>USB</strong> 2.0 () OS 480 Mb/s <strong>USB</strong> 1.1 () 12<br />
Mb/s <br />
• ()<br />
• : <br />
• : <br />
<br />
• PC <br />
• <br />
• <br />
• <br />
• <br />
3.3 <strong>USB</strong> <br />
<strong>USB</strong> :<br />
<strong>USB</strong> :<strong>USB</strong> <br />
<strong>USB</strong> <strong>USB</strong> <br />
<strong>USB</strong> <strong>USB</strong> <br />
<strong>USB</strong> <br />
<strong>USB</strong> : <strong>USB</strong> 1 <strong>USB</strong> <strong>USB</strong> <strong>USB</strong> <br />
<br />
30
3 WINDRIVER <strong>USB</strong> <br />
<strong>USB</strong> : <strong>USB</strong> <br />
<strong>USB</strong> 1<br />
<strong>USB</strong> <br />
<br />
1 <strong>USB</strong> <br />
3.4 <strong>USB</strong> <br />
<strong>USB</strong> <br />
<br />
1 ()<br />
2 2 <strong>USB</strong> (1 (<br />
) On-The-Go (OTG) )<br />
<strong>USB</strong> <br />
<br />
<strong>USB</strong> <br />
<strong>USB</strong> <br />
<strong>USB</strong> <br />
3 <strong>USB</strong> () 1 <br />
( 0) 15 <br />
IN OUT 30 <br />
<br />
<br />
<br />
<strong>USB</strong> <br />
<br />
2 <br />
<br />
<strong>USB</strong> <br />
31
WINDRIVER <br />
<br />
<strong>USB</strong><br />
<br />
<br />
<br />
<br />
<br />
<br />
3.1: <strong>USB</strong> <br />
3.5 <strong>USB</strong> <br />
<strong>USB</strong> 2 <br />
<br />
• <br />
3 <br />
• <br />
<br />
(<br />
Pipe 0 ) <br />
( ) <br />
<br />
3.2 <strong>WinDriver</strong> DriverWizard ( 5 ) <br />
() 6 () <strong>USB</strong> <br />
<br />
32
3 WINDRIVER <strong>USB</strong> <br />
3.2: <strong>USB</strong> <br />
9 <br />
<br />
3.6 <strong>USB</strong> <br />
<strong>USB</strong> () <br />
<strong>USB</strong> 4 <br />
<br />
<strong>USB</strong> 4 :<br />
3.6.1 (Control Transfer)<br />
<br />
<br />
<strong>USB</strong> <br />
1 ( ) <br />
<br />
<br />
<br />
8 81632 64 <br />
64 <br />
33
WINDRIVER <br />
3.6.2 (Isochronous Transfer)<br />
<br />
<br />
<br />
<br />
<strong>USB</strong> <strong>USB</strong> <br />
<br />
<br />
<br />
3.6.3 (Interrupt Transfer)<br />
<br />
<br />
<br />
<br />
8 64 <br />
1,024 <br />
3.6.4 (Bulk Transfer)<br />
<br />
<br />
<br />
<br />
<br />
<strong>USB</strong> <br />
() <br />
2 <br />
81632 64 512 <br />
<br />
34
3 WINDRIVER <strong>USB</strong> <br />
3.7 <strong>USB</strong> <br />
<strong>USB</strong> () <br />
<strong>USB</strong> <strong>USB</strong> <br />
<strong>USB</strong> <strong>USB</strong> 9 (<br />
http://www.usb.org )<br />
<strong>USB</strong> 4 :<br />
• <br />
• <br />
• ()<br />
• <br />
3.3 <strong>USB</strong> <br />
<br />
()<br />
3.3: <br />
: <br />
(HID <br />
) ID ID <br />
<strong>USB</strong> <br />
35
WINDRIVER <br />
: <strong>USB</strong> <br />
( Wakeup<br />
)ISDN 128Kbps <br />
64Kbps <br />
: <br />
<br />
<br />
<br />
<br />
<br />
: <br />
<br />
<br />
<br />
() <br />
<br />
<strong>WinDriver</strong> <strong>USB</strong> DriverWizard <strong>USB</strong> <strong>USB</strong> <br />
<strong>USB</strong> <br />
<br />
<strong>WinDriver</strong> <br />
<strong>WinDriver</strong> <br />
3.8 <strong>WinDriver</strong> <strong>USB</strong><br />
<strong>WinDriver</strong> <strong>USB</strong> <strong>USB</strong> OS <strong>USB</strong> <br />
<strong>WinDriver</strong> <strong>USB</strong> DDK (Microsoft Driver<br />
Development Kit) WDM (Win32 ) <strong>USB</strong> <br />
<br />
<strong>WinDriver</strong> <strong>USB</strong> Windows 98Windows MeWindows 2000 Windows XP<br />
Windows Server 2003 <strong>WinDriver</strong> <strong>USB</strong> <br />
(Linux Windows CE ) <br />
<strong>WinDriver</strong> <strong>USB</strong> <br />
Web (http://www.xlsoft.<strong>com</strong>/)<br />
<strong>WinDriver</strong> <strong>USB</strong> <strong>USB</strong> <strong>WinDriver</strong> <strong>USB</strong><br />
<strong>USB</strong> <br />
<strong>WinDriver</strong> <strong>USB</strong> DriverWizard <br />
DriverWizard <br />
<strong>USB</strong> <br />
<br />
<br />
36
3 WINDRIVER <strong>USB</strong> <br />
DriverWizard CC#Visual Basic .NETDelphi Visual Basic<br />
<strong>WinDriver</strong> <strong>USB</strong> <br />
API <strong>WinDriver</strong> <strong>USB</strong> API <strong>USB</strong> <br />
<strong>USB</strong> DriverWizard<br />
<strong>WinDriver</strong> <strong>USB</strong> API <br />
<br />
<br />
DriverWizard <strong>WinDriver</strong> .INF <br />
.INF <strong>WinDriver</strong> <strong>USB</strong> <br />
.INF 14.4.1 <br />
DriverWizard .INF 5.2 3 <br />
<br />
<strong>WinDriver</strong> <strong>USB</strong> <br />
(MSDEVVisual C/C++MSDEV .NETBorland C++ BuilderBorland DelphiVisual<br />
Basic 6.0MS eMbedded Visual C++MS Platform Builder C++GCC ) <br />
37
WINDRIVER <br />
3.9 <strong>WinDriver</strong> <strong>USB</strong> <br />
<br />
<strong>WinDriver</strong><br />
OS <br />
<br />
<strong>WinDriver</strong> API<br />
<br />
Your App.EXE<br />
<br />
Low-level API<br />
High-level<br />
API<br />
<strong>WinDriver</strong> <br />
<br />
<br />
<strong>WinDriver</strong>6<br />
<strong>USB</strong> <br />
<strong>USB</strong>D<br />
<br />
<strong>USB</strong> <br />
<br />
OHCI <br />
UHCI <br />
<br />
<br />
<br />
HCD<br />
<br />
<br />
<br />
<br />
<br />
<br />
3.4: <strong>WinDriver</strong> <strong>USB</strong> <br />
<strong>WinDriver</strong> <strong>USB</strong> API <br />
<strong>WinDriver</strong> <br />
<strong>WinDriver</strong> IOCTL <br />
<strong>WinDriver</strong> <strong>USB</strong> <br />
<br />
38
3 WINDRIVER <strong>USB</strong> <br />
<strong>USB</strong> <strong>USB</strong> 2 <br />
<strong>USB</strong> (<strong>USB</strong> (<strong>USB</strong>D) <strong>USB</strong> ) <br />
HCD HCD <strong>USB</strong>D <br />
HCD <strong>USB</strong>D <br />
HCD <br />
HCD <strong>USB</strong>D<br />
<strong>USB</strong> <strong>USB</strong> <br />
<strong>USB</strong>D ( ) <strong>USB</strong> (<strong>USB</strong>DI) <br />
<strong>USB</strong>D <strong>USB</strong> <br />
(HCDI) HCD <br />
<br />
<strong>USB</strong> <br />
<br />
<strong>USB</strong>D <br />
<br />
<strong>WinDriver</strong> <strong>USB</strong> <strong>WinDriver</strong> <strong>USB</strong><br />
API <br />
<br />
3.10 <strong>WinDriver</strong> <strong>USB</strong> <br />
<strong>WinDriver</strong> <strong>USB</strong> ( <strong>USB</strong> <br />
) NDIS SCSI <strong>USB</strong>-<br />
<strong>USB</strong> <br />
KernelDriver <strong>USB</strong> <br />
KernelDriver <strong>USB</strong> <strong>WinDriver</strong> <strong>USB</strong> <br />
39
WINDRIVER <br />
4 <br />
<strong>WinDriver</strong> <br />
<strong>WinDriver</strong> <br />
<br />
4.1 <br />
4.1.1 Windows 98 / Me<br />
• 32 x86 <br />
• CVisual Basic Delphi 32 <br />
4.1.2 Windows NT / 2000 / XP / Server 2003<br />
• 32 64 (x64: AMD64 EM64T) x86 <br />
• C.NET, Visual Basic Delphi <br />
• Windows NT: Service Pack 3 Service Pack 6 <br />
4.1.3 Windows CE<br />
• An x86 / MIPS / ARM Windows CE 4.x - 5.0 (.NET) <br />
• Windows NT / 2000 / XP / Server 2003 <br />
• Microsoft eMbedded Visual C++ SDK<br />
<br />
Microsoft Platform Builder BSP (Board Support<br />
Package)<br />
4.1.4 Linux<br />
• Linux 2.2.x2.4.x 2.6.x 32 x86 <br />
<br />
Linux 2.4.x 2.6.x 64 x86 (AMD64 <br />
EM64T (x86_64)) Itanium / Itanium 2 (IA64) <br />
<br />
Linux 2.4.x 2.6.x 32 PowerPC <br />
40
4 WINDRIVER <br />
• GCC <br />
: GCC <br />
• C 32 64- () <br />
– <br />
• PC: glibc2.3.x<br />
• <strong>WinDriver</strong> GUI (: DriverWizard [5]Debug Monitor [7.2]) <br />
libstdc++.so.5<br />
4.1.5 Solaris<br />
• Solaris 8 / 9 / 10 / OpenSolaris<br />
: Solaris 8 3 (http://www.sun.<strong>com</strong>) <br />
• Sparc 64 32 <br />
<br />
Intel x86 32 <br />
• C (GCC ) 32 <br />
• Intel x86 Solaris 2.6 / 7.0 32 <strong>WinDriver</strong> v5.22 <br />
: GCC libgcc <br />
http://www.sunfreeware.<strong>com</strong><br />
libgcc LD_LIBRARY_PATH :<br />
LD_LIBRARY_PATH= /usr/local/lib:/usr/local/lib/sparcv9<br />
4.1.6 VxWorks<br />
• VxWorks 5.4<br />
• Windows <br />
• Tornado 2.0 IDE<br />
• : DriverBuilder (VxWorks <strong>WinDriver</strong> ) <br />
CPU / BSP (Board Support Package) BSP <br />
<br />
URL :<br />
http://www.xlsoft.<strong>com</strong>/jp/products/windriver/db-vxworks.html<br />
BSP Wind River System <br />
<br />
41
WINDRIVER <br />
4.2 <strong>WinDriver</strong> <br />
<strong>WinDriver</strong> CD <strong>WinDriver</strong> CD <br />
Windows 98 / Me / NT / 2000 / XP / Server 2003 Windows CE <strong>WinDriver</strong> <br />
CD CD <br />
<strong>WinDriver</strong> (Linux\Wince\ ) <br />
4.2.1 Windows 98 / Me / NT / 2000 / XP / Server 2003 <br />
<br />
: <strong>WinDriver</strong> Windows 98 / Me / NT / 2000 / XP / Server 2003 <br />
<br />
1. <strong>WinDriver</strong> CD CD-ROM (<strong>WinDriver</strong> CD <br />
<strong>WinDriver</strong> <br />
(WDxxx.EXE (xxx )WD800.EXE) <br />
3 )<br />
2. <br />
WDxxx.EXE [Install <strong>WinDriver</strong>] <br />
<br />
3. [Yes] <br />
<br />
4. <strong>WinDriver</strong> <br />
5. [Setup Type] :<br />
• Typical – <strong>WinDriver</strong> (<strong>WinDriver</strong> <br />
API)<br />
• Compact – <strong>WinDriver</strong> <br />
• Custom – <strong>WinDriver</strong> <br />
6. <br />
7. <br />
<strong>WinDriver</strong> WD_BASEDIR <strong>WinDriver</strong><br />
DriverWizard [ 5 ] <br />
project make include <br />
Kernel PlugIn makefile <br />
<strong>WinDriver</strong> WD_BASEDIR <br />
WD_BASEDIR <br />
:<br />
42
4 WINDRIVER <br />
1. [] [] - [] - [ ] - [] <br />
[] <br />
2. [] [] <br />
3. [] WD_BASEDIR [] <br />
<br />
4. [] [] <strong>WinDriver</strong> <br />
[OK] [] [<br />
] [OK] <br />
:<br />
<strong>WinDriver</strong> <br />
<br />
1. [] [] - [<strong>WinDriver</strong>] - [DriverWizard] <br />
DriverWizard <br />
2. [File] [Register <strong>WinDriver</strong>] [License Information] <br />
<br />
3. [Cancel license registration]<br />
<br />
4. [Please enter your license string] <br />
[Activate license] <br />
<br />
5. <br />
:<br />
• WDC_DriverOpen() <br />
• WD_License() ( WDC_xxx API <br />
WD_xxx API )<br />
• WDU_Init() <br />
<br />
<br />
43
WINDRIVER <br />
: [<strong>WinDriver</strong> Wizard] [File] <br />
[Register <strong>WinDriver</strong>] <br />
<br />
<br />
<br />
<strong>WinDriver</strong> <br />
<strong>WinDriver</strong> <strong>WinDriver</strong> <br />
WD_License <br />
Register<strong>WinDriver</strong>() main() WinMain() <br />
void Register<strong>WinDriver</strong>()<br />
{<br />
44
HANDLE hWD;<br />
WD_LICENSE lic;<br />
4 WINDRIVER <br />
}<br />
hWD = WD_Open();<br />
if (hWD!=INVALID_HANDLE_VALUE)<br />
{<br />
// <br />
strcpy(lic.cLicense, "12345abcde12345.Company Name");<br />
WD_License(hWD, &lic);<br />
WD_Close(hWD);<br />
}<br />
<br />
<strong>WinDriver</strong> <br />
<strong>WinDriver</strong> <br />
<br />
() <br />
<br />
(/ <br />
) <br />
Jungo (DriverWizard Your registration<br />
code) <br />
:<br />
108 - 0014<br />
5 - 1 - 9 4F<br />
<br />
: 03 - 5440 - 7875 Fax: 03 - 5440 - 7876<br />
E-mail: xlsoftkk@xlsoft.<strong>com</strong><br />
45
WINDRIVER <br />
4.2.2 <strong>WinDriver</strong> CE <br />
4.2.2.1 CE <strong>WinDriver</strong> <br />
:<br />
Windows CE Platform Builder WinCE <br />
<br />
Windows CE Microsoft <br />
<br />
1. Microsoft Platform Builder <br />
2. [Build] [Open Build Release Directory] <br />
3. <strong>WinDriver</strong> CE <strong>WinDriver</strong>\redist\TARGET_CPU\windrvr6.dll <br />
%_FLATRELEASEDIR% <br />
4. <strong>WinDriver</strong>\samples\wince_install\PROJECT_WD.REG <br />
%_FLATRELEASEDIR% PROJECT.REG <br />
5. <strong>WinDriver</strong>\samples\wince_install\PROJECT_WD.BIB <br />
%_FLATRELEASEDIR% PROJECT.BIB <br />
<strong>WinDriver</strong> CE (WINDRVR6.DLL) Windows CE <br />
(NK.BIN) <br />
<br />
CESH/PPSH WINDRVR6.DLL <br />
<br />
6. [Build] [Make Image] [NK.BIN] <br />
7. <br />
([Target] [Download / Initialize] <br />
)<br />
8. CE <strong>WinDriver</strong> CE <br />
<br />
9. <strong>WinDriver</strong> CE <br />
( 4.4 <br />
)<br />
46
4 WINDRIVER <br />
4.2.2.2 Windows CE <br />
<strong>WinDriver</strong> :<br />
: WinCE <br />
ready-made WinCE Microsoft eMbedded Visual C++ <br />
<br />
1. <strong>WinDriver</strong> CD Windows CD <br />
2. <br />
3. CD WINCE\ CD_SETUP.EXE <br />
<strong>WinDriver</strong> <br />
4. <strong>WinDriver</strong> CE <strong>WinDriver</strong>\redist\TARGET_CPU\windrvr6.dll<br />
CE WINDOWS\ <br />
5. CE Windows CE <br />
(ceregedt.exe) Pocket Resistry Editor (pregedt.exe) <strong>WinDriver</strong> CE<br />
<br />
<strong>WinDriver</strong>\samples\wince_install\PROJECT_WD.REG <br />
<br />
6. CE <strong>WinDriver</strong> CE <br />
suspend/resume ( CE<br />
) <br />
7. <strong>WinDriver</strong> CE <br />
<br />
4.2.2.3 Windows CE <br />
<strong>WinDriver</strong> WD_BASEDIR <strong>WinDriver</strong> <br />
DriverWizard [ 5 ] <br />
project make include <br />
Kernel PlugIn makefile <br />
<strong>WinDriver</strong> WD_BASEDIR <br />
WD_BASEDIR <br />
:<br />
1. [] [] - [] - [ ] - [] <br />
[] <br />
2. [] [] <br />
3. [] WD_BASEDIR [] <br />
<br />
47
WINDRIVER <br />
4. [] [] <strong>WinDriver</strong> <br />
[OK] [] [<br />
] [OK] <br />
<strong>WinDriver</strong> Windows 98/Me/2000/XP/Server 2003 PC <br />
Windows CE WD_BASEDIR <br />
4.2.3 Linux <strong>WinDriver</strong> <br />
4.2.3.1 <br />
Linux <br />
<strong>WinDriver</strong> windrvr6.o/.ko <br />
windrvr6.o/.ko Linux <br />
<br />
<strong>WinDriver</strong> for Linux Linux versions.h <br />
:<br />
Linux <br />
• Linux [Custom] <br />
<br />
• Linux Linux <br />
/usr/src 'linux' <br />
Linux <br />
<br />
version.h <br />
• version.h Linux <br />
version.h <br />
/usr/src/linux/include/linux/ <br />
:<br />
1. 'make xconfig' <br />
2. 'Save and Exit' <br />
3. 'make dep' <br />
<strong>WinDriver</strong> GUI (: DriverWizard [ 5 ]Debug Monitor [7.2]) <br />
5 libstdc++ (libstdc++.so.5) <br />
RPM (: <strong>com</strong>pat-libstdc++) <br />
48
4 WINDRIVER <br />
'linux' <br />
:<br />
ln -s / linux<br />
Linux 2.4 :<br />
ln -s linux-2.4/ linux<br />
4.2.3.2 <br />
1. <strong>WinDriver</strong> CD Linux CD <br />
<br />
2. ( /home/username/):<br />
$ cd /home/username<br />
3. WD800LN.tgz :<br />
$ tar xvzf //WD800LN.tgz<br />
<br />
−<br />
−<br />
CD :<br />
$ tar xvzf /mnt/cdrom/LINUX/WD800LN.tgz<br />
:<br />
$ tar xvzf /home/username/WD800LN.tgz<br />
4. <strong>WinDriver</strong>/redist/ ( tar <br />
):<br />
$ cd /redist/<br />
5. <strong>WinDriver</strong> <br />
• /redist$ ./configure<br />
: configure makefile <br />
-with-kernel-source= configure <br />
configure <br />
(: /usr/src/linux) <br />
• /redist$ make<br />
• ' ' :<br />
/redist$ su<br />
• :<br />
/redist# make install<br />
49
WINDRIVER <br />
6. DriverWizard GUI <br />
:<br />
ln -s /<strong>WinDriver</strong>/wizard/wdwizard/<br />
usr/bin/wdwizard<br />
7. wdwizard read () / excute () <br />
<br />
8. ID read () / write (<br />
) /dev/windrvr <br />
<br />
udev Linux 2.6.x <br />
/etc/udev/permissions.d/50-udev.permissions <br />
read () write () :<br />
windrvr6:root:root:0666<br />
chmod :<br />
chmod /dev/windrvr6 666<br />
9. WD_BASEDIR <strong>WinDriver</strong> <br />
<strong>WinDriver</strong> DriverWizard [5] make<br />
DriverWizard <br />
<br />
<strong>WinDriver</strong> makefile <br />
<br />
: <strong>WinDriver</strong> <br />
WD_BASEDIR <br />
10. <strong>WinDriver</strong> <br />
<br />
Linux /etc/rc.d/rc.local <br />
(windrvr6.o/.ko) :<br />
/sbin/modprobe windrvr6<br />
:<br />
<strong>WinDriver</strong> <br />
<br />
1. DriverWizard GUI <br />
/wizard/wdwizard<br />
2. [File] [Register <strong>WinDriver</strong>] [License Information] <br />
<br />
50
4 WINDRIVER <br />
3. [Cancel license registration]<br />
<br />
4. [Please enter your license string] <br />
[Activate license] <br />
<br />
5. <strong>WinDriver</strong> <br />
WDC_DriverOpen() (PCI ) WDU_Init () (<strong>USB</strong> ) <br />
<br />
WDC_xxx API WD_xxx API <br />
WD_License() <br />
4.2.3.3 Linux <br />
: /dev/windrvr6 <br />
Linux DriverWizard <br />
/dev/windrvr6 <br />
<strong>WinDriver</strong> /dev/windrvr6 DriverWizard <br />
(wdwizard) <br />
4.2.4 Solaris <strong>WinDriver</strong> <br />
<strong>WinDriver</strong> windrvr6.o <br />
<br />
1. <strong>WinDriver</strong> CD Solaris CD (<br />
/home/username/) <br />
2. : ( /home/username)<br />
$ cd /home/username<br />
3. <strong>WinDriver</strong> (WD800SL.tgz (x86) / WD800SLS32.tgz (SPARC 32 )<br />
/ WD800SLS64.tgz (SPARC 64 )) :<br />
$ cp /home/username/WD800SL.tgz<br />
4. <br />
$ gunzip -c WD800SL.tgz | tar xvf -<br />
5. <strong>WinDriver</strong> <br />
6. <strong>WinDriver</strong>/install_windrvr <strong>WinDriver</strong> <br />
:<br />
~/<strong>WinDriver</strong># ./install_windrvr<br />
51
WINDRIVER <br />
Vendor ID Device ID (16 ) PCI <br />
( Vendor ID<br />
Device ID):<br />
~/<strong>WinDriver</strong># ./install_windrvr , [, ...]<br />
PLX 9030 PLX 9054 :<br />
~/<strong>WinDriver</strong># ./install_windrvr 10b5,9030 10b5,9054<br />
7. libgcc (http://www.sunfreeware.<strong>com</strong>/ <br />
)<br />
8. <br />
• SPARC 32 x86 :<br />
LD_LIBRARY_PATH=/usr/local/bin<br />
• SPARC 64 :<br />
LD_LIBRARY_PATH=/usr/local/lib:/usr/local/lib/sparcv9<br />
<br />
1. DriverWizard GUI <br />
~/<strong>WinDriver</strong># ln -s ~/<strong>WinDriver</strong>/wizard/wdwizard/ usr/bin/wdwizard<br />
2. wdwizard read () excute () <br />
<br />
3. ID read () / write (<br />
) /dev/windrvr6 <br />
<br />
4. <strong>WinDriver</strong> <br />
<br />
<strong>WinDriver</strong> <br />
<br />
1. DriverWizard GUI <br />
~/<strong>WinDriver</strong>/wizard$ ./wdwizard<br />
2. [File] [Register <strong>WinDriver</strong>] [License Information] <br />
<br />
3. [Cancel license registration]<br />
<br />
52
4 WINDRIVER <br />
4. [Please enter your license string] <br />
[Activate license] <br />
<br />
5. <strong>WinDriver</strong> <br />
WDC_DriverOpen() (PCI ) <br />
WD_License() ( WDC_xxx API WD_xxx<br />
API )<br />
4.2.4.1 Solaris <br />
: /dev/windrvr6 <br />
Solaris DriverWizard <br />
/dev/windrvr6 <br />
<strong>WinDriver</strong> /dev/windrvr6 <br />
DriverWizard (wdwizard) <br />
4.2.5 DriverBuilder for VxWorks <br />
DriverBuilder for VxWorks DriverBuilder Tornado<br />
2 for Windows (x86 ) DriverBuilder 5.x <br />
Intel x86 BSP (pc486pcPentium pcPentiumPro)PPC 821/860 with MBX821/860<br />
PPC 750 (IBM PPC 604) with MCP750 URL <br />
:<br />
http://www.xlsoft.<strong>com</strong>/jp/products/windriver/db-vxworks.html<br />
DriverBuilder :<br />
1. DriverBuilder for VxWorks <br />
2. DriverBuilder <br />
: \> c:\<br />
3. <br />
: \> unzip -d DBxxxVX.zip c:\ (xxx 540)<br />
: DriverBuilder DriverBuilder <br />
( 5.00 <br />
DriverBuilder <br />
:<br />
"\> c:\cd_vxworks" :<br />
"\> unzip -d DBxxxVX.zip c:\db_vxworks")<br />
53
WINDRIVER <br />
VxWorks <strong>WinDriver</strong> .out pci_diag.out<br />
WindShell xxx_main() <br />
:<br />
wddebug.out: wddebug_main<br />
pci_diag.out: pci_diag_main<br />
DriverBuilder Jungo <strong>WinDriver</strong> <strong>WinDriver</strong> Windows <br />
<strong>WinDriver</strong> <br />
<br />
<br />
1. DriverBuilder for VxWorks <br />
2. <strong>WinDriver</strong> for Windows (<br />
)<br />
3. DriverWizard (C:\<strong>WinDriver</strong>\wizard\wdwizard.exe) <br />
GUI DriverWizard <br />
4.3 <br />
Windows <strong>WinDriver</strong> Windows 98 / Me / NT / 2000 / XP<br />
/ Server 2003 <strong>WinDriver</strong> 4.2.1 Windows 98 /<br />
Me / NT / 2000 / XP / Server 2003 <br />
<br />
DriverWizard () <br />
<strong>WinDriver</strong> <br />
<br />
WDC_DriverOpen() (PCI )WDU_Init () (<strong>USB</strong> ) WD_License() (<br />
WDC_xxx API WD_xxx API ) <br />
<br />
<br />
54
4 WINDRIVER <br />
4.4 <br />
4.4.1 WindowsLinux Solaris <br />
1. Windows [] [] - [<strong>WinDriver</strong>] - [DriverWizard] <br />
DriverWizard <br />
wdizard.exe DriverWizard <br />
<br />
Linux Solaris wizard <br />
<br />
2. shell <br />
3. <strong>WinDriver</strong> ( 4.2 <strong>WinDriver</strong> <br />
)<br />
<br />
4. PCI – PCI Driver Wizard <br />
<br />
5. ISA – ISA DriverWizard <br />
DriverWizard <br />
<br />
4.4.2 Windows CE <br />
1. Windows [] [] - [<strong>WinDriver</strong>] -<br />
[DriverWizard] DriverWizard <br />
2. <strong>WinDriver</strong> <br />
<br />
3. Plug-and-Play (PCIPCMCIA CardBus) <br />
DriverWizard <br />
4. ISA ISA DriverWizard <br />
DriverWizard <br />
5. Visual C++ for CE <br />
6. <strong>WinDriver</strong> (: <strong>WinDriver</strong>\samples\speaker\speaker.dsw) <br />
<br />
7. Visual C++ WCE x86em <br />
<br />
55
WINDRIVER <br />
8. Windows <br />
CE <br />
4.4.3 VxWorks <br />
1. x86 : MMU <br />
("hardware/memory/MMU/MMU Mode")<br />
2. DriverBuilder <br />
(DriverBuilder \redist\eval\intelx86\PENTIUM\windrvr6.o)<br />
3. WindShell DriverBuilder :<br />
=> drvrInit()<br />
function returned (return value = 0)<br />
=><br />
4. :<br />
WindShell C:\DriverBuilder \samples\pci_diag\PENTIUM\pci_diag.out<br />
<br />
=> pci_diag_main()<br />
5. PCI <br />
4.5 <strong>WinDriver</strong> <br />
<strong>WinDriver</strong> <br />
<br />
4.5.1 Windows 98 / Me / NT / 2000 / XP Server 2003 <br />
<br />
<br />
• Windows 98/Me wdreg wdreg16 <br />
• Windows 2000/XP/Server 2003 wdreg.exe wdreg_gui.exe <br />
<br />
• wdreg.exewdreg_gui.exe wdreg16.exe <strong>WinDriver</strong>\util\ <br />
( 13 )<br />
1. <strong>WinDriver</strong> (DriverWizardDebug Monitor<br />
(wddebug_gui.exe) <strong>WinDriver</strong> ) <br />
2. Kernel PlugIn :<br />
56
4 WINDRIVER <br />
• Kernel PlugIn wdreg <br />
:<br />
wdreg -name uninstall<br />
: Kernel PlugIn *.sys <br />
• Kernel PlugIn %windir%\system32\drivers <br />
<br />
3. Plug-and-Play Windows (Windows 98 / Me / 2000 / XP / Server<br />
2003) :<br />
• INF <strong>WinDriver</strong> Plug-and-Play <br />
(<strong>USB</strong>/PCI/PCMCIA) <br />
<br />
<br />
Windows 2000/XP/Server 2003 wdreg <br />
:<br />
wdreg -inf uninstall<br />
Windows 98/Me <br />
() <br />
• %windir%\inf %windir%\inf\other <br />
(Windows 98/Me) <strong>WinDriver</strong> (windrvr6.sys) <br />
*.inf <br />
4. <strong>WinDriver</strong> <br />
• <strong>WinDriver</strong> PC :<br />
[] [] - [<strong>WinDriver</strong>] - [Uninstall] <br />
<strong>WinDriver</strong>\ uninstall.exe <br />
<strong>WinDriver</strong> (windrvr6.sys) <br />
%windir%inf\ (Windows 2000/XP/Server 2003) <br />
%windir%inf\other\ (Windows 98/Me) windrvr6.inf <br />
Windows <strong>WinDriver</strong> <br />
DriverWizard Debug Monitor <br />
<strong>WinDriver</strong> (<br />
) <br />
• <strong>WinDriver</strong> <strong>WinDriver</strong> <br />
(windrvr6.sys) PC :<br />
wdreg :<br />
<br />
Windows 98 / Me / 2000 / XP / Server 2003 windrvr6.sys <br />
:<br />
57
WINDRIVER <br />
wdreg -inf uninstall<br />
windrvr6.sys windrvr6.inf<br />
<br />
<br />
Windows NT 4.0 windrvr6.sys <br />
:<br />
wdreg uninstall<br />
( PC wdreg <br />
)<br />
<br />
• (uninstall wdreg <br />
) <strong>WinDriver</strong> <br />
(: <strong>WinDriver</strong> INF <br />
<strong>WinDriver</strong> Plug-and-Play (Windows<br />
98/Me/2000/XP/Server 2003 ) ) <br />
<br />
<br />
<br />
<br />
windrvr6.sys <br />
<strong>WinDriver</strong> (windrvr6.sys) <br />
<br />
• Debug Monitor (<strong>WinDriver</strong>\util\wddebug_gui.exe) <strong>WinDriver</strong><br />
<br />
Debug Monitor OS <br />
PC <br />
<br />
<br />
wddebug_gui.exe <br />
5. windrvr6.sys :<br />
• %windir% system32 drivers windrvr6.sys<br />
• %windir% inf windrvr6.inf (Windows 2000/XP/Server 2003)<br />
• %windir% inf Jungowindrvr6.inf (Windows 98/Me)<br />
• %windir% system32 wdapi800.dll<br />
• %windir% sysWOW64 wdapi800.dll (Windows x64)<br />
6. <br />
58
4 WINDRIVER <br />
4.5.2 Linux <strong>WinDriver</strong> <br />
: root <br />
1. <strong>WinDriver</strong> <br />
• <br />
/# /sbin/lsmod<br />
• <strong>WinDriver</strong><br />
• <strong>WinDriver</strong> <br />
/sbin# rmmod<br />
2. <strong>WinDriver</strong> <br />
/sbin# rmmod windrvr6<br />
3. udev Linux 2.6.x <br />
/dev <br />
/# rm –rf /dev/windrvr6<br />
4. Kernel PlugIn <br />
5. /etc .windriver.rc <br />
/# rm -rf /etc/.windriver.rc<br />
6. $HOME .windriver.rc <br />
/# rm -rf $HOME/.windriver.rc<br />
7. DriverWizard <br />
/# rm -f /usr/bin/wdwizard<br />
8. Windriver <br />
/# rm -rf ~/<strong>WinDriver</strong><br />
9. Erase the following shared object file, if it exists:<br />
/usr/lib/libwdapi800.so (32-bit PowerPC, 32-bit x86 or 64-bit IA64) /<br />
/usr/lib/64/libwdapi800.so (64-bit x86)<br />
4.5.3 Solaris <strong>WinDriver</strong> <br />
: root <br />
1. <strong>WinDriver</strong> :<br />
2. Kernel PlugIn Kernel PlugIn :<br />
1. # /usr/sbin/rem_drv kpname<br />
59
WINDRIVER <br />
2. 64 (64 SPARC) :<br />
# rm /kernel/drv/sparcv9/kpname<br />
32 (32 x86/SPARC) :<br />
# rm /kernel/drv/kpname<br />
3. # rm /kernel/drv/kpname.conf<br />
4. :<br />
~/<strong>WinDriver</strong># ./remove_windrvr<br />
5. :<br />
• 64 (64 SPARC) :<br />
# rm -rf /kernel/drv/sparcv9/windrvr6 /kernel/drv/windrvr6.conf<br />
• 32 (32 x86/SPARC) :<br />
# rm -rf /kernel/drv/windrvr6 /kernel/drv/windrvr6.conf<br />
6. /etc .windriver.rc :<br />
# rm -rf /etc/.windriver.rc<br />
7. $HOME .windriver.rc :<br />
# rm -rf $HOME/.windriver.rc<br />
8. DriverWizard :<br />
# rm -f /usr/bin/wdwizard<br />
9. Windriver :<br />
# rm -rf ~/<strong>WinDriver</strong><br />
10. :<br />
/lib/32/libwdapi800.so (32 SPARC 32 x86)<br />
/lib/64/libwdapi800.so (64 SPARC)<br />
4.5.4 DriverBuilder for VxWorks <br />
1. DriverBuilder ( C:\DriverBuilder) Windows Explorer<br />
<br />
2. DriverWizard <br />
<br />
60
5 DRIVERWIZARD<br />
5 <br />
DriverWizard<br />
<strong>WinDriver</strong> DriverWizard <br />
<br />
<strong>WinDriver</strong> <strong>USB</strong> Device DriverWizard <br />
15 <br />
: CardBus <strong>WinDriver</strong> PCI API PCI <br />
CardBus <br />
5.1 DriverWizard <br />
(<strong>WinDriver</strong> ) DriverWizard <br />
GUI <br />
<br />
<br />
DriverWizard <br />
<br />
<strong>WinDriver</strong> <strong>USB</strong> PCI (PLX 903090509052905490569080<br />
9656Marvell gt64AlteraXilinx VirtexIIAMCC S5933Cypress EZ-<strong>USB</strong> Microchip PIC18F4550<br />
Philips PDI<strong>USB</strong>D12Texas Instruments T<strong>USB</strong>3410T<strong>USB</strong>3210T<strong>USB</strong>2136T<strong>USB</strong>5052Silicon Laboratories<br />
C8051F320) <br />
8 PCI <strong>USB</strong> <br />
DriverWizard Windows 98 / Me / 2000 / XP / Server 2003 <br />
INF (Windows<br />
NT INF ) PCI <strong>USB</strong> <br />
[8] DriverWizard <br />
DriverWizard DriverWizard <br />
PCI (<br />
) <br />
DriverWizard :<br />
: (PCI / CardBus /<br />
ISA / ISAPnP / EISA / CompactPCI) <strong>USB</strong> <strong>USB</strong> <br />
DriverWizard <br />
61
WINDRIVER <br />
: DriverWizard <br />
<br />
DriverWizard :<br />
• (I/O <br />
)<br />
• 32 <br />
DriverWizard <br />
<br />
• <br />
/ <strong>WinDriver</strong> Linux<strong>WinDriver</strong> Solaris DriverWizard <br />
makefile <br />
5.2 DriverWizard <br />
DriverWizard :<br />
1. :<br />
<strong>USB</strong> <br />
<strong>USB</strong> <br />
<br />
DriverWizard PCI <br />
DriverWizard <br />
PCI <br />
: PCI <br />
IO/ (BARs <br />
) <br />
IRQ IRQ<br />
IO/<br />
DriverWizard <br />
2. :<br />
(a) [] [] - [<strong>WinDriver</strong>] - [DriverWizard] <br />
[DriverWizard] <br />
<strong>WinDriver</strong>/wizard/ wdwizard <br />
<br />
(b) [Choose Your Project] [Next] <br />
(c) DriverWizard PCI <br />
Plug-and-Play Plug-and-Play ISA <br />
62
5 DRIVERWIZARD<br />
PCI: VIRTUAL<br />
DEVICE <br />
5.1: <br />
: Windows 98 <strong>USB</strong> <strong>USB</strong> <br />
[] <br />
INF <br />
3. DriverWizard INF <br />
Plug-and-Play Windows (Windows 98ME2000XP <br />
Server 2003) INF <br />
windrvr6.sys <br />
Plug-and-Play DriverWizard <br />
Windows 98 / Me / 2000 / XP / Server 2003 <br />
PC <br />
INF DriverWizard <br />
(PCI / <strong>USB</strong> <br />
)<strong>WinDriver</strong> Plug-and-Play <br />
(Windows 98 / Me / 2000 / XP / Server 2003) Plug-and-Play (PCI / PCMCIA / <strong>USB</strong>) <br />
INF 14.4.1 <br />
<br />
INF (DriverWizard Linux )<br />
<br />
DriverWizard INF <br />
63
WINDRIVER <br />
(a) [Select Your Device] [Generate .INF file] [Next] <br />
<br />
(b) DriverWizard Vendor IDDevice IDDevice Class<br />
<br />
<br />
5.2: DriverWizard INF <br />
(c) <strong>USB</strong> <br />
INF <br />
1 INF <br />
<br />
<strong>USB</strong> INF <br />
[Enter Information for INF File] INF<br />
<br />
64
5 DRIVERWIZARD<br />
5.3: DriverWizard INF <br />
()<br />
<br />
1 INF [Enter<br />
Information for INF File] INF <br />
INF <br />
INF <br />
<br />
65
WINDRIVER <br />
5.4: DriverWizard INF <br />
(1 )<br />
(d) [Next] INF <br />
DriverWizard INF <br />
Windows 2000 / XP / Server 2003 DriverWizard [Automatically Install INF<br />
file] (<strong>USB</strong> <br />
) INF DriverWizard <br />
Windows 98 / Me Windows [<br />
] [ ] INF<br />
14.4 <br />
Windows 2000 / XP / Server 2003 INF <br />
DriverWizard INF <br />
<br />
(e) INF [Select Your Device] <br />
<br />
4. INF <br />
PnP (PCI / PCMCIA / <strong>USB</strong>) <br />
INF INF <br />
66
5 DRIVERWIZARD<br />
windrvr6.sys Windows <br />
INF <br />
INF <br />
<br />
(a) [Select Your Device] [Uninstall .INF file] <br />
(b) INF <br />
5. <strong>USB</strong> <br />
5.5: <strong>USB</strong> <br />
DriverWizard <br />
<strong>USB</strong> DriverWizard <br />
[Select Device Interface] )<br />
6. <br />
<br />
DriverWizard <br />
DriverWizard <br />
a. PCI I/O<br />
• DirverWizard PnP (I/O <br />
) <br />
67
WINDRIVER <br />
• PnP <br />
• I/O <br />
:[Register Information] [Auto Read] <br />
[Auto Read] ON Wizard <br />
read () / write () (Wizard [Log]<br />
)<br />
5.6: PCI <br />
• ‘Listen’ () <br />
: Linux PowerPC PCI <br />
( ) <br />
/ <br />
[9.6] <br />
b. <strong>USB</strong> <br />
68
5 DRIVERWIZARD<br />
5.7: <br />
DriverWizard configuration\interface\alternate setting <br />
<br />
:<br />
i<br />
ii<br />
<br />
() [Read/Write to Pipe] <br />
<strong>USB</strong> ( 5.8 ) <br />
<strong>USB</strong> <br />
<br />
8 ( ) <strong>USB</strong> <br />
(bmRequestTypebRequestwValuewIndexwLength) <br />
69
WINDRIVER <br />
5.8: <strong>USB</strong> <br />
: <strong>USB</strong> 9.3 <strong>USB</strong> <br />
9.4 <strong>WinDriver</strong> <br />
iii<br />
iv<br />
v<br />
() [Listen to Pipe] <br />
HID <br />
<br />
listening Transfer Failed<br />
[Stop Listen to Pipe] <br />
() [Write to Pipe] <br />
( 5.9 ) <br />
DriverWizard <br />
70
5 DRIVERWIZARD<br />
5.9: <br />
7. <br />
(a) [Build] [Generate Code] [Define and Test Resources for Your<br />
Device] [Next] <br />
(b)<br />
[Select Code Generation Options] <br />
<br />
71
WINDRIVER <br />
5.10: <br />
(c) [Next] Plug-and-Play <br />
KernelPlugIn <br />
5.11: <br />
: Kernel PlugIn Kernel PlugIn Microsoft<br />
DDK <br />
(d) [OK] <br />
<br />
72
5 DRIVERWIZARD<br />
(e) <strong>USB</strong> – DriverWizard <br />
8. <br />
• <br />
<br />
• DriverWizard 32 <br />
(Windows 98 / NT /<br />
Me / 2000 / XP / CE / CE.NET / Server 2003LinuxSolaris VxWorks) <br />
<br />
5.3 DriverWizard <br />
5.3.1 <br />
shared<br />
shared :<br />
1. <br />
2. <br />
3. [Share] <br />
: Shared <br />
<br />
5.3.2 <br />
<br />
<br />
:<br />
1. <br />
2. <br />
3. [Disable] <br />
5.3.3 <strong>WinDriver</strong> API <br />
DriverWizard API <strong>WinDriver</strong> API <br />
[Tools] [Log API calls] <br />
DriverWizard [Log API calls] <br />
73
WINDRIVER <br />
5.3.4 DriverWizard <br />
[Device Resources] <br />
DriverWizard <br />
<br />
<br />
5.3.5 <br />
<br />
<br />
5.3.5.1 <br />
[Build] [Generate Code] DriverWizard <br />
(xxx.wdpxxx ) <br />
DriverWizard [Generate Code] <br />
<br />
5.3.5.2 PCI / PCMCIA / ISA C <br />
DriverWizard API xxxlib.h <br />
API xxx_lib.c <br />
<br />
main() xxx_diag.c <br />
DriverWizard API <br />
<br />
DriverWizard (“xxx” DriverWizard <br />
):<br />
• (I/O <br />
)<br />
xxx_lib.c - <strong>WinDriver</strong> Card (WDC) API xxx_lib.h <br />
API <br />
xxx_lib.h - xxx_lib.c API <br />
DriverWizard API <br />
<br />
• xxx_lib.h DriverWizard API <br />
<br />
xxx_diag.c<br />
<br />
<br />
• xxx_files.txt <br />
74
5 DRIVERWIZARD<br />
Win32 <br />
main() <br />
5.3.5.3 <strong>USB</strong> C <br />
xxx_diag.c (xxx <br />
DriverWizard )<strong>USB</strong> <br />
<strong>WinDriver</strong> <strong>USB</strong> API <strong>USB</strong> <br />
Plug-and-Play (/) <br />
<br />
<strong>USB</strong> <br />
5.3.5.4 Visual Basic Delphi <br />
DriverWizard Visual Basic Delphi 5.3.5.2 C <br />
<br />
Delphi (C ) Visual Basic<br />
GUI <br />
5.3.5.5 C# Visual Basic <br />
DriverWizard C# Visual Basic .NET 5.3.5.2 C <br />
GUI .NET <br />
5.3.6 <br />
5.3.6.1 Windows 98MeNT2000XPCE Server 2003 (MSDEV )<br />
Windows IDE () /<br />
IDE Windows 98/Me/NT/2000/XP/Server 2003 <br />
MSDEVVisual C++ 5/6MSDEV .NET 2003/2005Borland C++ BuilderVisual Basic 6.0Borland Delphi<br />
Windows CE MS eMbedded Visual C++MS Platform Builder IDE <br />
<br />
IDE <br />
IDE <br />
<br />
5.3.6.2 Linux Solaris <br />
DriverWizard makfile (GCC ) <br />
<br />
75
WINDRIVER <br />
6 <br />
<br />
<strong>WinDriver</strong> <br />
: <strong>WinDriver</strong> (PLX 90309050905290549056<br />
90809656Marvell gt64AlteraXilinx VirtexIIAMCC S5933Cypress EZ-<strong>USB</strong> Microchip<br />
PIC18F4550Philips PDI<strong>USB</strong>D12Texas Instruments T<strong>USB</strong>3410T<strong>USB</strong>3210T<strong>USB</strong>2136T<strong>USB</strong>5052Silicon<br />
Laboratories C8051F320) 8 <br />
<br />
6.1 <strong>WinDriver</strong> <br />
• DriverWizard IO<br />
<strong>USB</strong> PCI <br />
<br />
<br />
• DriverWizard CC#Visual Basic .NET<br />
Delphi Visual Basic DriverWizard 5 <br />
DriverWizard<br />
• (PLX 9030905090529054905690809656Marvell gt64<br />
AlteraXilinx VirtexIIAMCC S5933Cypress EZ-<strong>USB</strong> Microchip PIC18F4550Philips<br />
PDI<strong>USB</strong>D12Texas Instruments T<strong>USB</strong>3410T<strong>USB</strong>3210T<strong>USB</strong>2136T<strong>USB</strong>5052Silicon Laboratories<br />
C8051F320) <strong>USB</strong> PCI <br />
<br />
<strong>WinDriver</strong> PCI <strong>USB</strong> 8 <br />
PCI <br />
• C / .NET / Delphi / Visual Basic (MSDEVVisual C/C++MSDEV .NETBorland C++<br />
BuilderBorland DelphiVisual Basic 6.0MS eMbedded Visual C++MS Platform Builder C++<br />
GCC ) <br />
• Linux Solaris GCC <br />
• <br />
10 <br />
76
6 <br />
<strong>WinDriver</strong> PCI/ISA/CardBus API <strong>USB</strong> API DriverWizard <br />
9 <br />
6.2 DriverWizard <br />
DriverWizard Windows VxWorks <br />
DriverBuilder DriverWizard DriverWizard <br />
<br />
<br />
6.2.1 <strong>WinDriver</strong> <br />
PCI / ISA <br />
1. <strong>WinDriver</strong> (<br />
<strong>WinDriver</strong>/include/ )<br />
<strong>WinDriver</strong> windrvr.h <br />
PCI / ISA <br />
WDC_xxx API wdc_lib.h wdc_defs. (<br />
windrvr.h ) <br />
<strong>USB</strong> <br />
WDU_xxx <strong>WinDriver</strong> <strong>USB</strong> API wdu_lib.h (<br />
windrvr.h ) <br />
API (<br />
<strong>WinDriver</strong>/samples/shared/ <br />
)<br />
2. <br />
PCI / ISA <br />
windrvr.h API <br />
<br />
#include "windrvr.h"<br />
<strong>USB</strong> <br />
wdu_lib.h <strong>USB</strong> API <br />
<br />
#include "wdu_lib.h"<br />
77
WINDRIVER <br />
3. wdapi800 <br />
• Windows 98/Me/NT/2000/XP/Server 2003 :<br />
<strong>WinDriver</strong>\lib\\wdapi800.lib wdapi800_borland.lib (Borland<br />
C++ Builder ) CPU\ x86\ (32 <br />
32 )am64\ (64 64 <br />
) am64\x86\ (64 32 <br />
)<br />
• Windows CE : <strong>WinDriver</strong>\lib WINCE\\wdapi800.lib<br />
• Linux Solaris : <strong>WinDriver</strong>/lib/libwdapi800.so<br />
<strong>WinDriver</strong>/src/wdapi/ <br />
<br />
wdapi800 <br />
wdapi800 DLL Windows <br />
<strong>WinDriver</strong>\redist\ wdapi800.dll wdapi800_32.dll<br />
(64 32 ) <br />
Linux Solaris <strong>WinDriver</strong>/lib/libwdapi800.so <br />
14 )<br />
4. API <strong>WinDriver</strong> (<br />
<strong>WinDriver</strong>/samples/shared/ )<br />
6.2.2 : PCI/ISA <br />
WDC_xxx API <br />
1. WDC_DriverOpen() <strong>WinDriver</strong> WDC <br />
(<br />
) <strong>WinDriver</strong> <br />
2. PCI/CardBus/PCMCIA WDC_PciScanDevices() /<br />
WDC_PcmciaScanDevices() PCI/PCMCIA <br />
<br />
3. PCI/CardBus/PCMCIA WDC_PciGetDeviceInfo() /<br />
WDC_PcmciaGetDeviceInfo() <br />
<br />
ISA WD_CARD <br />
4. (WDC_PciDeviceOpen() / WDC_PcmciaDeviceOpen() /<br />
WDC_IsaDeviceOpen()) <br />
78
6 <br />
WDC_xxx API <br />
<br />
5. WDC_xxx API () <br />
WDC_IntEnable() <br />
Plug-and-Play <br />
WDC_EventRegister() <br />
6. WDC_IntDisable() (<br />
)WDC_EventRegister() Plug-and-Play <br />
()<br />
(WDC_PciDeviceClose() / WDC_PcmciaDeviceClose() /<br />
WDC_IsaDeviceClose()) <br />
7. WDC_DriverClose () <strong>WinDriver</strong> WDC <br />
<br />
6.2.3 : <strong>USB</strong> <br />
1. <strong>USB</strong> <strong>WinDriver</strong> WDU_Init()<br />
device-attach callback attach<br />
callback <br />
2. attach callback WDU_Transfer() <br />
<br />
3. WDU_Uninit() <br />
6.3 Windows CE <br />
Windows CE <strong>WinDriver</strong> <br />
Windows (Windows 98Me2000XP Server 2003) Plug-and-Play <br />
INF INF <br />
[14.4] <br />
PCI <br />
PCI (platform.reg<br />
)<br />
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\PCI\Template\MyCard]<br />
"Class"=dword:04<br />
"SubClass"=dword:01<br />
"ProgIF"=dword:00<br />
"VendorID"=multi_sz:"1234","1234"<br />
"DeviceID"=multi_sz:"1111","2222"<br />
MSDN PCI <br />
79
WINDRIVER <br />
<strong>USB</strong> <br />
<strong>WinDriver</strong> <strong>USB</strong> :<br />
• Windows CE WDU_Init() <br />
<br />
• (platform.reg<br />
)<br />
[HKEY_LOCAL_MACHINE\DRIVERS\<strong>USB</strong>\LoadClients\\Default\Default\WDR]:<br />
"DLL"="windrvr6.dll"<br />
(_) vendor ID product ID <br />
(: _)<br />
Windows CE<br />
Plug-and-Play (<strong>USB</strong> ) WDU_Inti() <br />
<br />
Windows CE <br />
<br />
MSDN <strong>USB</strong> <br />
<br />
6.4 Visual Basic Delphi <br />
Visual Basic Delphi <strong>WinDriver</strong> API <br />
6.4.1 DriverWizard <br />
DriverWizard <br />
Delphi Visual Basic <br />
5 6.4.4 <br />
<br />
6.4.2 <br />
Delphi Visual Basic <strong>WinDriver</strong> API <br />
1. <strong>WinDriver</strong>\delphi\samples<br />
2. <strong>WinDriver</strong>\vb\samples<br />
<br />
80
6.4.3 Kernel PlugIn<br />
6 <br />
Kernel PlugIn Delphi Visual Basic Delphi <br />
VB <strong>WinDriver</strong> Kernel PlugIn C <br />
<br />
6.4.4 <br />
Visual Basic DriverWizard C <br />
<br />
<br />
• DriverWizard <br />
• <br />
• <br />
• <br />
• <strong>WinDriver</strong> <strong>WinDriver</strong> API <br />
<br />
81
WINDRIVER <br />
7 <br />
<br />
<br />
:<br />
7.1 <br />
• <strong>WinDriver</strong> <br />
<br />
• Debug Monitor [7.2] <strong>WinDriver</strong> API <br />
<strong>WinDriver</strong> API Debug<br />
Monitor <br />
• [7.2] <strong>WinDriver</strong> <strong>WinDriver</strong> <br />
API (WD_Transfer ) <br />
<br />
<br />
• DriverWizard <br />
7.2 Debug Monitor<br />
Debug Monitor <strong>WinDriver</strong> (windrvr6.sys/.dll/.o/.ko) <br />
<br />
WD_DebugAdd() <br />
PrintDbgMessage() Debug Monitor <br />
Debug Monitor 2 <br />
Debug Monitor <br />
7.2.1 Debug Monitor <br />
Windows 98MeNT2000XPServer 2003Linux Solaris Debug Monitor <br />
(GUI) Windows 2000/XP/Server 2003 Windows CE <br />
Windows CE Debug Monitor Windows CE <br />
VxWorks Debug Monitor [7.2.2]<br />
82
7 <br />
1. Debug Monitor <br />
• DebugMinitor ("wddebug_gui.exe") <strong>WinDriver</strong>/util/ <br />
• Debug Monitor DriverWizard [Tool] <br />
• [] [] - [<strong>WinDriver</strong>] - [Monitor Debug Messages] <br />
Debug Monitor <br />
7.1: Debug Monitor <br />
2. [View] - [Debug Options] [Debug Options] <br />
[Debug Options] Debug Monitor <br />
<br />
83
WINDRIVER <br />
7.2: Debug Options <br />
• Status - [ON] [OFF] <br />
• Section - <strong>WinDriver</strong> API PCI <br />
[Interrupts] [PCI] <br />
<strong>USB</strong> [<strong>USB</strong>] <br />
: <br />
<br />
• Level - <br />
Error <br />
Trace <strong>WinDriver</strong> <br />
• OS [Send debug messages to the<br />
operating system kernel debugger] <br />
WinDrinver <br />
<br />
Windows <br />
Microsoft WinDbg WinDbg <br />
Microsoft Web Microsoft (DDK) <br />
(Microsoft )<br />
84
7 <br />
3. [OK] [Debug Options] <br />
<br />
4. () <br />
5. <br />
7.2.2 Debug Monitor <br />
Debug Monitor (wddebug ) <br />
<br />
7.2.2.1 WindowsWindows CELinux Solaris wddebug <br />
Windows 98MeNT2000XPServer 2003CELinux Solaris wddebug ( <br />
Debug Monitor) <strong>WinDriver</strong>/util/ :<br />
wddebug<br />
Windows CE Windows CE (CMD.EXE) <br />
WDDEBUG.EXE <br />
• stat: Debug Monitor <br />
• on: Debug Monitor <br />
• off: Debug Monitor <br />
• dbg_on: Debug Monitor Debug<br />
Monitor <br />
• dbg_off: Debug Monitor <br />
<br />
• dump: ENTER <br />
• level: ERRORWARNINFO<br />
TRACE ERROR TRACE <br />
<br />
• section: <strong>WinDriver</strong> API <br />
wddebug <br />
<br />
wddebug status Debug Monitor <strong>WinDriver</strong> <br />
Debug Monitor ( ) <br />
<br />
85
WINDRIVER <br />
Debug Monitor wddebug dump <br />
Enter wddebug off <br />
Debug Monitor <br />
:<br />
wddebug <br />
• Debug Monitor<br />
:<br />
wddebug on TRACE ALL<br />
• Enter :<br />
wddebug dump<br />
• Debug Monitor :<br />
wddebug off<br />
7.2.2.2 VxWorks wddebug <br />
VxWorks Debug Monitor <br />
Debug Monitor wddebug.out DriverBuilder/util/<br />
wddebug_main() <br />
<br />
Tornado WindShell wddebug <br />
<br />
VxWorks Debug Monitor :<br />
1. DriverBuilder/util/wddebug.out <br />
2. wddebug : wddebug_main.<br />
3. ([7.2.2.1] ) wddebug :<br />
wddebug_main [''stat'',] [''level'',] [''section'']<br />
<br />
Debug Monitor :<br />
wddebug_main ''on'', ''trace'', ''all''<br />
4. :<br />
wddebug_main ''dump''<br />
Enter <br />
<br />
<br />
86
7 <br />
wddebug_main ''status'' Debug Monitor <strong>WinDriver</strong><br />
Debug Monitor ( )<br />
<br />
:<br />
Tornado II IDE wddebug.out <br />
Debug Monitor Debug Monitor <br />
<br />
-> ld < wddebug.out<br />
Loading wddebug.out |<br />
value = 10893848 = 0xa63a18<br />
-> wdddebug<br />
-> wddebug_main "on", "trace", "all"<br />
Debug level (4) TRACE, Debug sections (0xffffffff) ALL ,<br />
Buffer size 16384<br />
value = 0 = 0x0<br />
-> wddebug_main "dump"<br />
WDDEBUG v5.00 Debugging Monitor.<br />
Running DriverBuilder V5.00 Jungo (c) 2001 evaluation copy<br />
Time: THU JAN 01 01:06:56 2001<br />
OS: VxWorks<br />
Press CTRL-BREAK to exit<br />
87
WINDRIVER <br />
8 <br />
PCI <strong>USB</strong> <br />
<br />
8.1 <br />
<strong>WinDriver</strong> API PCI/ISA/PCMCIA/CardBus <strong>USB</strong> <br />
DriverWizard <strong>WinDriver</strong> <br />
<br />
API <br />
<strong>WinDriver</strong> (PLX 9030905090529054905690809656<br />
Marvell gt64AlteraXilinx VirtexIIAMCC S5933Cypress EZ-<strong>USB</strong> Microchip PIC18F4550<br />
Philips PDI<strong>USB</strong>D12Texas Instruments T<strong>USB</strong>3410T<strong>USB</strong>3210T<strong>USB</strong>2136T<strong>USB</strong>5052Silicon Laboratories<br />
C8051F3) <br />
: Cypress EZ-<strong>USB</strong> FX2LP CY7C68013AMicrochip PIC18F4550Philips PDI<strong>USB</strong>D12 Silicon<br />
Laboratories C8051F320 <strong>USB</strong> <strong>WinDriver</strong> <strong>USB</strong><br />
Device 15 <br />
8.2 <br />
<br />
[8.1] <br />
<strong>WinDriver</strong> <br />
1. <strong>WinDriver</strong>/chip_vendor/chip_name/ <br />
<br />
(<br />
download_sample ) chip_name/ <br />
<br />
<br />
(Windows WIN32\ )<br />
2. <br />
<br />
88
8 PCI <strong>USB</strong> <br />
3. <br />
<br />
<strong>WinDriver</strong> API API <br />
<strong>WinDriver</strong>/chip_vendor/lib/ <br />
4. <br />
()<strong>WinDriver</strong> Kernel PlugIn 11 Kernel<br />
PlugIn <strong>WinDriver</strong> Kernel PlugIn<br />
<br />
<br />
89
WINDRIVER <br />
9 <br />
<br />
DriverWizard <br />
<strong>WinDriver</strong> <br />
<strong>WinDriver</strong> [8] DMA <br />
API <br />
<br />
9.1 DMA <br />
<br />
(DMA) <strong>WinDriver</strong> <br />
DMA PCIPCMCIA<br />
CardBus CPU <br />
<br />
DMA 2 <br />
• Contiguous Buffer (): <br />
• Scatter/Gather: <br />
<br />
<br />
<br />
DMA <br />
() (PC ) ( <br />
) <br />
<strong>WinDriver</strong> Contiguous Buffer DMA Scatter/Gather DMA ()<br />
API (WDC_DMAContigBufLock()WDC_DMASGBufLock()<br />
WDC_DMABufUnlock() ) WD_DMAxxx API <strong>WinDriver</strong> PCI <br />
API WDC_xxx API <br />
<br />
Scatter/Gather Contiguous Buffer DMA <strong>WinDriver</strong> <br />
<br />
90
9 <br />
:<br />
• DMA <br />
<br />
• DMA DMA (<br />
) DMA <br />
() DMA <br />
DMA DMA <br />
() DMA <br />
() DMA <br />
<br />
9.1.1 Scatter/Gather DMA<br />
DMA <br />
<strong>WinDriver</strong> WDC API Scatter/Gather DMA <br />
DMA <br />
PLX ([8]) <strong>WinDriver</strong>/plx/lib/plx_lib.c <br />
<strong>WinDriver</strong>/plx/diag_lib/plx_diag_lib.c <br />
(plx_lib.c DMA API ) <br />
Marvell gt64 Scatter/Gather DMA WD_DMAxxx API <br />
<strong>WinDriver</strong>/marvell/gt64/lib/gt64_lib.c <br />
9.1.1.1 Scatter/Gather DMA <br />
BOOL DMARoutine(WDC_DEVICE_HANDLE hDev, DWORD dwDMAChannel, DWORD dwDMABufSize,<br />
UINT32 u32LocalAddr, DWORD dwOptions, BOOL fPolling)<br />
{<br />
PVOID pBuf;<br />
WD_DMA *pDma = NULL;<br />
BOOL fRet = FALSE;<br />
*/<br />
/* Allocate a user-mode buffer for Scatter/Gather DMA */<br />
pBuf = malloc(dwDMABufSize); /* dwDMABufSize = number of bytes to allocate<br />
if (!pBuf)<br />
{<br />
printf("Failed allocating a user-mode DMA buffer\n");<br />
return FALSE;<br />
}<br />
memset(pBuf, 0, dwDMABufSize);<br />
/* Allocate a DMA buffer and open DMA for the selected channel */<br />
if (!DMAOpen(hDev, pBuf, u32LocalAddr, dwDMAChannel, dwDMABufSize, &pDma))<br />
{<br />
free(pBuf);<br />
return FALSE;<br />
}<br />
91
WINDRIVER <br />
/* Enable DMA interrupts (if not polling) */<br />
if (!fPolling)<br />
{<br />
if (!MyDMAInterruptEnable(hDev, MyDmaIntHandler, pDma))<br />
{<br />
printf("Failed enabling DMA interrupts\n");<br />
goto Error;<br />
}<br />
}<br />
/* Flush the data from the CPU caches in order to synchronize these caches<br />
with the DMA buffer (see documentation of WDC_DMASyncCpu()) */<br />
WDC_DMASyncCpu(pDma);<br />
/* Start DMA - write to the device to initiate the DMA transfer */<br />
if (!MyDMAStart(hDev, pDma))<br />
{<br />
printf("Failed initiating DMA\n");<br />
goto Error;<br />
}<br />
/* Wait for the DMA transfer to <strong>com</strong>plete */<br />
MyDMAIsDone(hDev, pDma);<br />
/* Flush the data from the I/O caches and update the CPU caches in order<br />
to synchronize the I/O caches with the DMA buffer (see documentation of<br />
WDC_DMASyncIo()) */<br />
WDC_DMASyncIo(pDma);<br />
fRet = TRUE;<br />
Exit:<br />
DMAClose(pDma, pBuf, fPolling);<br />
return fRet;<br />
}<br />
/* DMAOpen: Allocates and locks a Scatter/Gather DMA buffer */<br />
BOOL DMAOpen(WDC_DEVICE_HANDLE hDev, PVOID pBuf, UINT32 u32LocalAddr,<br />
DWORD dwDMAChannel, DWORD dwDMABufSize, WD_DMA *ppDma)<br />
{<br />
DWORD dwStatus, dwPageNumber;<br />
BOOL fRead = dwOptions & DMA_READ_FROM_DEVICE ? TRUE : FALSE;<br />
/* Allocate and lock a Scatter/Gather DMA buffer */<br />
dwStatus = WDC_DMASGBufLock(hDev, pBuf, dwOptions, dwDMABufSize, ppDma);<br />
if (WD_STATUS_SUCCESS != dwStatus)<br />
{<br />
printf("Failed locking a Scatter/Gather DMA buffer. Error 0x%lx - %s\n",<br />
dwStatus, Stat2Str(dwStatus));<br />
return FALSE;<br />
}<br />
/* Program the device's DMA registers for each physical page */<br />
for(dwPageNumber = 0; dwPageNumber < (*ppDma)->dwPages; dwPageNumber++)<br />
92
{<br />
MyDMAPageProgram(u32LocalAddr,<br />
(*ppDma)->Page[dwPageNumber].pPhysicalAddr,<br />
(*ppDma)->Page[dwPageNumber].dwBytes, fRead);<br />
}<br />
9 <br />
}<br />
return TRUE;<br />
/* DMAClose: Frees a previously allocated Scatter/Gather DMA buffer */<br />
void DMAClose(WD_DMA *pDma, PVOID pBuf, BOOL fPolling)<br />
{<br />
/* Disable DMA interrupts (if not polling) */<br />
if (!fPolling)<br />
MyDMAInterruptDisable(hDev);<br />
/* Unlock and free the DMA buffer */<br />
WDC_DMABufUnlock(pDma);<br />
}<br />
/* Free the virtual user-mode DMA buffer */<br />
if (pBuf)<br />
free(pBuf);<br />
9.1.1.2 :<br />
MyDMAxxx() <br />
• MyDMAPageProgram(): DMA <br />
Scatter/Gather DMA <br />
• MyDMAStart(): DMA <br />
• MyDMAInterruptEnable() MyDMAInterruptDisable(): WDC_IntEnable() <br />
WDC_IntDisable() /<br />
DMA /<br />
/(<strong>WinDriver</strong> [9.2] <br />
) <br />
• MyDMAIsDone(): DMA DMA <br />
<br />
DMA <br />
<br />
: WD_xxx API (<strong>WinDriver</strong> PCI API ) 1MB <br />
Scatter/Gather DMA FAQ (http://www.jungo.<strong>com</strong>/support/faq.html#dma1) <br />
WD_DMALock() DMA_LARGE_BUFFER <br />
WDC_DMASGBufLock() DMA <br />
<br />
93
WINDRIVER <br />
9.1.2 Contiguous Buffer () DMA<br />
<strong>WinDriver</strong> WDC API Contiguous DMA <br />
DMA <br />
PLX [ 8 ] <strong>WinDriver</strong>/plx/lib/plx_lib.c <br />
<strong>WinDriver</strong>/plx/diag_lib/plx_diag_lib.c <br />
(plx_lib.c DMA API ) <br />
AMCC 5933 Contiguous Buffer DMA WD_DMAxxx API <br />
<strong>WinDriver</strong>/amcc/lib/amcclib.c (WD_DMAxxx API <br />
<strong>WinDriver</strong> PCI API )<br />
9.1.2.1 Contiguous Buffer DMA <br />
BOOL DMARoutine(WDC_DEVICE_HANDLE hDev, DWORD dwDMAChannel, DWORD dwDMABufSize,<br />
UINT32 u32LocalAddr, DWORD dwOptions, BOOL fPolling)<br />
{<br />
PVOID pBuf = NULL;<br />
WD_DMA *pDma = NULL;<br />
BOOL fRet = FALSE;<br />
94<br />
/* Allocate a DMA buffer and open DMA for the selected channel */<br />
if (!DMAOpen(hDev, &pBuf, u32LocalAddr, dwDMAChannel, dwDMABufSize, &pDma))<br />
{<br />
free(pBuf);<br />
return FALSE;<br />
}<br />
/* Enable DMA interrupts (if not polling) */<br />
if (!fPolling)<br />
{<br />
if (!MyDMAInterruptEnable(hDev, MyDmaIntHandler, pDma))<br />
{<br />
printf("Failed enabling DMA interrupts\n");<br />
goto Error;<br />
}<br />
}<br />
/* Flush the data from the CPU caches in order to synchronize these caches<br />
with the DMA buffer (see documentation of WDC_DMASyncCpu()) */<br />
WDC_DMASyncCpu(pDma);<br />
/* Start DMA - write to the device to initiate the DMA transfer */<br />
if (!MyDMAStart(hDev, pDma))<br />
{<br />
printf("Failed initiating DMA\n");<br />
goto Error;<br />
}<br />
/* Wait for the DMA transfer to <strong>com</strong>plete */<br />
MyDMAIsDone(hDev, pDma);<br />
/* Flush the data from the I/O caches and update the CPU caches in order
9 <br />
to synchronize the I/O caches with the DMA buffer (see documentation of<br />
WDC_DMASyncIo()) */<br />
WDC_DMASyncIo(pDma);<br />
fRet = TRUE;<br />
Exit:<br />
DMAClose(pDma, fPolling);<br />
return fRet;<br />
}<br />
/* DMAOpen: Allocates and locks a Contiguous DMA buffer */<br />
BOOL DMAOpen(WDC_DEVICE_HANDLE hDev, PVOID *ppBuf, UINT32 u32LocalAddr,<br />
DWORD dwDMAChannel, DWORD dwDMABufSize, WD_DMA *ppDma)<br />
{<br />
DWORD dwStatus;<br />
BOOL fRead = dwOptions & DMA_FROM_DEVICE ? TRUE : FALSE;<br />
/* Allocate and lock a Contiguous DMA buffer */<br />
dwStatus = WDC_DMAContigBufLock(hDev, ppBuf, dwOptions, dwDMABufSize,<br />
ppDma);<br />
if (WD_STATUS_SUCCESS != dwStatus)<br />
{<br />
printf("Failed locking a Contiguous DMA buffer. Error 0x%lx - %s\n",<br />
dwStatus, Stat2Str(dwStatus));<br />
return FALSE;<br />
}<br />
/* Program the device's DMA registers for the physical DMA page */<br />
MyDMAPageProgram(u32LocalAddr, (*ppDma)->Page[0].pPhysicalAddr,<br />
(*ppDma)->Page[0].dwBytes, fRead);<br />
}<br />
return TRUE;<br />
/* DMAClose: Frees a previously allocated Contiguous DMA buffer */<br />
void DMAClose(WD_DMA *pDma, BOOL fPolling)<br />
{<br />
/* Disable DMA interrupts (if not polling) */<br />
if (!fPolling)<br />
MyDMAInterruptDisable(hDev);<br />
}<br />
/* Unlock and free the DMA buffer */<br />
WDC_DMABufUnlock(pDma);<br />
9.1.2.2 :<br />
MyDMAxxx() <br />
• MyDMAPageProgram(): DMA <br />
• MyDMAStart(): DMA <br />
95
WINDRIVER <br />
• MyDMAInterruptEnable() MyDMAInterruptDisable(): WDC_IntEnable() <br />
WDC_IntDisable() /<br />
DMA /<br />
/(<strong>WinDriver</strong> [9.2] <br />
) <br />
• MyDMAIsDone(): DMA DMA <br />
<br />
DMA <br />
<br />
9.1.3 SPARC DMA <br />
Solaris SPARC DVMA (Direct Virtual Memory Access) DVMA <br />
<br />
<br />
MMU (Memory Management Unit) dis-contiguous<br />
/ <br />
Scatter/Gather DAM <br />
9.2 <br />
<strong>WinDriver</strong> APIDriverWizard <br />
<br />
<strong>WinDriver</strong> [ 8 ] <br />
<strong>WinDriver</strong> API <br />
<br />
DriverWizard ( (IRQ)<br />
) /<br />
WinDrivir API <br />
<br />
PCIPCMCIA ISA <strong>WinDriver</strong> API <br />
DriverWizard <br />
<br />
: <strong>WinDriver</strong> <br />
<br />
<strong>WinDriver</strong> Kernel PlugIn [ 11 ] <br />
Kernel PlugIn <br />
[11.6.5] <br />
96
9.2.1 <br />
9 <br />
<strong>WinDriver</strong> <br />
1. <br />
<br />
2. <br />
3. <strong>WinDriver</strong> <br />
( [9.2.2.1] ) <br />
<br />
4. <br />
<strong>WinDriver</strong> WD_IntWait() (<br />
WDC_IntEnable() / InterruptEnable() ) <br />
CPU <br />
<strong>WinDriver</strong> WD_IntWait() <br />
<br />
GDI <br />
Windows API <br />
9.2.1.1 WDC <br />
<strong>WinDriver</strong> Card (WDC) (WDC_IntEnable()<br />
WDC_IntDisable() WDC_IntIsEnabled()) <strong>WinDriver</strong><br />
PCI/PCMCIA/ISA API <br />
WDC API <br />
<strong>WinDriver</strong> pci_diag<br />
(<strong>WinDriver</strong>/samples/pci_diag/)pcmcia_diag (<strong>WinDriver</strong>/samples/pcmcia_diag/)PLX<br />
(<strong>WinDriver</strong>/plx/) DriverWizard PCI/PCMCIA/ISA <br />
<br />
VOID DLLCALLCONV interrupt_handler (PVOID pData)<br />
{<br />
PWDC_DEVICE pDev = (PWDC_DEVICE)pData;<br />
/* Implement your interrupt handler routine here */<br />
}<br />
printf("Got interrupt %d\n", pDev->Int.dwCounter);<br />
...<br />
97
WINDRIVER <br />
int main()<br />
{<br />
DWORD dwStatus;<br />
WDC_DEVICE_HANDLE hDev;<br />
...<br />
WDC_DriverOpen(WDC_DRV_OPEN_DEFAULT, NULL);<br />
...<br />
hDev = WDC_IsaDeviceOpen(...);<br />
...<br />
/* Enable interrupts. This sample passes the WDC device handle as the data<br />
for the interrupt handler routine */<br />
dwStatus = WDC_IntEnable(hDev, NULL, 0, 0,<br />
interrupt_handler, (PVOID)hDev, FALSE);<br />
/* WDC_IntEnable() allocates and initializes the required WD_INTERRUPT<br />
structure, stores it in the WDC_DEVICE structure, then calls<br />
InterruptEnable(), which calls WD_IntEnable() and creates an interrupt<br />
handler thread */<br />
if (WD_STATUS_SUCCESS != dwStatus)<br />
{<br />
printf ("Failed enabling interrupt. Error: 0x%x - %s\n",<br />
dwStatus, Stat2Str(dwStatus));<br />
}<br />
else<br />
{<br />
printf("Press Enter to uninstall interrupt\n");<br />
fgets(line, sizeof(line), stdin);<br />
WDC_IntDisable(hDev);<br />
/* WDC_IntDisable() calls InterruptDisable(), which calls<br />
WD_IntDisable() */<br />
}<br />
...<br />
WDC_IsaDeviceClose(hDev);<br />
...<br />
WDC_DriverClose();<br />
}<br />
9.2.2 ISA / EISA PCI <br />
ISA/EISA PCI <br />
<br />
Low High 1 <br />
1 Windows OS <strong>WinDriver</strong><br />
WD_IntWait() <br />
<br />
High <br />
Low Windows OS <strong>WinDriver</strong> <br />
PC <br />
<strong>WinDriver</strong> <br />
98
9 <br />
9.2.2.1 ()<br />
PCI ( ) (<br />
) Low <br />
PCI <br />
<br />
<strong>WinDriver</strong> <br />
<br />
(WD_IntWait() ) <strong>WinDriver</strong> <br />
(WD_ TRANSFER ) WDC_IntEnable()<br />
InterruptEnable() WD_IntEnable() <br />
<strong>WinDriver</strong> <br />
<br />
read () <br />
(trans[i].cmdTrans = CMD_MASK)<br />
<strong>WinDriver</strong> <br />
<strong>WinDriver</strong> <br />
<br />
<strong>WinDriver</strong> <br />
<br />
IO dwAddr (INTCSR) <br />
intrMask INTCSR 0<br />
INTCSR <br />
0<br />
DWORD <br />
WD_TRANSFER trans[3]; /* Array of <strong>WinDriver</strong> transfer <strong>com</strong>mand structures */<br />
BZERO(trans);<br />
/* 1st <strong>com</strong>mand: Read a DWORD from the INTCSR I/O port */<br />
trans[0].cmdTrans = RP_DWORD;<br />
/* Set address of IO port to read from: */<br />
trans[0].dwPort = dwAddr; /* Assume dwAddr holds the address of INTCSR */<br />
/* 2nd <strong>com</strong>mand: Mask the interrupt to verify its source */<br />
trans[1].cmdTrans = CMD_MASK;<br />
trans[1].Data.Dword = intrMask; /* Assume intrMask holds your interrupt mask */<br />
/* 3rd <strong>com</strong>mand: Write DWORD to the INTCSR I/O port<br />
This <strong>com</strong>mand will only be executed if the value read from INTCSR in the<br />
1st <strong>com</strong>mand matches the interrupt mask set in the 2nd <strong>com</strong>mand. */<br />
trans[2].cmdTrans = WP_DWORD;<br />
/* Set the address of IO port to write to: */<br />
trans[2].dwPort = dwAddr; /* Assume dwAddr holds the address of INTCSR */<br />
/* Set the data to write to the INTCSR IO port: */<br />
trans[2].Data.Dword = 0;<br />
99
WINDRIVER <br />
<br />
WDC <br />
<br />
/* Enable the interrupts:<br />
hDev: WDC_DEVICE_HANDLE received from a previous call to WDC_PciDeviceOpen()<br />
INTERRUPT_CMD_COPY: Used to save the read data - see explanation below<br />
interrupt_handler: Your user-mode interrupt handler routine<br />
pData: The data to pass to the interrupt handler routine */<br />
WDC_IntEnable(hDev, &trans, 2, INTERRUPT_CMD_COPY, interrupt_handler,<br />
pData, FALSE);<br />
9.2.3 VxWorks <br />
<strong>WinDriver</strong> for VxWorks ( DriverBuilder) <br />
<br />
Windows 98 / Me / NT / 2000 / XP / Server 2003Linux <br />
Solaris Kernel PlugIn <br />
Kernel PlugIn 11 Kernel PlugIn <br />
<br />
windrvr_isr() :<br />
1. :<br />
int (__cdecl *windrvr_isr)(void);<br />
2. windrvr_isr<br />
:<br />
int __cdecl my_isr(void)<br />
{<br />
/* Add code here in order to verify that the ISR is called. */<br />
return TRUE; /* If TRUE, continue regular handling of <strong>WinDriver</strong>;<br />
If FALSE, exit ISR. */<br />
}<br />
extern int (__cdecl *windrvr_isr)(void);<br />
/* after calling drvrInit() */<br />
windrvr_isr = my_isr;<br />
100
9 <br />
9.2.4 Windows CE <br />
Windows CE <br />
IRQ IRQ Windows CE <br />
<br />
3 :<br />
1. Windows CE Plug-and-Play (PCI )<br />
Windows CE PCI <br />
PCI IRQ <br />
<strong>WinDriver</strong> <br />
PCI [6.3] <br />
<br />
2. (X86 ARM)<br />
x86 MIPS <br />
<br />
logical interrupt = SYSINTR_FIRMWARE + physical interrupt<br />
Windows CE Plug-and-Play <strong>WinDriver</strong> <br />
<br />
3. <br />
: Platform Builder <br />
IRQ <br />
INTERRUPT_CE_INT_ID <br />
WD_CardRegister() CFWPC.C <br />
(%_TARGETPLATROOT%\KERNEL\HAL ) <br />
<br />
:<br />
• IRQ0: <br />
• IRQ2: 2 PIC <br />
• IRQ6: <br />
• IRQ7: LPT1 (PPSH )<br />
• IRQ9<br />
• IRQ13: <br />
101
WINDRIVER <br />
PPSH <br />
<br />
<br />
CFWPC.C<br />
(%_TARGETPLATROOT%\ KERNEL\HAL ) <br />
7 <br />
SETUP_INTERRUPT_MAP(SYSINTR_FIRMWARE+7,7);<br />
IRQ9 PCI WinCE <br />
IRQ9 <br />
<br />
SETUP_INTERRUPT_MAP(SYSINTR_FIRMWARE+9,9);<br />
9.2.4.1 Windows CE <br />
PCI Windows CE <br />
<br />
1. Windows CE [6.3] <br />
<strong>WinDriver</strong> <br />
"WdIntEnh"=dword:0 "WdIntEnh"=dword:1 <br />
0 <br />
<br />
2. "Preprocessor Definitions" WD_CE_ENHANCED_INTR<br />
Microsoft eMbedded Visual C++ <br />
"Preprocessor Definitions" "Project Settings" <br />
3. WD_xxx API (<strong>WinDriver</strong> PCI API ) <br />
InterruptEnable() CEInterruptEnhance() <br />
<strong>WinDriver</strong> WDC API CEInterruptEnhance() <br />
WDC_IntEnable() <br />
CEInterruptEnhance() 2 :<br />
void CEInterruptEnhance(HANDLE hThread, DWORD dwSysintr);<br />
• hThread: InterruptEnable() <br />
• dwSysintr: WD_CardRegister() cardReg.Card.Item[i].I.Val.dw4 (`i'<br />
) <br />
102
9.3 <strong>USB</strong> <br />
9 <br />
9.3.1 <strong>USB</strong> <br />
<strong>USB</strong> 2 <br />
• <br />
(Isochronous) 3<br />
• <br />
<br />
Pipe 0 <br />
9.3.2 <br />
9.1: <strong>USB</strong> <br />
<br />
( ) <br />
<br />
<br />
8 <br />
<strong>USB</strong> <br />
<br />
<br />
<br />
<br />
() <br />
<br />
103
WINDRIVER <br />
9.2 (<strong>USB</strong> ) read () write () <br />
'in' 'out' <br />
<br />
9.3.3 <br />
9.2: <strong>USB</strong> <br />
( <br />
) <strong>USB</strong> 9 <br />
<strong>USB</strong> <br />
<strong>USB</strong> <br />
<br />
( <strong>USB</strong> <br />
<strong>USB</strong> <br />
<br />
104
9.3.4 <strong>USB</strong> <br />
9 <br />
<strong>USB</strong> <br />
http://www.usb.org <strong>USB</strong> <br />
<br />
0 bmRequest Type Bit 7: (0= - out, 1=<br />
- in) Bits 5..6: (0=, 1=, 2=,<br />
3=reserved) Bits 0..4: (0=, 1=, 2=<br />
,3=)<br />
1 bRequest ( 9.3.5 <br />
)<br />
2 wValueL (CLEAR_FEATURE<br />
GET_DESCRIPTOR <br />
SET_ADDRESS <br />
)<br />
3 wValueH Value <br />
4 wIndexL <br />
<br />
5 wIndexH Index <br />
6 wLengthL <br />
<br />
7 wLengthH Length <br />
105
WINDRIVER <br />
9.3.5 <br />
<br />
BRequest<br />
<br />
GET_STATUS 0<br />
CLEAR_FEATURE 1<br />
Reserved for future use 2<br />
SET_FEATURE 3<br />
Reserved for future use 4<br />
SET_ADDRESS 5<br />
GET_DESCRIPTOR 6<br />
SET_DESCRIPTOR 7<br />
GET_CONFIGURATION 8<br />
SET_CONFIGURATION 9<br />
GET_INTERFACE 10<br />
SET_INTERFACE 11<br />
SYNCH_FRAME 12<br />
9.3.6 <br />
<strong>USB</strong> <br />
Hex <br />
<strong>USB</strong> 'Device descriptor' 'Control Read' <br />
'Device descriptor' <strong>USB</strong> ID ID <br />
<br />
GET_DESCRIPTOR () <br />
80 06 00 01 00 00 12 00<br />
106
9 <br />
:<br />
<br />
0 BmRequest Type 80 8h=1000b<br />
bit 7=1 -> ()<br />
0h=0000b<br />
bits 0..1=00 -> ""<br />
1 bRequest 06 'GET_DESCRIPTOR'<br />
2 wValueL 00<br />
3 wValueH 01 ( <strong>USB</strong> spec<br />
)<br />
4 wIndexL 00 ( 1 <br />
Index <br />
5 wIndexH 00<br />
6 wLengthL 12 : 18(12h) ('device<br />
descriptor' )<br />
7 wLengthH 00<br />
'Device Descriptor' 'Cypress EZ-<strong>USB</strong><br />
Integrated Circuit' 'Device Descriptor' :<br />
0 1 2 3 4 5 6 7 8 9 10<br />
12 01 00 01 Ff ff ff 40 47 05 80<br />
11 12 13 14 15 16 17<br />
00 01 00 00 00 00 01<br />
<strong>USB</strong> 0 2-3 <strong>USB</strong> <br />
7 00 <br />
8-9 ID 10-11 ID <br />
107
WINDRIVER <br />
9.4 <strong>WinDriver</strong> <br />
DriverWizard <strong>WinDriver</strong> Pipe00 <br />
DriverWizard [5] API<br />
<strong>WinDriver</strong> WDU_Transfer() <br />
<br />
9.4.1 DriverWizard <br />
1. Pipe00 [Read/Write to Pipe] <br />
2. <strong>USB</strong> <br />
• : <br />
[Write to pipe data (Hex)] <br />
[Read From Pipe] <br />
[Write To Pipe] ( 9.3 )<br />
9.3: <br />
• <strong>USB</strong> : GET_DESCRIPTOR CONFIGURATIONGET_DESCRIPTOR<br />
DEVICE GET_STATUS DEVICE <strong>USB</strong> ( 9.4 <br />
) <br />
<br />
108
9 <br />
9.4: <br />
3. DriverWizard [Log] <br />
GET_DESCRIPTOR DEVICE [Log] 9.5 <br />
<br />
9.5: <strong>USB</strong> <br />
9.4.2 <strong>WinDriver</strong> API <br />
<br />
DriverWizard API <strong>WinDriver</strong><br />
WDU_Transfer() <br />
BYTE setupPacket[8] <br />
Pipe00 <br />
<br />
109
WINDRIVER <br />
• setupPacket[8] GET_DESCRIPTOR <br />
<br />
setupPacket[0] = 0x80; /* BmRequstType */<br />
setupPacket[1] = 0x6; /* bRequest [0x6 == GET_DESCRIPTOR] */<br />
setupPacket[2] = 0; /* wValue */<br />
setupPacket[3] = 0x1; /* wValue [Descriptor Type: 0x1 == DEVICE] */<br />
setupPacket[4] = 0; /* wIndex */<br />
setupPacket[5] = 0; /* wIndex */<br />
setupPacket[6] = 0x12; /* wLength [Size for the returned buffer] */<br />
setupPacket[7] = 0; /* wLength */<br />
• (GET <br />
pBuffer )<br />
WDU_TransferDefaultPipe(hDev, TRUE, 0, pBuffer, dwSize,<br />
bytes_transferred, &setupPacket[0], 10000);<br />
• (SET <br />
)<br />
WDU_TransferDefaultPipe(hDev, FALSE, 0, NULL, 0, bytes_transferred,<br />
&setupPacket[0], 10000);<br />
WDU_TransferDefaultPipe() WDU_Transfer() <br />
<br />
9.5 64 OS <br />
9.5.1 64 <br />
<strong>WinDriver</strong> 64 <br />
• Solaris SPARC (64 ) (<strong>WinDriver</strong> v6.02 )<strong>WinDriver</strong> Solaris <br />
4.1.5 <br />
• Linux AMD64 EM64T (x86_64) (<strong>WinDriver</strong> v7.00 )Linux Itanium Itanium<br />
2 (IA64) (<strong>WinDriver</strong> v8.00 )<strong>WinDriver</strong> Linux <br />
4.1.4 <br />
• Windows AMD64 EM64T (x64) (<strong>WinDriver</strong> v8.00 )<strong>WinDriver</strong> <br />
Windows 4.1.1 4.1.2 <br />
<strong>WinDriver</strong> 64 (32 ) <br />
10.2.3 <br />
110
9 <br />
9.5.2 64 32 <br />
<br />
<strong>WinDriver</strong> Solaris SPARC (64 )Linux AMD64Windows AMD64 32 <br />
64 32<br />
-DKERNEL_64BIT 32<br />
64 <br />
9.5.3 64 32 <br />
DWORD unsigned long DWORD 32 32 <br />
64 Windows 64 <br />
32 UNIX 64 (: GCCSUN Forte)<br />
64 32 64 <br />
UINT32 UINT64 <br />
<br />
9.6 <br />
9.6.1 <br />
2 <br />
<br />
• <br />
<br />
0x1234 16 (0x12 0x34) <br />
4 <br />
0x12345678 (0x12 0x34 0x56 0x78) <br />
• <br />
<br />
0x1234 16 (0x34 0x12) <br />
4 <br />
0x12345678 (0x78 0x56 0x34 0x12) <br />
<br />
Intel x86 Sun SPARCMotorola 68K <br />
PowerPC <br />
<br />
<br />
111
WINDRIVER <br />
(Jonathan Swift<br />
1726) <br />
<br />
9.6.2 <strong>WinDriver</strong> <br />
x86 PCI PCI<br />
SPARCPowerPC <br />
<strong>WinDriver</strong> <br />
<br />
<strong>WinDriver</strong> <br />
x86 <br />
<br />
<br />
9.6.3 PCI <br />
PCI PCI PCI <br />
PCI <strong>WinDriver</strong> <br />
<br />
: Linux PowerPC <br />
• dtoh16 - WORD (device to host) <br />
• dtoh32 - DWORD (device to host) <br />
• dtoh64 - QWORD (device to host) <br />
<strong>WinDriver</strong> :<br />
1. <br />
<br />
:<br />
DWORD data = VALUE; *mapped_address = dtoh32(data);<br />
2. <br />
<br />
:<br />
WORD data = dtoh16(*mapped_address);<br />
<strong>WinDriver</strong> API (WDC_Read/WriteXXX()WDC_MultiTransfer()<br />
WD_Transfer() WD_MultiTransfer() <br />
API /<br />
112
9 <br />
dtoh16/32/64() (I/O <br />
)<br />
9.6.4 PCI <br />
PCI <br />
PCI <strong>WinDriver</strong> <br />
<br />
: Linux PowerPC SPARC <br />
• htod16 - WORD (host to device) <br />
• htod32 - DWORD (host to device) <br />
• htod64 - QWORD (host to device) <br />
<strong>WinDriver</strong> :<br />
/ <br />
scatter/gather DMA <br />
<strong>WinDriver</strong> (<strong>WinDriver</strong>/plx/lib/plx_lib.c ) <br />
PLX_DMAOpen() :<br />
/* setting chain of DMA pages in the memory */<br />
for (dwPageNumber = 0, u32MemoryCopied = 0;<br />
dwPageNumber < pPLXDma->pDma->dwPages;<br />
dwPageNumber++)<br />
{<br />
pList[dwPageNumber].u32PADR =<br />
htod32((UINT32)pPLXDma->pDma-><br />
Page[dwPageNumber].pPhysicalAddr);<br />
pList[dwPageNumber].u32LADR =<br />
htod32((u32LocalAddr + (fAutoinc ? u32MemoryCopied : 0)));<br />
pList[dwPageNumber].u32SIZ =<br />
htod32((UINT32)pPLXDma->pDma->Page[dwPageNumber].dwBytes);<br />
pList[dwPageNumber].u32DPR =<br />
htod32((u32StartOfChain + sizeof(DMA_LIST) * (dwPageNumber + 1))<br />
| BIT0 | (fIsRead ? BIT3 : 0));<br />
u32MemoryCopied += pPLXDma->pDma->Page[dwPageNumber].dwBytes;<br />
}<br />
pList[dwPageNumber - 1].u32DPR |= htod32(BIT1); /* Mark end of chain */<br />
113
WINDRIVER <br />
10 <br />
<br />
10.1 <br />
<br />
( I/O <br />
)<br />
• [10.2]<br />
• Kernel PlugIn [ 11 ] <br />
Kernel PlugIn <br />
: Windows CE VxWorks Kernel<br />
PlugIn Kernel PlugIn <br />
VxWorks [9.2.3] windrvr_isr hook<br />
<br />
<br />
<br />
10.1.1 <br />
:<br />
114
10 <br />
<br />
#1 ISA - I/O <br />
<br />
<br />
• WD_Transfer WD_MultiTransfer (<br />
[10.2.2] I/O <br />
)<br />
() <br />
1 <br />
(10.2.2 )<br />
• Kernel PlugIn <br />
I/O (<br />
1112 Kernel Plugin )<br />
#2 PCI - I/O <br />
<br />
• PCI 0<br />
0 I/O <br />
#3 BAR0123<br />
45 EERPOM<br />
<br />
• #1 <br />
<br />
#3 <br />
<br />
• (<br />
[10.2.1] )<br />
#1 <br />
• <br />
<br />
Kernel PlugIn <br />
<br />
#4 (<br />
<br />
)<br />
Kernel PlugIn <br />
( 1112 <br />
Kernel Plugin )<br />
115
WINDRIVER <br />
10.2 <br />
I/O <br />
<strong>WinDriver</strong> <br />
(10.2.1 )<br />
<strong>WinDriver</strong> API () <br />
1 (10.2.2 )I/O <br />
<br />
10.2.1 <br />
WDC_xxxDeviceOpen() (PCI / PCMCIA / ISA) WD_CardRegister() <br />
PCI/PCMCIA/ISA <br />
<br />
<br />
<br />
WDC_MEM_DIRECT_ADDR <br />
( Kernel PlugIn<br />
[11] ) <br />
WDC_ReadMem8/16/32/64 <br />
WDC_WriteMem8/16/32/64 <br />
<br />
WDC_ReadAddrBlock() WDC_WriteAddrBlock() WDC_ReadAddrXXX() <br />
WDC_WriteAddrXXX() ( / )<br />
<br />
WD_xxx() APIWD_CardRegister() <br />
pCardReg->Card.Item[i] dwTransAddr dwUserDirectAddr<br />
<br />
dwTransAddr WD_Transfer() WD_MultiTransfer() <br />
Kernel PlugIn [11] <br />
dwUserDirectAddr <br />
<br />
<br />
<br />
<br />
116
10 <br />
:<br />
BYTE buf[len]; /* BYTE */<br />
WORD buf[len]; /* WORD 2 */<br />
UINT32 buf[len]; /*DWORD 4 */<br />
UINT64 buf[len]; /* QWORD 8 */<br />
10.2.2 <br />
( ) I/O <br />
I/O <br />
<br />
<br />
• WDC_ReadAddrBlock() / WDC_WriteAddrBlock() WD_Transfer() <br />
() <br />
• WDC_MultiTransfer() WD_MultiTransfer() <br />
1 <br />
10.2.3 64- <br />
64 CPU<br />
<br />
<strong>WinDriver</strong> 64 WindowsLinuxSolaris (<br />
9.5 ) 32 WindowsLinuxSolaris x86 64 PCI <br />
PCI () 64 <br />
32 <br />
<br />
32 <br />
DDK <br />
WinDrinver Jungo 64 <br />
32 <br />
<strong>WinDriver</strong> 32 <br />
<br />
64 <br />
• WDC_ReadAddr64() WDC_WriteAddr64() <br />
• WDC_SIZE_64 WDC_ReadAddrBlock()<br />
WDC_WriteAddrBlock() <br />
117
WINDRIVER <br />
• QWORD / WDC_MultiTransfer()<br />
WD_Transfer() WD_MultiTransfer() (<br />
)<br />
WDC_PciReadCfg64() / WDC_PciWriteCfg64() WDC_PciReadCfgBySlot64() /<br />
WDC_PciWriteCfgBySlot64() PCI PCI 64 <br />
<br />
118
11 KERNEL PLUGIN <br />
11 <br />
Kernel PlugIn <br />
<strong>WinDriver</strong> Kernel PlugIn <br />
: Windows CE VxWorks Kernel<br />
PlugIn Kernel PlugIn <br />
VxWorks [9.2.3] windrvr_isr hook<br />
<br />
11.1 Kernel PlugIn <br />
<br />
<br />
Kernel PlugIn <br />
<strong>WinDriver</strong> Kernel PlugIn <br />
<br />
Kernel PlugIn :<br />
• <br />
• <br />
<br />
• Kernel PlugIn <br />
<strong>WinDriver</strong> Kernel PlugIn <br />
<br />
<strong>WinDriver</strong> Kernel PlugIn <br />
<br />
11.2 Kernel PlugIn <br />
Kernel PlugIn <br />
<strong>WinDriver</strong> <br />
10 <br />
119
WINDRIVER <br />
11.3 <br />
<strong>WinDriver</strong> Kernel PlugIn 1 100,000 <br />
<br />
11.4 <br />
<strong>WinDriver</strong> Kernel PlugIn <strong>WinDriver</strong> <br />
(I/O<br />
) Kernel PlugIn <br />
Kernel PlugIn <br />
<br />
<br />
<br />
11.5 <strong>WinDriver</strong> Kernel PlugIn <br />
11.5.1 <br />
<strong>WinDriver</strong> (WDC_xxx <br />
/ WD_xxx) <br />
() <strong>WinDriver</strong> Kernel PlugIn <br />
Kernel PlugIn <strong>WinDriver</strong> API <br />
WDC_xxx / WD_xxx <br />
<br />
120
11 KERNEL PLUGIN <br />
<strong>WinDriver</strong> <br />
<br />
<br />
( YourApp.EXE )<br />
<br />
<strong>WinDriver</strong><br />
<br />
(WinDrvr.h)<br />
<br />
Kernel PlugIn<br />
<br />
<br />
KP_Init()<br />
KP_Open()<br />
KP_IntAtIrq()<br />
KP_IntAtDpc()<br />
KP_Call()<br />
KP_Close()<br />
<strong>WinDriver</strong><br />
Kernel PlugIn<br />
<br />
<br />
<br />
<strong>WinDriver</strong> <br />
(WinDrvr.VXD<br />
WinDrvr.SYS)<br />
<br />
I/O<br />
<br />
11.1: KernelPlugIn <br />
11.5.2 <strong>WinDriver</strong> Kernel Kernel Plugin <br />
<strong>WinDriver</strong> <strong>WinDriver</strong> Kernel PlugIn 2 :<br />
1. <strong>WinDriver</strong> <br />
Kernel PlugIn <br />
<strong>WinDriver</strong> Kernel PlugIn <br />
Kernel PlugIn Kernel PlugIn <br />
<br />
KernelPlugIn <br />
KernelPlugIn <br />
( 11.6.5 )<br />
2. (I/O )<br />
<strong>WinDriver</strong> Kernel PlugIn <br />
<br />
<br />
Kernel PlugIn <br />
<br />
121
WINDRIVER <br />
11.5.3 Kernel Plugin <br />
Kernel PlugIn <br />
<br />
• WDC_xxx / WD_xxx API (<<br />
>/.exe)<br />
• <strong>WinDriver</strong> (windrvr6/.sys/.o)<br />
• WDC_xxx / WD_xxx API <br />
Kernel PlugIn (/.sys/.o)<br />
11.5.4 Kernel PlugIn <br />
Kernel PlugIn :<br />
11.5.4.1 Kernel PlugIn <br />
/ <br />
:<br />
Windows Kernel PlugIn <br />
<br />
:<br />
KP_Init() Kernel PlugIn <br />
<br />
<br />
<br />
<br />
<br />
KP_Init() <strong>WinDriver</strong> KP_Open() <br />
<br />
(Kernel PlugIn <br />
WDC_xxxDeviceOpen() <br />
( WDC_xxxDeviceOpen() <br />
) <br />
WD_KernelPlugInOpen() <br />
)<strong>WinDriver</strong> <br />
:<br />
<br />
Kernel PlugIn <br />
WDC_xxxDeviceOpen() <br />
( WDC_xxxDeviceOpen() <br />
) <br />
WD_KernelPlugInOpen() <br />
<br />
122
11 KERNEL PLUGIN <br />
:<br />
KP_Open() Kernel PlugIn <br />
<br />
KP_Open() <strong>WinDriver</strong> Kernel PlugIn<br />
<br />
Kernel<br />
Plugin <br />
11.5.4.2 Kernel PlugIn <br />
/ <br />
:<br />
WDC_callKerPlug()<br />
WD_KernelPlugInCall() <br />
<br />
:<br />
KP_Call() Kernel PlugIn <br />
<br />
<br />
WDC_CallKerPlug() /<br />
WD_KernelPlugInCall() (Kernel<br />
PlugIn ) <br />
Kernel PlugIn <br />
Kernel PlugIn <br />
<br />
<br />
KP_Call() <br />
<br />
11.5.4.3 /<br />
/ <br />
<br />
:<br />
fUseKP TRUE <br />
WDC_IntEnable() (Kernel<br />
PlugIn )<br />
KernelPlugIn <br />
InterruptEnable() <br />
WD_IntEnable() (<br />
WD_INTERRUPT <br />
hKernelPlugIn )<br />
:<br />
KP_IntEnable() Kernel PlugIn <br />
<br />
Kernel PlugIn <br />
<br />
:<br />
<br />
:<br />
KP_IntAtIrql() Kernel PlugIn <br />
<br />
KP_IntAtIrql() <br />
(<br />
HW <br />
) <br />
123
WINDRIVER <br />
<br />
<br />
KP_IntAtDpc() <br />
KP_IntAtIrql() TRUE <br />
:<br />
Kernel PlugIn <br />
(<br />
) WDC_IntDisable()<br />
<br />
InterruptDisable() <br />
WD_IntDisable() <br />
:<br />
KP_IntDisable() Kernel PlugIn <br />
<br />
KP_IntEnable() <br />
<br />
11.5.4.4 – <br />
/ <br />
:<br />
Kernel PlugIn KP_IntAtIrql() TRUE <br />
<br />
:<br />
KP_IntAtDpc() Kernel PlugIn <br />
<br />
:<br />
KP_IntAtDpc() 0 <br />
<br />
:<br />
WD_IntWait() <br />
<br />
<br />
<strong>WinDriver</strong> <br />
<br />
KP_IntAtIrql() <br />
<br />
<br />
<br />
<br />
124
11.5.4.5 Plug-and-Play <br />
11 KERNEL PLUGIN <br />
/ <br />
<br />
:<br />
fUseKP TRUE <br />
WDC_EventRegister() <br />
Kernel PlugIn Plug-and-Play<br />
<br />
(Kernel PlugIn <br />
)Kernel PlugIn <br />
<br />
EventRegister() <br />
WD_EventRegister() <br />
( WD_EVENT <br />
hKernelPlugIn )<br />
:<br />
Plug-and-Play <br />
<br />
:<br />
KP_Event() <br />
:<br />
KP_Event() TRUE <br />
:<br />
WD_Intwait() <br />
KP_Event() <br />
<br />
<br />
<br />
<br />
<br />
125
WINDRIVER <br />
11.6 Kernel PlugIn <br />
Kernel PlugIn <br />
<br />
Kernel<br />
PlugIn <br />
11.6.1 Kernel PlugIn <br />
Kernel PlugIn <br />
• Windows 98/Me/NT/2000/XP/Server 2003 <br />
o Visual C (VC) (cl.exerc.exelink.exe nmake.exe)<br />
o Windows <br />
(DDK) <br />
<br />
• Windows DDK MSDN <br />
http://www.microsoft.<strong>com</strong>/whdc/ddk/winddk.mspx <br />
• PC Windows 98/Me Kernel PlugIn <br />
Windows 2000 <br />
• Linux Solaris GCCgmake make <br />
Kernel PlugIn 2 (<br />
1 1 ) <br />
<br />
<br />
11.6.2 Kernel PlugIn <br />
11.6.2.1 <br />
Kernel PlugIn (<br />
) KP_Init() <br />
<br />
<br />
KP_Init() <br />
KP_xxx() (KP_Open() ) <br />
Kernel PlugIn <br />
DriverWizard Kernel PlugIn <br />
(KP_Init() ) "KP__" <br />
126
11 KERNEL PLUGIN <br />
MyDevice Kernel PlugIn KP_Open() KP_MyDevice_Open()<br />
<br />
11.6.2.2 KP_Init() <br />
KP_Init() <br />
BOOL __cdecl KP_Init(KP_INIT *kpInit);<br />
KP_INIT :<br />
typedef struct {<br />
DWORD dwVerWD; // <strong>WinDriver</strong> Kernel PlugIn <br />
CHAR cDriverName[12]; // 12 <br />
KP_FUNC_OPEN funcOpen; // KP_Open <br />
} KP_INIT;<br />
KP_INIT KP_Open() <br />
(<strong>WinDriver</strong>/samples/pci_diag/kp_pci/kp_pci.c ) <br />
Kernel PlugIn <br />
:<br />
1. Kernel PlugIn <br />
(KP_Init() KP_INIT cDriverName )XXX.SYS <br />
KP_INIT cDriverName “XXX” <br />
<br />
2. WDC_xxxDeviceOpen() <br />
WD_KernelPlugInOpen() WD_KERNEL_PLUGIN <br />
pcDriverName (WDC ) <br />
KP_Init() KP_INTI cDriverName <br />
<br />
Kernel PlugIn <br />
<br />
<br />
KP_PCI (<strong>WinDriver</strong>/samples/pci_diag/kp_pci/kp_pci.c):<br />
/* KP_Init is called when the Kernel PlugIn driver is loaded.<br />
This function sets the name of the Kernel PlugIn driver and the driver's<br />
open callback function. */<br />
BOOL __cdecl KP_Init(KP_INIT *kpInit)<br />
{<br />
/* Verify that the version of the <strong>WinDriver</strong> Kernel PlugIn library<br />
is identical to that of the windrvr.h and wd_kp.h files */<br />
if (WD_VER != kpInit->dwVerWD)<br />
{<br />
/* Re-build your Kernel PlugIn driver project with the <strong>com</strong>patible<br />
version of the <strong>WinDriver</strong> Kernel PlugIn library (kp_nt.lib)<br />
127
WINDRIVER <br />
}<br />
and windrvr.h and wd_kp.h files */<br />
return FALSE;<br />
kpInit->funcOpen = KP_PCI_Open;<br />
strcpy (kpInit->cDriverName, KP_PCI_DRIVER_NAME);<br />
}<br />
return TRUE;<br />
pci_diag <br />
KP_PCI Kernel PlugIn <br />
<strong>WinDriver</strong>/samples/pci_diag/pci_lib.h <br />
/* Kernel PlugIn driver name (should be no more than 8 characters) */<br />
#define KP_PCI_DRIVER_NAME "KP_PCI"<br />
11.6.2.3 KP_Open() <br />
KP_Open() <br />
BOOL __cdecl KP_Open(KP_OPEN_CALL *kpOpenCall, HANDLE hWD,<br />
PVOID pOpenData, PVOID *ppDrvContext);<br />
Kernel PlugIn WDC_xxxDeviceOpen() <br />
WD_KernelPlugInOpen() ( WDC_xxxDeviceOpen() <br />
) <br />
KP_Open() Kernel PlugIn <br />
:<br />
<br />
KP_Close()<br />
KP_Call()<br />
<br />
Kernel PlugIn <br />
WDC_xxxDeviceClose() (<br />
WDC_xxxDeviceClose() ) <br />
WD_KernelPlugInClose() <br />
WDC_CallKerPlug() <br />
( WDC_CallKerPlug() )<br />
WD_KernelPlugInCall() <br />
Kernel PlugIn <br />
KP_Event()<br />
Plug-and-Play <br />
fUseKP TRUE WDC_EventRegister()<br />
(Kernel PlugIn ) Kernel PlugIn <br />
EventRegister() WD_EventRegister() <br />
( WD EVENT hKernelPlugIn <br />
128
11 KERNEL PLUGIN <br />
)Kernel PlugIn <br />
<br />
KP_IntEnable()<br />
Kernel PlugIn <br />
(Kernel PlugIn ) fUseKP TRUE <br />
WDC_IntEnable() (<br />
WD_INTERRUPT hKernelPlugIn ) Kernel<br />
PlugIn InterruptEnable() <br />
WD_IntEnable() <br />
Kernel PlugIn <br />
<br />
KP_IntDisable()<br />
WDC_IntDisable() <br />
Kernel PlugIn <br />
InterruptDisable() WD_IntDisable() <br />
<br />
KP_IntEnable() <br />
<br />
KP_IntAtIrql()<br />
KP_IntAtDpc()<br />
<strong>WinDriver</strong> (Kernel PlugIn <br />
)<br />
<br />
KP_IntAtDpc() <br />
<br />
KP_IntAtIrql() TRUE <br />
<br />
<br />
<br />
<br />
Kernel PlugIn <br />
(WDC_xxxDeviceOpen() / WD_KernelPlugInOpen(), WDC_xxxDeviceClose() /<br />
WD_KernelPlugInClose() ) (WDC_CallKerPlug() /<br />
WD_KernelPlugInCall() ) Kernel PlugIn (Kernel<br />
PlugIn fUseKP TRUE WDC_IntEnable() <br />
WD_INTERRUPT hKernelPlugIn Kernel<br />
PlugIn InterruptEnable() WD_InterruptEnable() ) Kernel<br />
PlugIn Kernel PlugIn <br />
WDC_IntDisable() / InterruptDisable() / WD_IntDisable() <br />
<br />
129
WINDRIVER <br />
Kernel PlugIn Kernel PlugIn <br />
<br />
Kernel PlugIn (Kernel PlugIn fUseKP TRUE <br />
WDC_EventRegister() WD_EVENT <br />
hKernelPlugIn Kernel PlugIn EventRegister() <br />
WD_EventRegister() ) Kernel PlugIn <br />
Plug-and-Play <br />
<br />
Kernel PlugIn KP_Open() Kenerl Plugin <br />
KP_PCI DriverWizard <br />
Kernel PlugIn KP_Open() <br />
Kernel PlugIn <br />
<br />
KP_PCI (<strong>WinDriver</strong>/samples/pci_diag/kp_pci/kp_pci.c):<br />
/* KP_PCI_Open is called when WD_KernelPlugInOpen() is called from the user mode.<br />
pDrvContext will be passed to the rest of the Kernel PlugIn callback functions.<br />
*/<br />
BOOL __cdecl KP_PCI_Open(KP_OPEN_CALL *kpOpenCall, HANDLE hWD,<br />
PVOID pOpenData, PVOID *ppDrvContext)<br />
{<br />
PWDC_DEVICE pDev;<br />
WDC_ADDR_DESC *pAddrDesc;<br />
DWORD dwSize, dwStatus;<br />
void *temp;<br />
KP_PCI_Trace("KP_PCI_Open entered\n");<br />
kpOpenCall->funcClose = KP_PCI_Close;<br />
kpOpenCall->funcCall = KP_PCI_Call;<br />
kpOpenCall->funcIntEnable = KP_PCI_IntEnable;<br />
kpOpenCall->funcIntDisable = KP_PCI_IntDisable;<br />
kpOpenCall->funcIntAtIrql = KP_PCI_IntAtIrql;<br />
kpOpenCall->funcIntAtDpc = KP_PCI_IntAtDpc;<br />
kpOpenCall->funcEvent = KP_PCI_Event;<br />
/* Initialize the PCI library */<br />
dwStatus = PCI_LibInit();<br />
if (WD_STATUS_SUCCESS != dwStatus)<br />
{<br />
KP_PCI_Err("KP_PCI_Open: Failed to initialize the PCI library: %s",<br />
PCI_GetLastErr());<br />
return FALSE;<br />
}<br />
/* Create a copy of device information in the driver context */<br />
dwSize = sizeof(WDC_DEVICE);<br />
pDev = malloc(dwSize);<br />
if (!pDev)<br />
130
goto malloc_error;<br />
11 KERNEL PLUGIN <br />
COPY_FROM_USER(&temp, pOpenData, sizeof(void *));<br />
COPY_FROM_USER(pDev, temp, dwSize);<br />
dwSize = sizeof(WDC_ADDR_DESC) * pDev->dwNumAddrSpaces;<br />
pAddrDesc = malloc(dwSize);<br />
if (!pAddrDesc)<br />
goto malloc_error;<br />
COPY_FROM_USER(pAddrDesc, pDev->pAddrDesc, dwSize);<br />
pDev->pAddrDesc = pAddrDesc;<br />
*ppDrvContext = pDev;<br />
KP_PCI_Trace("KP_PCI_Open: Kernel PlugIn driver opened successfully\n");<br />
return TRUE;<br />
malloc_error:<br />
KP_PCI_Err("KP_PCI_Open: Failed allocating %ld bytes\n", dwSize);<br />
PCI_LibUninit();<br />
return FALSE;<br />
}<br />
11.6.2.4 Kernel PlugIn <br />
Kernel PlugIn ( KP_Intxxx() Plug-and-Play <br />
KP_Event() ) <br />
11.6.3 Kernel PlugIn <br />
DriverWizard Kernel PlugIn Kernel<br />
PlugIn ()<br />
<strong>WinDriver</strong>/samples/pci_diag/kp_pci/ Kernel PlugIn <br />
(KP_PCI) <br />
Kernel PlugIn <br />
DriverWizard <br />
Kernel PlugIn pci_diag <br />
(<strong>WinDriver</strong>/samples/pci_diag/ ) KP_PCI <br />
<br />
KP_PCI DriverWizard <br />
(pci_diag / xxx_diag - xxx ) Kernel PlugIn <br />
(kp_pci .sys/.o/.ko / kp_xxx.sys/.o/.ko) <br />
Kernel PlugIn KP_Open() Kernel<br />
PlugIn Kernel PlugIn <br />
<br />
131
WINDRIVER <br />
Kernel PlugIn Kernel PlugIn <br />
Kernel PlugIn <strong>WinDriver</strong> <br />
<br />
<br />
Kernel PlugIn <br />
Kernel PlugIn Kernel PlugIn <br />
5 <br />
KP_PCI PCI KP_IntAtIrql() <br />
<br />
<br />
DriverWizard (PCI/PCMCIA/ISA) <br />
Kp_IntAtIrql() ([Interrput] <br />
/) <br />
PCI <br />
PCMCIA ( 9.2.2)<br />
Kernel PlugIn <br />
() <br />
Kernel PlugIn Plug-and-Play <br />
<br />
: Kernel PlugIn Kernel PlugIn <br />
(<br />
PCI <br />
KP_PCI )<br />
11.6.4 Kernel PlugIn <br />
<br />
11.6.4.1 pci_diag kp_pci <br />
kp_pci.c Kernel PlugIn (KP_PCI) <br />
<strong>WinDriver</strong> PCI (pci_diag) KP_PCI <br />
(pci_diag) <br />
Kernel PlugIn API C<br />
<br />
<strong>WinDriver</strong>/pci_diag/ :<br />
• kp_pci/ - KP_PCI Kernel PlugIn :<br />
◦ kp_pci.c: KP_PCI<br />
132
11 KERNEL PLUGIN <br />
◦ Kernel PlugIn Project / make <br />
Windows x86\ (32 ) amd64\ (64 ) <br />
IDE (msdev2005 / msdev2003 /<br />
msdev_6) Solaris makefile SOLARIS/ <br />
◦ OS KP_PCI Kernel PlugIn :<br />
• WINNT.i386\kp_pci .sys: WinNT DDK Windows x86 32 <br />
<br />
• WINNT.x86_64 kp_pci .sys: Windows Server 2003 DDK Windows<br />
x64 (64 ) <br />
• SOLARIS/ kp_pci: Solaris <br />
• Linux: Linux <br />
<br />
( 14.6 )<br />
• pci_lib.c: <strong>WinDriver</strong> WDC API PCI <br />
<br />
API (pci_diag.c) Kernel PlugIn <br />
(kp_pci.c) <br />
• pci_lib.h: pci_lib <br />
• pci_diag.c: (CUI) <br />
pci_lib WDC PCI <br />
<strong>WinDriver</strong> Kernel PlugIn <br />
KP_PCI Kernel PlugIn <br />
PCI [11.6.3] <br />
Kernel PlugIn Kernel PlugIn <br />
<br />
• pci.inf (Windows): Windows 98/Me/2000/XP/Server 2003 <strong>WinDriver</strong> PCI INF<br />
: Vendor Device ID <br />
Vendor Device ID <br />
• pci_diag: pci_diag Project /<br />
make <br />
Windows x86\ (32 ) amd64\ (64 ) <br />
IDE (msdev2005 / msdev2003 / msdev_6) <br />
<br />
MSDEV Kernel PlugIn <br />
/ <br />
Linux Solaris makefile LINUX/ SOLARIS/ <br />
133
WINDRIVER <br />
• OS (pci_diag) <br />
<br />
<br />
<br />
<br />
Windows: WIN32 pci_diag.exe<br />
Linux: LINUX/pci_diag<br />
Solaris: SOLARIS/pci_diag<br />
• files.txt: pci_diag <br />
• readme.txt: Kernel PlugIn <br />
<br />
11.6.4.2 DriverWizard Kernel PlugIn <br />
DriverWizard Kernel PlugIn <br />
Kernel PlugIn <br />
KP_PCI pci_diag Wizard <br />
Wizard <br />
<br />
[11.6.3] PCI PCMCIA <br />
Wizard <br />
DriverWizard <br />
<br />
<br />
DriverWizard Kernel PlugIn (xxx<br />
kp_xxx <br />
): C <br />
Windows C Kernel PlugIn (C# <br />
).NET C# Kernel PlugIn C# <br />
C# <br />
• kermode/ - KP_XXX Kernel PlugIn :<br />
◦ kp_xxx.c: KP_XXX <br />
◦ Kernel PlugIn Project / make <br />
Windows x86\ (32 ) amd64\ (64 )<br />
IDE (msdev2005 / msdev2003 /<br />
msdev_6) Linux Solaris makefile LINUX/ <br />
SOLARIS/ <br />
• xxx_lib.c: <strong>WinDriver</strong> WDC API <br />
<br />
134
11 KERNEL PLUGIN <br />
API (xxx_diag) Kernel PlugIn <br />
(KP_XXX) <br />
• xxx_lib.h: xxx_lib <br />
• xxx_diag.c: (CUI) <br />
xxx_lib WDC PCI <br />
<strong>WinDriver</strong> Kernel PlugIn <br />
KP_XXX Kernel PlugIn <br />
PCI [11.6.3] <br />
Kernel PlugIn Kernel PlugIn <br />
<br />
• xxx_diag: xxx_diag Project /<br />
make <br />
Windows x86\ (32 ) amd64\ (64 ) <br />
IDE (msdev2005 / msdev2003 / msdev_6 /<br />
cbuilder4 / cbuilder3) <br />
MSDEV Kernel PlugIn <br />
/ <br />
Linux Solaris makefile linux/ solaris/ <br />
• xxx_files.txt: <br />
• xxx.inf: <strong>WinDriver</strong> INF (Windows 98/Me/2000/XP/Server 2003 <br />
PCI PCMCIA Plug and Play )<br />
11.6.5 Kernel PlugIn <br />
[11.6.5.2] Kernel PlugIn Kernel PlugIn <br />
<br />
Kernel PlugIn <strong>WinDriver</strong> <br />
Kernel PlugIn KP_IntAtIrql() KP_IntAtIrql() TRUE <br />
KP_IntAtIrql() TRUE KP_IntAtDpc() Kernel PlugIn <br />
<br />
KP_IntAtDpc() <br />
KP_PCI Kernel PlugIn 5 <br />
5 WD_IntWait() <br />
5 1 (KP_IntAtIrql() KP_IntAtDpc() <br />
5 1 TRUE KP_IntAtIrql() KP_IntAtIrql() <br />
DPC 5 1 <br />
)<br />
135
WINDRIVER <br />
11.6.5.1 (Kernel PlugIn )<br />
Kernel PlugIn WD_IntWait() <strong>WinDriver</strong><br />
(<br />
WDC_IntEnable() InterruptEnable() WD_IntEnable() <br />
) – [11.2] <br />
<br />
WD_IntWait()<br />
WD_IntWait()<br />
<br />
<br />
<strong>WinDriver</strong> <br />
<br />
<br />
<br />
11.2: Kernel PlugIn <br />
11.6.5.2 (Kernel PlugIn )<br />
Kernel PlugIn Kernel PlugIn WDC_xxxDeviceOpen() <br />
Kernel PlugIn <br />
(PCIPCMCIAISA) fUseKP TRUE <br />
WDC_IntEnable() WD_xxx() API <strong>WinDriver</strong> PCI API <br />
<br />
136
11 KERNEL PLUGIN <br />
<br />
WD_IntEnable()<br />
.<br />
.<br />
<br />
<br />
<strong>WinDriver</strong> Kernel PlugIn<br />
KP_IntAtDpc()<br />
{<br />
<br />
<br />
}<br />
KP_IntAtIrql()<br />
{<br />
<br />
<br />
}<br />
<strong>WinDriver</strong> <br />
<br />
<br />
<br />
11.3: Kernel PlugIn <br />
WDC_xxx API Kernel PlugIn <br />
WD_IntEnable() InterruptEnable() (WD_IntEnable() <br />
WD_IntWait() )Kernel PlugIn (<br />
WD_INTERRUPT hKernelPlugIn Kernel PlugIn )<br />
Kernel PlugIn WDC_IntEnable() / InterruptEnable() /<br />
WD_IntEnable() Kernel PlugIn KP_IntEnable() <br />
Kernel PlugIn <br />
<br />
<br />
Kernel PlugIn KP_IntAtIrql() <br />
KP_IntAtIrql() HIGH IRQL <br />
( )<br />
KP_IntAtIrql() :<br />
• <br />
• ():<br />
137
WINDRIVER <br />
−<br />
−<br />
WDC_MultiTransfer()WD_Transfer()WD_MultiTransfer() <br />
WD_DebugAdd()<br />
OS (WinDDK <br />
)( OS <br />
)<br />
malloc()free() WDC_xxx WD_xxx API <br />
KP_IntAtIrql() ( <br />
) KP_IntAtDpc() <br />
KP_IntAtDpc() KP_IntAtIrql() <br />
KP_IntAtIrql() (TRUE )KP_IntAtDpc() <br />
<br />
<br />
KP_IntAtDpc() <br />
11.6.6 <br />
<strong>WinDriver</strong> WDC_CallKerPlug() WD_KernelPlugInCall() <br />
Kernel PlugIn <br />
<br />
plugin <br />
pci_diag KP_PCI DriverWizard <br />
pci_lib.h <br />
xxx_lib.h <br />
<strong>WinDriver</strong> KP_Call() Kernel PlugIn <br />
<br />
(Kernel PlugIn )<br />
/ Kernel PlugIn Kernel PlugIn <br />
KP_Call() <br />
Kernel PlugIn <br />
Kernel PlugIn pci_lib.h/xxx_lib.h <br />
(pci_diag.exe/xxx_diag.exe) <br />
WD_KernelPlugInCall() Kernel PlugIn <br />
138
12 KERNEL PLUGIN <br />
12 <br />
Kernel PlugIn <br />
Kernel PlugIn DriverWizard <br />
Kernel PlugIn ( 11.6.3 11.6.4.2 <br />
)PCI Kernel PlugIn <br />
<strong>WinDriver</strong>/samples/pci_diag/kp_pci KP_PCI Kernel PlugIn<br />
( 11.6.3 11.6.4.1 <br />
)<br />
Kernel PlugIn :<br />
12.1 Kernel PlugIn <br />
Kernel PlugIn <br />
<br />
10 <br />
Kernel PlugIn Kernel PlugIn <br />
(<br />
)<br />
12.2 <br />
1. Kernel PlugIn <br />
2. Kernel <br />
<br />
3. <br />
4. <br />
: Kernel PlugIn <br />
malloc() <br />
<br />
: <br />
WD_CardRegister() <br />
139
WINDRIVER <br />
<br />
( WD_CardRegister() )<br />
WD_CardRegister() WDC API <br />
API <br />
API <br />
12.3 Kernel PlugIn <br />
DriverWizard Kernel PlugIn ( <br />
) () KP_PCI <br />
<br />
KP_PCI <br />
1. <strong>WinDriver</strong>/samples/pci_diag/kp_pci <br />
KP_MyDrv Kernel PlugIn <br />
<strong>WinDriver</strong>/samples/pci_diag/kp_pci <strong>WinDriver</strong>/samples/mydrv <br />
<br />
2. Kernel PlugIn ''KP_PCI'' ''kp_pci'' <br />
''KP_MyDrv'' ''kp_mydrv'' (: <br />
kp_pci.c KP_PCI_xxx() <br />
)<br />
3. “KP_PCI” “kp_mydrv”<br />
4. Kernel PlugIn pci_lib API <br />
pci_lib.h pci_lib.c <strong>WinDriver</strong>/samples/pci_diag/<br />
mydrv/ <br />
''PCI'' (MyDrv) <br />
Kernel PlugIn <br />
<br />
Kernel PlugIn <br />
PCI_xxx API <br />
<br />
5. make <br />
#include ( <br />
)<br />
6. pci_diag <br />
<strong>WinDriver</strong>/samples/pci_diag/pci_diag.c pci_diag <br />
/ make mydrv/ <br />
() ''pci_diag'' <br />
/ <br />
140
12 KERNEL PLUGIN <br />
''KP_PCI'' Kernel PlugIn <br />
''KP_MyDrv'' <br />
<br />
11.6.3 11.6.4 <br />
12.4 Kernel PlugIn <br />
Kernel PlugIn <br />
Kernel PlugIn WDC_PciDeviceOpen() /<br />
WDC_PcmciaDeviceOpen() / WDC_IsaDeviceOpen() (<br />
)<br />
DriverWizard pci_diag <br />
– XXX_DeviceOpen()/PCI_DeviceOpen() <br />
( xxx_diag/pci_diag <br />
) <br />
WDC Kernel PlugIn <br />
WD_KernelPlugInOpen() Kernel PlugIn <br />
WD_KernelPlugInClose() <br />
WD_KernelPlugInOpen() WD_KERNEL_PLUGIN hKernelPlugIn<br />
Kernel PlugIn <br />
12.5 Kernel PlugIn <br />
1. WDC_IntEnable() ( [12.4] Kernel PlugIn <br />
WDC_xxxDeviceOpen() Kernel PlugIn <br />
)fUseKP TRUE Kernel<br />
PlugIn <br />
DriverWizard pci_diag (xxx_lib.c/<br />
pci_lib.c) – <br />
XXX_IntEnable()/PCI_IntEnable() (<br />
xxx_diag/pci_diag ) <br />
<br />
WDC_xxx API Kernel PlugIn <br />
WD_IntEnable() (WD_IntEnable() ) InterruptEnable() <br />
WD_KernelPlugInOpen() Kernel PlugIn (<br />
WD_KERNEL_PLUGIN hKernelPlugIn ) <br />
2. WDC_IntEnable() / InterruptEnable() / WD_IntEnable() Kernel PlugIn <br />
<strong>WinDriver</strong> Kernel PlugIn KP_IntEnable() <br />
Kernel PlugIn (KP_IntAtIrql() /<br />
141
WINDRIVER <br />
KP_IntAtDpc()) <br />
<br />
<br />
3. Kernel PlugIn <br />
() <br />
KP_IntAtIrql() <br />
KP_IntAtDpc() <br />
KP_IntAtIrql() TRUE KP_IntAtDpc() <br />
<br />
(<br />
<br />
)Kernel PlugIn <br />
[11.6.5] <br />
12.6 Kernel PlugIn I/O <br />
1. I/O Kernel PlugIn KP_Call() <br />
<br />
2. I/O <br />
WDC_CallKerPlug() Kernel PlugIn <br />
WD_KernelPlugInCall() <br />
3. () Kernel PlugIn (<br />
) <br />
DriverWizard Kernel PlugIn <br />
Kernel PlugIn ID <br />
pci_lib.h / xxx_lib.h <br />
142
12 KERNEL PLUGIN <br />
12.7 Kernel PlugIn <br />
12.7.1 Windows <br />
<strong>WinDriver</strong>\samples\pci_diag\kp_pci\ Kernel PlugIn Driver Wizard <br />
Kernel PlugIn \kermode\ ( <br />
) Kernel PlugIn <br />
(xxx pci<br />
):<br />
• x86\: 32 <br />
<br />
<br />
<br />
msdev_2005\kp_xxx.vcproj: 32 MSDEV 2005 <br />
msdev_2003\kp_xxx.vcproj: 32 MSDEV 2003 <br />
msdev_6\kp_xxx.dsp: 32 MSDEV 6.0 <br />
• amd64\: 64 <br />
<br />
msdev_2005\kp_xxx.vcproj: 64 MSDEV 2005 <br />
<strong>WinDriver</strong>\samples\pci_diag\ \ <br />
Kernel PlugIn <br />
(xxx pci<br />
):<br />
• x86\: 32 <br />
<br />
<br />
<br />
<br />
<br />
msdev_2005\ - xxx_diag.vcproj: 32 MSDEV 2005 <br />
<br />
msdev_2003\xxx_diag.vcproj: 32 MSDEV 2003 <br />
msdev_6\xxx_diag.dsp: 32 MSDEV 6.0 <br />
cbuilder4\xxx.bpr xxx.cpp: Borland C++ Builder 4.0 <br />
CPP Borland C++<br />
Builder 5.0 6.0 <br />
cbuilder3\xxx.bpr xxx.cpp: Borland C++ Builder 3.0 <br />
CPP <br />
• amd64\: 64 <br />
<br />
msdev_2005\ - xxx_diag.vcproj: 64 MSDEV 2005 <br />
<br />
MSDEV Kernel PlugIn <br />
xxx_diag.dsw/sln / <br />
<br />
143
WINDRIVER <br />
Kernel PlugIn <br />
:<br />
1. PC OS Windows DDK (Driver Development Kit) <br />
( [11.6.1] )<br />
OS <br />
Windows XP Windows XP DDK <br />
<br />
OS DDK OS <br />
Kernel PlugIn <br />
2. Windows DDK BASEDIR <br />
Windows XP Kernel PlugIn Windows XP DDK<br />
BASEDIR <br />
3. Microsoft Developer Studio (MSDEV) <br />
a<br />
<br />
( \<br />
\ xxx_diag.dsw/.sln) <br />
( pci_diag\ Driver<br />
Wizard ) <br />
MSDEV (msdev2005 / msdev2003 / msdev_6) xxx <br />
( pci Driver Wizard <br />
)<br />
DriverWizard MSDEV IDE <br />
Wizard MSDEV <br />
<br />
''IDE to Invoke'' ''None'' <br />
<br />
b<br />
Kernel PlugIn SYS ( kp_pci.sys<br />
kp_xxx.sys) <br />
:<br />
i. Kernel PlugIn (kp_pci.dsp/vcproj <br />
kp_xxx.dsp/vcproj) <br />
ii.<br />
: [] <br />
[] (MSDEV 2003/2005 ) [<br />
…] (MSDEV 6.0 ) <br />
<br />
: OS <br />
Windows 2000 Win32 win2k free (<br />
144
12 KERNEL PLUGIN <br />
) Win32 win2k checked ( ) <br />
<br />
iii.<br />
(MSDEV 6.0 F7 ) <br />
[Build] <br />
c<br />
Kernel PlugIn <br />
( pci_diag.exe<br />
xxx_diag.exe):<br />
i. (<br />
pci_diag.dsp/vcproj<br />
xxx_diag.dsp/vcproj) <br />
ii.<br />
: (MSDEV 6.0 <br />
F7 ) [] <br />
: Windows 98/Me SYS <br />
Windows NT/2000/XP/Server 2003 Windows 98/Me <br />
SYS – Windows<br />
NT/2000/XP/Server 2003 PC Windows 98/Me<br />
DDK BASEDIR Windows 98/Me Kernel<br />
PlugIn Windows 98/Me <br />
<br />
12.7.2 Linux <br />
1. Shell <br />
2. Kernel PlugIn KP_PCI <br />
:<br />
cd <strong>WinDriver</strong>/samples/pci_diag/kp_pci<br />
DriverWizard Kernel PlugIn Kernel PlugIn <br />
( DriverWizard <br />
: /home/user/<strong>WinDriver</strong>/wizard/my_projects/my_kp/):<br />
cd /kermode/linux/<br />
3. configure makefile <br />
./configure<br />
configure <br />
makefile configure --with-kernel-source=<br />
<br />
configure <br />
<br />
145
WINDRIVER <br />
4. Kernel PlugIn “make” <br />
kp_xxx.o/.ko LINUX.xxx/ <br />
(xxx Linux )<br />
5. makefile <br />
<br />
KP_PCI :<br />
cd ../LINUX/<br />
DriverWizard Kernel PlugIn :<br />
cd ../../linux/<br />
6. “make” <br />
12.7.3 Solaris <br />
<strong>WinDriver</strong> GNU make makefiles <br />
GNU make make <strong>WinDriver</strong> makefile<br />
http://www.sunfreeware.<strong>com</strong> GNU make <br />
1. Shell <br />
2. <br />
KP_PCI <br />
:<br />
cd <strong>WinDriver</strong>/samples/pci_diag/<br />
3. “make” Kernel PlugIn <br />
KP_PCI :<br />
make -C kp_pci /SOLARIS<br />
DriverWizard Kernel PlugIn <br />
:<br />
make -C kermode/solaris<br />
4. <br />
make -C solaris<br />
64 Kernel PlugIn <br />
64 <strong>WinDriver</strong> makefile <br />
CC LD <br />
<br />
GCC CC LD <br />
:<br />
Kernel PlugIn :<br />
$ export LD="gcc -m64 -melf64_sparc -nostdlib"<br />
$ export CC="gcc -m64 -isystem /usr/include/"<br />
:<br />
146
12 KERNEL PLUGIN <br />
$ export LD="gcc -m64"<br />
$ export CC="gcc -m64"<br />
12.8 Kernel PlugIn <br />
12.8.1 Windows 98/Me/NT/2000/XP/Server 2003 <br />
1. (xxx.sys) <br />
%windir% \ system32\ drivers <br />
(: WinNT/2000 C:\WINNT\system32\driversWindows XP/Server2003 <br />
C:\Windows\system32\drivers)<br />
: Kernel PlugIn Windows 98/Me Windows NT/2000/XP/Server<br />
2003 PC ( [12.7] <br />
)<br />
2. Windows NT/2000/XP/Server 2003 wdreg.exe ( wdreg_gui.exe) <br />
Windows 98/Me <br />
wdreg16.exe :<br />
<br />
• .sys ”KP_NAME” Kernel PlugIn <br />
<br />
• Windows 98 / Me ”wdreg” “wdreg16” WDREG <br />
[13.2.2] <br />
SYS :<br />
<strong>WinDriver</strong>\util> wdreg -name KP_NAME install<br />
Windows 98 / Me SYS Kernel PlugIn <br />
<br />
12.8.2 Linux <br />
1. Kernel PlugIn <br />
KP_PCI <br />
:<br />
cd <strong>WinDriver</strong>/samples/pci_diag/kp_pci<br />
DriverWizard Kernel PlugIn <br />
( DriverWizard <br />
:<br />
/home/user/<strong>WinDriver</strong>/wizard/my_projects/my_kp/):<br />
cd /kermode/<br />
147
WINDRIVER <br />
2. Kernel PlugIn :<br />
make install<br />
12.8.3 Solaris <br />
Kernel PlugIn root root (super<br />
user) <br />
1. Kernel PlugIn <br />
KP_PCI :<br />
# cd <strong>WinDriver</strong>/samples/pci_diag/kp_pci<br />
DriverWizard Kernel PlugIn <br />
( DriverWizard <br />
:<br />
/home/user/<strong>WinDriver</strong>/wizard/my_projects/my_kp/):<br />
# cd /kermode<br />
2. (kp_pci.conf) kernel/drv/ <br />
<br />
KP_PCI Kernel PlugIn kp_pci / <br />
<br />
:<br />
# cp kp_pci.conf /kernel/drv<br />
DriverWizard Kernel PlugIn <br />
kermode/solaris Kernel PlugIn <br />
:<br />
# cp solaris/kp_pci.conf /kernel/drv<br />
3. Kernel PlugIn Solaris <br />
KP_PCI :<br />
# cd SOLARIS<br />
DriverWizard Kernel PlugIn <br />
:<br />
# cd solaris<br />
4. Kernel PlugIn <br />
KP_PCI :<br />
64 :<br />
148
12 KERNEL PLUGIN <br />
# cp kp_pci /kernel/drv/sparcv9<br />
32 :<br />
# cp kp_pci /kernel/drv<br />
: Solaris :<br />
• modinfo – <br />
• rem_drv – <br />
149
WINDRIVER <br />
13 <br />
<br />
13.1 <br />
<br />
<strong>WinDriver</strong> <br />
<br />
(Kernel PlugIn [ 11 ] ) <br />
<br />
: <strong>WinDriver</strong> Kernel PlugInINF <br />
<strong>WinDriver</strong> Plug-and-Play <br />
<br />
13.2 Windows 98/Me/NT/2000/XP/Server 2003<br />
13.2.1 Windows <br />
Windows <br />
• WDM (Windows Driver Model) : Windows 98 / Me / 2000 / XP / Server 2003 .sys <br />
windrvr6.sysWDM INF <br />
<br />
• WDM / : Plug-and-Play Windows OS (Windows NT4.0) <br />
Windows 98/Me .vxd Kernel PlugIn (<br />
MyKPDriver.sys) <br />
: <strong>WinDriver</strong> 6.21 .vxd <br />
<strong>WinDriver</strong> Windows (windrvr6.sys) WDM <br />
wdreg <br />
150
13 <br />
13.2.2 WDREG <br />
<strong>WinDriver</strong> Windows<br />
( INF )Windows<br />
2000 / XP / Server 2003 wdreg wdreg_gui 2 <br />
<strong>WinDriver</strong>\util <br />
wdreg_gui <br />
wdreg <br />
Windows 98 / Me wdreg16 <br />
Windows wdreg / wdreg_gui / wdreg16 <br />
<br />
wdreg Windows 2000 / XP / Server 2003 <br />
wdreg wdreg_gui Windows 98 / Me wdreg wdreg16<br />
<br />
: Windows 98 / Me wdreg16 windrvr6.inf WDM <br />
windrv6.sys Kernel PlugIn INF <br />
wdreg16 <br />
13.2.2.1 WDM <br />
wdreg Windows 98/Me/2000/XP/Server 2003 WDM<br />
windrvr6.sys Windows 2000/XP/Server 2003 <br />
Plug-and-Play (PCI PCMCIA ) <strong>USB</strong> windrvr6.sys <br />
INF <br />
:<br />
(1) Windows 98 / Me wdreg16 windrvr6.inf <br />
windrvr6.sys WDM wdreg16 <br />
INF <br />
(2) Kernel PlugIn WDM INF <br />
Windows 98/Me/NT/2000/XP/Server 2003<br />
wdreg Kernel PlugIn <br />
[13.2.2.2] <br />
wdreg :<br />
1. wdreg -inf [-silent] [-log ] [install |<br />
uninstall | enable | disable]<br />
2. wdreg -rescan [-silent] [-log ]<br />
151
WINDRIVER <br />
• <br />
wdreg :<br />
[-inf] – INF <br />
[-rescan ] – enumerator (ROOTACPI<br />
PCI<strong>USB</strong> ) enumerator <br />
[-silent] – ()<br />
[-log ] – (<br />
)<br />
• <br />
wdreg :<br />
[install] – INF <br />
INF <br />
()<br />
[uninstall] – <br />
<br />
[enable] – <br />
[disable] – <br />
<br />
: <strong>WinDriver</strong> / windrvr6.sys <br />
( <strong>WinDriver</strong> <br />
wdreg windrvr6.sys <br />
PCI / PCMCIA / <strong>USB</strong> <br />
())windrvr6.sys <br />
wdreg <br />
PC <br />
<br />
13.2.2.2 WDM (Windows NT 4.0 windrvr6.sys Kernel PlugIn <br />
)<br />
wdreg WDM (Windows NT4.0 <br />
windrvr6.sys Windows 98/Me/NT/2000/XP/Server 2003 Kernel PlugIng ) <br />
<br />
:<br />
wdreg [-file ] [-name ] [-startup ] [-silent] [-log<br />
] Action [Action ...]<br />
152
13 <br />
• <br />
wdreg :<br />
[-startup] – 1 <br />
<br />
• boot: <br />
OS (Atdisk) <br />
<br />
• system: OS <br />
• automatic: Service Control Manager <br />
<br />
• demand: Service Control Manager <br />
()<br />
• disabled: <br />
: -statup automatic <br />
[-name] – Kernel PlugIn (wdreg<br />
windrvr6 )<br />
<br />
(*.sys ) <br />
KernelPlugIn KP_Init() <br />
<br />
strcpy (kpInit->cDriverName , XX_DRIVER_NAME)<br />
[-file] – Kernel PlugIn wdreg <br />
<br />
(*.sys )<br />
wwdreg Windows (\system32\drivers) <br />
<br />
<br />
:<br />
WDREG -name -file install<br />
[-silent] – <br />
[-log ] – <br />
153
WINDRIVER <br />
• <br />
wdreg :<br />
[create] – Windows <br />
<br />
[delete] – <br />
<br />
[start] – start create <br />
<br />
[stop] – <br />
: windrvr6.sys <br />
( <strong>WinDriver</strong> <br />
)<br />
wdreg <br />
• <br />
wdreg :<br />
[install] – <br />
wdreg stop (<br />
) wdreg start (<br />
) wdreg start <br />
[uninstall] – <br />
<br />
wdreg stop wdreg delete <br />
<br />
: <strong>WinDriver</strong> windrvr6.sys (<strong>WinDriver</strong><br />
) <br />
install uninstall <strong>WinDriver</strong> <br />
windrvr6.sys <br />
wdreg <br />
<br />
154
13 <br />
13.2.3 windrvr6.sys INF / <br />
<strong>WinDriver</strong> windrvr6.sys (<strong>WinDriver</strong> ) <br />
<br />
windrvr6.sys / wdreg <br />
WDM OS Plug-and-Play INF<br />
Windows 2000 / XP / Server 2003 wdreg <br />
wdreg <br />
:<br />
• Windows 98 / Me / 2000 / XP / Server 2003 windrvr6.sys :<br />
wdreg –inf [windrvr6.inf ] install<br />
windrvr6.inf windrvr6.sys <br />
<br />
• Windows 2000 / XP / Server 2003 C:\temp device.inf <br />
INF :<br />
wdreg –inf c:\tmp\device.inf install<br />
• Windows NT windrvr6.sys :<br />
wdreg install<br />
<br />
wdreg create start<br />
/ INF ”install”<br />
“uninstall” <br />
13.2.4 Kernel PlugIn / <br />
<strong>WinDriver</strong> Kernel PlugIn <strong>WinDriver</strong> <br />
windrvr6.sysKernel PlugIn <br />
windrvr6.sys Kernel PlugIn <br />
<br />
: Windows 98/ME Kernel PlugIn <br />
Windows Kernel PlugIn <br />
<br />
Kernel PlugIn (.sys) / windrvr6.sys <br />
”name” (Kernel PlugIn ) wdreg <br />
<br />
: *.sys <br />
155
WINDRIVER <br />
:<br />
• KPDriver.sys KrenelPlugin <br />
wdreg -name KPDriver install<br />
• MPEG_Encoder Kernel PlugIn MPEGENC.sys <br />
wdreg -name MPEG_Encoder -file MPEGENC install<br />
• KPDriver.sys KernelPlugIn <br />
wdreg -name KPDriver uninstall<br />
• MPEG_Encoder KernelPlugIn MPEGENC.sys <br />
<br />
wdreg -name MPEG_Encoder -file MPEGENC uninstall<br />
13.3 Linux<br />
• Linux <strong>WinDriver</strong> <br />
/sbin/modprobe windrvr6<br />
• <strong>WinDriver</strong> <br />
/sbin/rmmod windrvr6<br />
• Linux wdreg windrvr6.o/.ko <br />
() :<br />
wdreg .<br />
windrvr6.o <br />
wdreg windrvr6.o.<br />
13.4 Solaris<br />
• Solaris <strong>WinDriver</strong> <br />
/usr/sbin/add_drv windrvr6<br />
• <strong>WinDriver</strong> <br />
/usr/sbin/rem_drv windrvr6<br />
156
14 <br />
14 <br />
<br />
<br />
: Windows 2000 / XP / Server 2003 “wdreg” <br />
“wdreg_gui” <br />
GUI <br />
Windows 98 / Me “wdreg” “wdreg16” <br />
wdreg 13 <br />
14.1 <strong>WinDriver</strong> <br />
<strong>WinDriver</strong> <strong>WinDriver</strong>\docs <br />
(order.txt) FAX <br />
Registered () <strong>WinDriver</strong> <br />
4.2 <br />
<br />
14.2 Windows 98/Me/2000/XP/Server 2003 <br />
<br />
<br />
windrvr6.sys windrvr6.inf <br />
(Plug-and-Play – PCI / <strong>USB</strong> ) INF Kernel PlugIn () <br />
<strong>WinDriver</strong> <br />
wdreg <br />
: SYS <strong>WinDriver</strong> 6.21<br />
.vxd <br />
157
WINDRIVER <br />
14.2.1 <br />
<br />
• / DLL<br />
• windrvr6.sys (<strong>WinDriver</strong>\redist )<br />
• windrvr6.inf (<strong>WinDriver</strong>\redist )<br />
• wd_api800.dll (<strong>WinDriver</strong>\redist 32 32<br />
64 64 <br />
)<br />
wdapi800_32.dll (<strong>WinDriver</strong>\redist 32 64<br />
)<br />
• INF (PCI / <strong>USB</strong> )DriverWizard <br />
5.2 <br />
• Kernel PlugIn (.sys) ()<br />
14.2.2 <br />
<br />
<br />
<br />
• <br />
−<br />
windrvr6.sys <br />
<br />
windrvr6.sys <br />
PCI / <strong>USB</strong> <br />
PC PCI / <strong>USB</strong> <br />
INF <br />
<strong>WinDriver</strong> <br />
( 6.0 <br />
)<br />
<strong>WinDriver</strong> <br />
PCI / <strong>USB</strong> (Win 98 / Me [<br />
] – [] []) PC <br />
wdreg <br />
<strong>WinDriver</strong> <br />
PC<br />
<br />
158
14 <br />
−<br />
Windows 2000 INF <br />
<strong>WinDriver</strong> Plug-and-Play <br />
INF %windir%inf <br />
Windows INF<br />
ID / ID <br />
<br />
• <strong>WinDriver</strong> :<br />
1. windrvr6.sys windrvr6.inf <br />
<br />
2. wdreg / wdreg16 <br />
<strong>WinDriver</strong> <br />
Windows 2000 / XP / Server 2003 <br />
:<br />
wdreg -inf install<br />
Windows 98 / Me :<br />
wdreg16 -inf install<br />
windrvr6.inf windrvr6.inf <br />
d:\MyDevice\ :<br />
wdreg -inf d:\MyDevice\windrvr6.inf install<br />
<strong>WinDriver</strong> <strong>WinDriver</strong>\util wdreg <br />
<br />
13 <br />
wdreg <br />
<br />
wdreg <br />
windrvr6.sys Windows <br />
(%windir%\system32\driver) <br />
<br />
INF <br />
<br />
<br />
• INF (windrvr6.sys <br />
Plug and Play ):<br />
• Windows 2000 / XP / Server 2003: wdreg INF <br />
<br />
159
WINDRIVER <br />
Windows 2000 / XP / Server 2003 INF <br />
Windows wdreg <br />
install :<br />
wdreg -inf < INF > install<br />
Windows 2000 INF <br />
(<strong>WinDriver</strong> Plug and Play <br />
) INF %windir%\inf<br />
INF <br />
Windows <br />
INF ID / ID<br />
<br />
• Windows 98 / Me: 14.4 Windows [<br />
] [ ] INF<br />
<br />
• Kernel PlugIn :<br />
Kernel PlugIn 14.2.3 <br />
<br />
• wdapi800.dll :<br />
( DriverWizard <strong>WinDriver</strong> ) <br />
/ DLL wdapi800.dll DLL <br />
%windir%\system32 <br />
32 / DLL 64 <br />
wdapi800_32.dll wdapi800.dll <br />
%windir%\sysWOW64 <br />
64 32 <br />
64 wdapi800.dll %windir%\system32 <br />
32 %windir%\sysWOW64 <br />
Windows x64 64 32 <br />
32 <br />
<strong>WinDriver</strong>\redist system64.exe 64 <br />
<br />
• / DLL :<br />
/ DLL <br />
<br />
160
14 <br />
14.2.3 Kernel PlugIn <br />
: <br />
<br />
Kernel PlugIn <br />
1. Kernel PlugIn (.sys) Windows <br />
(%windir%\system32\drivers)<br />
2. wdreg Windows <br />
Kernel PlugIn <br />
SYS Kernel PlugIn :<br />
wdreg -name < (sys )> install<br />
wdreg <strong>WinDriver</strong>\util <br />
13 ( 13.2.4 Kernel PlugIn<br />
) <br />
14.3 Windows NT 4.0 <br />
<br />
<strong>WinDriver</strong> <br />
(windrvr6.sys) Kernel PlugIn <br />
<strong>WinDriver</strong> <br />
<br />
<br />
14.3.1 <br />
<br />
• / DLL<br />
• Windows NT windrvr6.sys (<strong>WinDriver</strong>\redist )<br />
• wdapi800.dll (<strong>WinDriver</strong>\redist )<br />
• Kernel PlugIn (.sys) ()<br />
161
WINDRIVER <br />
14.3.2 <br />
: <br />
<br />
<br />
1. windrvr6.sys <br />
2. windrvr6.sys Windows <br />
(%windir%\system32\drivers)<br />
3. wdreg Windows <br />
windrvr6.sys <br />
<br />
wdreg install<br />
wdreg <strong>WinDriver</strong>\util <br />
13 <br />
4. Kernel PlugIn 14.2.3 <br />
<br />
5. ( DriverWizard <strong>WinDriver</strong> ) <br />
/ DLL wdapi800.dll <br />
DLL %windir%\system32 <br />
6. / DLL <br />
<br />
14.3.3 Kernel PlugIn <br />
: <br />
<br />
Kernel PlugIn <br />
1. Kernel PlugIn (.sys) Windows <br />
(%windir%\system32\drivers) <br />
<br />
: windrvr6.sys Windows <br />
(windrvr6.vxd %windir%\system32\drivers) <br />
<br />
<br />
<br />
162
14 <br />
2. wdreg Windows <br />
Kernel PlugIn <br />
:<br />
wdreg -name install<br />
wdreg <strong>WinDriver</strong>\util <br />
13 <br />
14.4 INF <br />
(INF) Windows 98 / Me / 2000 / XP / Server 2003 Plug-and-Play<br />
<br />
INF <strong>USB</strong> PCI <br />
INF <br />
<br />
INF <br />
INF INF <br />
INF <br />
DriverWizard / INF <br />
<strong>WinDriver</strong> OS INF <br />
<br />
<strong>USB</strong> windrvr6.sys <strong>WinDriver</strong><br />
(DriverWizard ) INF<br />
DriverWizard INF <br />
<br />
DriverWizard INF ( 5.2 <br />
) INF (<br />
)<br />
14.4.1 INF <br />
• DriverWizard <strong>USB</strong> <br />
• Windows [] <br />
<br />
• Windows 98 / Me / 2000 / XP / Server 2003 OS PCI <br />
<br />
• OS <strong>USB</strong> <br />
• Plug-and-Play <br />
INF <br />
163
WINDRIVER <br />
• <br />
14.4.2 INF <br />
: Windows 98 / Me /2000 / XP / Server 2003 INF <br />
<br />
• Windows 2000 / XP / Server 2003 <br />
Windows 2000 / XP / Server 2003 install wdreg <br />
INF <br />
wdreg -inf install<br />
13.2.2 <br />
PC DriverWIzard INF DriverWizard [INF generation]<br />
[Automatically Install the INF file] <br />
INF ( 5.2 )<br />
Windows 2000 / XP / Server 2003 INF <br />
<br />
• Windows [] :<br />
<br />
<br />
• Windows [ / ]:<br />
[] [<br />
] [ ] <br />
• Windows [ ]:<br />
[] [] <br />
[] Windows XP Windows Server<br />
2003 [] [] <br />
INF <br />
<br />
wdreg INF <br />
<br />
• Windows 98 / Me <br />
Windows 98 / Me PCI / <strong>USB</strong> INF <br />
[ ] [ ] <br />
<br />
• Windows []:<br />
164
14 <br />
: <br />
() <br />
Windows [] ([<br />
] ) <br />
1. Windows [] <br />
<br />
<br />
2. Windows []<br />
INF <br />
<br />
• Windows [ ]:<br />
1. Windows [ ] : [] [] <br />
([ ] [] ) [ <br />
] <br />
2. [ ] [<br />
] [] <br />
[] [ (<br />
)] PCI [ PC] [PCI ] []<br />
<strong>USB</strong> [ PC] [PCI ] [<strong>USB</strong> <br />
( OHCI / EHCI )<br />
PCI] [<strong>USB</strong> ] [] <br />
3. [ ] <br />
INF <br />
14.4.3 INF <br />
: Windows 98 / Me /2000 / XP / Server 2003 <br />
1. Windows 2000 <strong>WinDriver</strong> PCI / <strong>USB</strong> <br />
INF INF Windows<br />
Windows INF (%windir%inf) <br />
INF INF <br />
ID / ID <br />
2. INF <br />
• Windows 2000 / XP / Server 2003 INF <br />
wdreg install Windows 2000 / XP / Server<br />
2003 INF <br />
165
WINDRIVER <br />
wdreg -inf install<br />
13.2.2 <br />
PC DriverWizard INF <br />
(DriverWizard [INF generation] [Automatically Install the INF file] <br />
)INF 5.2 <br />
Windows 2000 / XP / Server 2003INF <br />
<br />
• Windows []: <br />
<br />
<br />
• Windows []: [ ] <br />
[] [] [ <br />
] <br />
• Windows [ ]: [ ] <br />
[] [] <br />
Windows XP Windows Server 2003 <br />
<br />
INF <br />
INF INF <br />
[] INF <br />
INF wdreg <br />
INF <br />
• Windows 98 / Me Windows [<br />
] [ ] INF <br />
<br />
• Windows []:<br />
: <br />
() <br />
Windows [] ([<br />
] ) <br />
a. Windows [] <br />
<br />
()<br />
b. Windows [] <br />
<br />
INF <br />
166
14 <br />
• Windows [ ]:<br />
a. Windows [ ] [] []<br />
([ ] [] <br />
) [ ] <br />
b. [ ] [<br />
] [] <br />
[] [ (<br />
)] PCI PC | PCI | <br />
<strong>USB</strong> PC | PCI | <strong>USB</strong> <br />
( OHCI / EHCI ) PCI |<br />
<strong>USB</strong> | <br />
c. [ ] <br />
INF <br />
14.5 Windows CE <br />
<strong>WinDriver</strong> Windows CE <br />
<br />
1. <strong>WinDriver</strong> DLL (windrvr6.dll) <br />
<br />
• CE <strong>WinDriver</strong> :<br />
<strong>WinDriver</strong>\redist\WINCE\TARGET_CPU windrvr6.dll <br />
Windows CE Windows\ <br />
• CE :<br />
windrvr6.dll <strong>WinDriver</strong>\redist\TARGET_CPU <br />
%_FLATRELEASEDIR% PROJECT_WD.BIB<br />
PROJECT.BIB <strong>WinDriver</strong><br />
Windows CE NK.BIN <br />
MAKEIMG.EXE Windows CE NK.BIN <br />
4.2.2 <strong>WinDriver</strong> CE CE Platform Builder <br />
<br />
2. Windows CE <strong>WinDriver</strong> <br />
• CE <strong>WinDriver</strong> :<br />
PROJECT_WD.REG <br />
CE Windows CE Pocket Registry <br />
Windows CE Platform SDK Remote CE Registry Editor Tool <br />
167
WINDRIVER <br />
Remote CE Registry Editor Tool Windows Host<br />
System Windows CE <br />
• CE :<br />
MAKEIMG.EXE Windows CE <br />
Windows CE ETK PROJECT.REG PROJECT_WD.REG <br />
<br />
: x86 PCI <br />
PCI PROJECT_WD.REG PROJECT.REG <br />
<br />
3. / DLL <br />
<br />
( DriverWizard <strong>WinDriver</strong> ) <br />
/ DLL wdapi800.dll <br />
DLL PC <strong>WinDriver</strong>\redist\WINCE\ <br />
Windows\ <br />
14.6 Linux <br />
Linux <br />
Linux <br />
<br />
<br />
Linux <br />
<br />
14.6.1 <strong>WinDriver</strong> Kernel <br />
windrvr6.o/.ko windrvr6.o <br />
Linux <br />
<strong>WinDriver</strong> <br />
• windrvr_gcc_v2.awindrvr_gcc_v3.a windrvr_gcc_v3_regparm.a:<br />
<strong>WinDriver</strong> <br />
windrvr_gcc_v2.a GCC v2.x.x <br />
windrvr_gcc_v3.a GCC v3.x.x <br />
windrvr_gcc_v3_regparm regparm GCC v3.x.x <br />
<br />
• linux_wrappers.c/h: <strong>WinDriver</strong> Linux <br />
<br />
168
14 <br />
• linux_<strong>com</strong>mon.hwindrvr.hwd_ver.h wdusb_interface.h: <br />
<strong>WinDriver</strong> <br />
(wdusb_interface.h <strong>USB</strong> PCI/PCMCIA/ISA )<br />
• wdusb_linux.c: <strong>USB</strong> <strong>USB</strong> <br />
PCI/PCMCIA/ISA <br />
• configure: windrvr6.o/.ko makefile<br />
<br />
• makefile.inwdreg setup_inst_dir: makefile <br />
makefile.in makefile wdreg <br />
<strong>WinDriver</strong>/util setup_inst_dir 3 <br />
<br />
<br />
<br />
14.6.2 /<br />
<br />
<strong>WinDriver</strong> / <br />
<br />
( DriverWizard <strong>WinDriver</strong> ) <br />
/ libwdapi800.so <br />
PC <strong>WinDriver</strong>/lib (32<br />
PowerPC32 x86 IA64 /usr/lib/64 x86 /usr/lib64) <br />
<br />
/ <br />
( <br />
) Jungo <br />
libwdapi800.so <br />
<br />
<strong>WinDriver</strong> <br />
<br />
14.6.3 Kernel Plugin <br />
Kernel Plugin () <br />
<br />
Kernel Plugin <br />
Kernel PlugIn Driver Wizard configure <br />
Kernel PlugIn Kernel PlugIn <br />
169
WINDRIVER <br />
configure () <br />
Linux Kernel PlugIn <br />
:<br />
kp_linux_gcc_v2.okp_linux_gcc_v3.okp_linux_gcc_v3_regparm.o<br />
kp_wdapi800_gcc_v2.akp_wdapi800_gcc_v3.a kp_wdapi800_gcc_v3_regparm.a<br />
xxx_gcc_v2.o/axxx_gcc_v3.o/axxx_gcc_v3_regparm.o/a GCC<br />
v2.x.xGCC v3.x.xGCC v3.x.x (regparm ) <br />
<br />
14.6.4 <br />
/ DLL (/usr/local/bin ) <br />
make gmake <strong>WinDriver</strong> <br />
Kernel PlugIn <br />
14.7 Solaris <br />
Solaris <br />
<br />
• <strong>WinDriver</strong> : <strong>WinDriver</strong> windrvr6 <br />
windrvr6.cnf <br />
• / : <br />
<br />
<br />
• ( DriverWizard <strong>WinDriver</strong> ) <br />
/ libwdapi800.so <br />
PC <strong>WinDriver</strong>/lib <br />
(32 SPARC32 x86 /lib/3264 <br />
SPARC /lib/64) <br />
• Kernel Plugin : Kernel Plugin mykp mykp.cnf <br />
<br />
• : (/usr/local/bin )<br />
<strong>WinDriver</strong> <br />
( <strong>WinDriver</strong> )<br />
install_windrvr6 <br />
170
14.8 VxWorks <br />
14 <br />
VxWorks <br />
<br />
• <strong>WinDriver</strong> : <strong>WinDriver</strong> <br />
windrvr6.o/.ko <br />
• / DLLyour_drv.out <br />
/ DLL <br />
VxWorks <br />
<br />
1. windrvr6.o/.ko your_drv.out VxWorks <br />
<br />
VxWorks Tornado II Project MACROS <br />
EXTRA_MODULES windrvr6.o/.ko your_drv.out <br />
<br />
<br />
2. windrvr6.o /.ko drvrInit() <br />
<br />
drvrInt() (<strong>WinDriver</strong> ) <br />
usrAppInit.c (Tornado II <br />
) usrAppInit.c VxWorks <br />
<br />
171
WINDRIVER <br />
15 <br />
<strong>WinDriver</strong> <strong>USB</strong> Device<br />
Cypress EZ-<strong>USB</strong> FX2LP CY7C68013AMicrochip PIC18F4550Philips<br />
PDI<strong>USB</strong>D12 Silicon Laboratories C8051F320 <strong>USB</strong><br />
<strong>WinDriver</strong> <strong>USB</strong> Device <br />
<br />
<strong>WinDriver</strong> <strong>USB</strong> Device Windows (<br />
15.2 )<br />
15.1 <strong>WinDriver</strong> <strong>USB</strong> Device <br />
<strong>WinDriver</strong> <strong>USB</strong> Device Cypress EZ-<strong>USB</strong> FX2LP CY7C68013AMicrochip PIC18F4550<br />
Philips PDI<strong>USB</strong>D12 Silicon Laboratories C8051F320 <strong>USB</strong> <br />
" <br />
" <br />
<strong>WinDriver</strong> <strong>USB</strong> <br />
<strong>USB</strong> <br />
<br />
<strong>USB</strong> <strong>USB</strong> (Universal Serial Bus) ( 3 ) <br />
<strong>USB</strong> 2 : <strong>USB</strong> SIE (Serial<br />
Interface Engine) <br />
PROM<br />
EPROMEEPROM ROM <br />
<br />
<strong>WinDriver</strong> <strong>USB</strong> Device " " GUI <br />
<strong>USB</strong> <br />
<strong>WinDriver</strong> <strong>USB</strong> Device " " [15.3.5]<br />
<strong>USB</strong> <br />
<br />
<br />
Microchip PIC18F4550 <strong>USB</strong> Mass Storage Class <br />
(http://www.usb.org/developers/devclass_docs/usb_msc_overview_1.2.pdf) <strong>USB</strong> Mass Storage Bulk-Only<br />
172
15 WINDRIVER <strong>USB</strong> DEVICE<br />
Transport (http://www.usb.org/developers/devclass_docs/usbmassbulk_10.pdf) Mass Storage API<br />
Mass Storage <br />
<strong>WinDriver</strong> <strong>USB</strong> Device <strong>WinDriver</strong> <strong>USB</strong> DriverWizard <br />
<strong>USB</strong> <br />
[15.4.1] ID <br />
(alternate settings) (endpoints) GUI <br />
[15.4.2]<br />
DriverWizard API <br />
API <strong>WinDriver</strong> <strong>USB</strong> Device API <br />
<br />
Microchip PIC18F4550 <strong>WinDriver</strong> Mass Storage <strong>USB</strong> <br />
GUI ( 15.4.1 4 )<br />
<strong>WinDriver</strong> <strong>USB</strong> Device Microchip<br />
PIC18F4550 Mass Storage Mass Storage <br />
API <br />
<strong>WinDriver</strong> <strong>USB</strong> Device DriverWizard <br />
API <br />
API <br />
[15.3]<br />
API 9 <strong>USB</strong> 2.0<br />
<br />
<br />
Microchip PIC18F4550 Mass Storage API <strong>USB</strong><br />
Mass Storage Class <br />
[15.4.3] <strong>WinDriver</strong> <strong>USB</strong> Device <br />
API <br />
[15.4.3.2][15.4.3.3]<br />
<br />
5 <strong>WinDriver</strong> <strong>USB</strong> DriverWizard <br />
<strong>WinDriver</strong> <strong>USB</strong> Device DriverWizard <br />
DriverWizard <br />
<br />
[15.4.4]<br />
<strong>WinDriver</strong> <strong>USB</strong> <br />
<strong>WinDriver</strong> <strong>USB</strong> <br />
[15.4.5]<br />
173
WINDRIVER <br />
15.2 <br />
<strong>WinDriver</strong> <strong>USB</strong> Device <br />
<br />
• : Windows 98/Me/2000/XP/Server 2003<br />
Cypress EZ-<strong>USB</strong> FX2LP CY7C68013AMicrochip PIC18F4550 Silicon Laboratories<br />
C8051F320 Windows<br />
2000/XP/Server 2003 <br />
Philips PDI<strong>USB</strong>D12 Windows<br />
98/Me/2000/XP/Server 2003 DOS <br />
PDI<strong>USB</strong>D12 DOS <br />
• CPU : 32 x86 64 (x64: AMD64 EM64T)<br />
<br />
• <br />
PC :<br />
o Cypress EZ-<strong>USB</strong> FX2LP CY7C68013A :<br />
Cypress EZ-<strong>USB</strong> FX2LP Development Kit<br />
o Microchip PIC18F4550 :<br />
Microchip MCC18 Toolchain<br />
o Cypress EZ-<strong>USB</strong> FX2LP CY7C68013A Silicon Laboratories C8051F320 <br />
:<br />
Keil Cx51 Development Tools for 8x51 ( 6.0 )<br />
o Philips PDI<strong>USB</strong>D12 :<br />
32 DOS C <br />
• () <br />
:<br />
o Cypress EZ-<strong>USB</strong> FX2LP CY7C68013A Silicon Laboratories C8051F320 <br />
:<br />
Keil uVision IDE ( 2.0 )<br />
o Microchip PIC18F4550 :<br />
Microchip MPLAB IDE ( 7.20)<br />
o Silicon Laboratories C8051F320 :<br />
Silicon Laboratories IDE ( 1.9)<br />
174
o Philips PDI<strong>USB</strong>D12 :<br />
15 WINDRIVER <strong>USB</strong> DEVICE<br />
Borland C++ ( 3.1)32 DOS (''Turbo C'')<br />
15.3 <strong>WinDriver</strong> (WDF) <br />
<br />
<strong>WinDriver</strong>\wdf <br />
<br />
wdf\ :<br />
• cypress\ : Cypress EZ-<strong>USB</strong> FX2LP CY7C68013A <br />
<br />
• microchip\ : PIC18F4550 <br />
<br />
• philips\ : Philips PDI<strong>USB</strong>D12 <br />
<br />
• silabs\ : Silicon Laboratories C8051F320 <br />
<br />
15.3.1 cypress <br />
<strong>WinDriver</strong>\wdf\cypress\ :<br />
• FX2LP\ : FX2LP CY7C68013A <br />
( ''FX2LP '' )<br />
FX2LP\ :<br />
• include\ :<br />
o wdf_cypress_lib.h: FX2LP<br />
<br />
(<br />
wdf_cypress_fx2lp_eval.lib<br />
DriverWizard <br />
[15.3.3] <strong>WinDriver</strong> <strong>USB</strong> Device <br />
) <br />
o wdf_cypress.h: Cypress FX2LP API <br />
#include <br />
o periph.h: FX2LP <strong>USB</strong> <br />
<br />
175
WINDRIVER <br />
<br />
periph.c <strong>USB</strong> <br />
DriverWizard <br />
DriverWizard [15.4.3.1] <br />
<br />
• lib\ :<br />
o wdf_cypress_fx2lp_eval.lib: FX2LP <br />
([15.3.5] )<br />
• samples\ : FX2LP <br />
o loopback\ : OUT <br />
FIFO IN FIFO <br />
<br />
• periph.c: periph.h () <br />
<br />
• wdf_dscr.a51: FX2LP <br />
<br />
• build.bat: <br />
: <br />
(wdf_cypress_fx2lp_eval.lib) <br />
• loopback_eval.hex: build.bat <br />
FX2LP <br />
: <br />
(wdf_cypress_fx2lp_eval.lib) <br />
15.3.2 microchip <br />
<strong>WinDriver</strong>\wdf\microchip\ :<br />
• 18F4550\ : PIC18F4550 <br />
<br />
18F4550\ :<br />
• include\ :<br />
o class\msd\ : PIC18F4550 <strong>USB</strong> Mass Storage Device<br />
Class API <br />
176
15 WINDRIVER <strong>USB</strong> DEVICE<br />
• wdf_msd.h: PIC18F4550 Mass Storage <br />
<br />
<br />
• wdf_disk.h: PIC18F4550 Mass Storage Device <br />
<br />
<br />
<br />
DriverWizard [12.4.3.1] <br />
Stub <br />
<strong>WinDriver</strong>\wdf\microchip18F4550\samples\msd\sdcard.c SD<br />
Card <br />
<br />
o wdf_microchip_lib.h: PIC18F4550 <br />
<br />
wdf_usb9.hwdf_msd.h (Mass Storage <br />
) (<br />
wdf_microchip_18f4550_eval.lib /<br />
wdf_microchip_msd_18f4550_eval.lib (Mass Storage)<br />
DriverWizard <br />
<strong>WinDriver</strong> <strong>USB</strong> Device <br />
15.3.5 ) <br />
o wdf_usb9.h: 9 <strong>USB</strong> 2.0 <br />
<strong>USB</strong> <br />
o wdf_microchip.h: PIC18F4550 <br />
PIC18F4550 <br />
<br />
<br />
<br />
o types.h: PIC18F4550 <br />
o periph.h: PIC18F4550 <strong>USB</strong> <br />
<br />
periph.c<br />
<strong>USB</strong> <br />
DriverWizard <br />
DriverWizard [15.4.3.1] <br />
<br />
177
WINDRIVER <br />
• lib\ :<br />
o wdf_microchip_18f4550_eval.lib: PIC18F4550 <br />
<br />
o wdf_microchip_msd_18f4550_eval.lib: PIC18F4550 Mass Storage<br />
<br />
15.3.5 <br />
• samples\ : PIC18F4550 <br />
o loopback\ : OUT <br />
FIFO IN FIFO <br />
<br />
• periph.c: periph.h () <br />
C <br />
• wdf_dscr.h: PIC18F4550 <br />
<br />
• wdf_dscr.c: PIC18F4550 <br />
<br />
• build.bat: <br />
: <br />
(wdf_microchip_18f4550_eval.lib) <br />
• loopback_eval.hex: build.bat <br />
PIC18F4550 <br />
: <br />
(wdf_microchip_18f4550_eval.lib) <br />
• loopback_eval.lkr: <br />
o msd\ : Mass Storage PIC18F4550<br />
Mass Storage (wdf_microchip_msd_18f4550_eval.lib) <br />
Secure Digital Card (SD ) Microchip PICTail Mass<br />
Storage <br />
SD : EP Memory 512MBLexar<br />
256MB512MB 1GBSunDisk 128MB512MB 2GBSimpleTech<br />
256MB 1GBViking 512MB 256MBATP 1GB<br />
• periph.c: periph.h () <br />
C <br />
178
15.3.3 philips <br />
15 WINDRIVER <strong>USB</strong> DEVICE<br />
• wdf_dscr.h: PIC18F4550 <br />
<br />
• wdf_dscr.c: PIC18F4550 <br />
<br />
• sdcard.h: SD () <br />
<br />
• sdcard.c: SD wdf_disk.h <br />
[15.3.2] Microchip PIC18F4550 Mass Storage <br />
<br />
• build.bat: <br />
: Mass Storage <br />
(wdf_microchip_msd_18f4550_eval.lib) <br />
<br />
• msd_eval.hex: build.bat <br />
PIC18F4550 Mass Storage <br />
: Mass Storage <br />
(wdf_microchip_18f4550_eval.lib) <br />
• msd_eval.lkr: Mass Storage <br />
<strong>WinDriver</strong>\wdf\philips\ :<br />
• d12\ : PDI<strong>USB</strong>D12 <br />
d12\ :<br />
• include\ :<br />
o d12_lib .h: PDI<strong>USB</strong>D12 <br />
<br />
PDI<strong>USB</strong>D12 (<br />
d12_eval.lib <br />
DriverWizard <br />
<strong>WinDriver</strong> <strong>USB</strong> Device 15.3.5<br />
) <br />
o types.h: PDI<strong>USB</strong>D12 <br />
o d12_io.h: <br />
<br />
179
WINDRIVER <br />
<br />
ISA PDI<strong>USB</strong>D12 <br />
x86 PC D12-ISA (PC) Eval Kit ( 1.4) <br />
<strong>WinDriver</strong> <strong>USB</strong> Device <br />
( 15.4.3.2 ) <br />
d12_io.c [15.4.3.1] API <br />
<br />
o periph.h: PDI<strong>USB</strong>D12 <strong>USB</strong> <br />
<br />
periph.c <br />
<strong>USB</strong> <br />
DriverWizard <br />
DriverWizard [15.4.3.1] <br />
• lib\ :<br />
o d12_eval.lib: PDI<strong>USB</strong>D12 [15.3.5]<br />
• Samples\ : PDI<strong>USB</strong>D12 :<br />
o loopback\ : OUT <br />
FIFO IN FIFO <br />
<br />
• periph.c: periph.h () <br />
C <br />
• wdf_dscr.c: PDI<strong>USB</strong>D12 <br />
<br />
• build.bat: <br />
: <br />
(d12_eval.lib) <br />
• LOOPBACK.EXE: build.bat <br />
PDI<strong>USB</strong>D12 :<br />
<br />
(d12_eval.lib) <br />
• lb_eval.mak: Turbo C <br />
makefile<br />
o dma\ : DMA <br />
DMA PDI<strong>USB</strong>D12 DMA DMA x86 <br />
180
15 WINDRIVER <strong>USB</strong> DEVICE<br />
DMA <br />
<br />
<br />
<strong>WinDriver</strong> <strong>USB</strong> Device <br />
( 15.3.5 )<br />
• periph.c: periph.h () <br />
C <br />
• wdf_dscr.c: PDI<strong>USB</strong>D12 <br />
<br />
• build.bat: <br />
: <br />
(d12_eval.lib) <br />
• D12DMA.EXE: build.bat <br />
PDI<strong>USB</strong>D12 DMA <br />
: <br />
(d12_eval.lib) <br />
• dma_eval.mak: Turbo C DMA <br />
makefile<br />
15.3.4 silabs <br />
<strong>WinDriver</strong>\wdf\silabs\ :<br />
• F320\ : C8051F320 <br />
<br />
F320\ :<br />
• include\ :<br />
o wdf_silabs_lib.h: C8051F320 <br />
<br />
(<br />
wdf_silabs_f320_eval.lib<br />
DriverWizard <br />
[15.3.5] <strong>WinDriver</strong> <strong>USB</strong> Device <br />
) <br />
o c8051f320.h: C8051F320 <br />
<br />
o c8051f320regs.h: C8051F320 /<br />
<br />
181
WINDRIVER <br />
o periph.h: C8051F320 <strong>USB</strong> <br />
<br />
<br />
periph.c <strong>USB</strong> <br />
DriverWizard <br />
DriverWizard [15.4.3.1] <br />
<br />
• lib\ :<br />
o wdf_silabs_f320_eval.lib: C8051F320 <br />
([15.3.5] )<br />
• samples\ : C8051F320 <br />
o loopback\ : : OUT <br />
FIFO IN FIFO <br />
<br />
• periph.c: periph.h () <br />
<br />
• wdf_dscr.h: C8051F320 <br />
<br />
• wdf_dscr.c: C8051F320 <br />
<br />
• build.bat: <br />
: <br />
(wdf_silabs_f320_eval.lib) <br />
• loopback_eval.hex: build.bat <br />
C8051F320 <br />
: <br />
(wdf_silabs_f320_eval.lib) <br />
182
15 WINDRIVER <strong>USB</strong> DEVICE<br />
15.3.5 <strong>WinDriver</strong> <strong>USB</strong> Device <br />
<strong>WinDriver</strong> <strong>USB</strong> Device DriverWizard <br />
<strong>USB</strong> API <br />
<strong>WinDriver</strong> <strong>USB</strong> Device <br />
PIC18F4550 Mass Storage <br />
<strong>USB</strong> Mass Storage Class Mass Storage <strong>USB</strong> <br />
API wdf_microchip_msd_18f4550_eval.lib Mass Storage <br />
<br />
DriverWizard 15.4.3.1 <br />
<br />
<strong>WinDriver</strong> <strong>USB</strong> Device <br />
DriverWizard <br />
<br />
: <br />
( 25,000PIC18F4550 Mass Storage <br />
1,000,000) <br />
<strong>WinDriver</strong> <strong>USB</strong> Device <br />
15.4.3.2 <br />
15.3.6 <br />
<strong>WinDriver</strong>\wdf\\\samples\xxx\ (xxx <br />
: Cypress <br />
<strong>WinDriver</strong>\wdf\cypress\FX2LP\samples\loopback) <br />
build.bat (: FX2LP\samples\loopback\build.bat) <br />
build.bat <br />
<br />
• Cypress EZ-<strong>USB</strong> FX2LP CY7C68013A Silicon Laboratories C8051F320 <br />
: build.bat KEIL Keil Development Tools <br />
build.bat Keil<br />
C:\Keil Keil build.bat<br />
<br />
set KEIL=C:\Keil<br />
Keil D:\MyTools\Keil <br />
set KEIL=D:\MyTools\Keil<br />
• CYPRESS Cypress EZ-<strong>USB</strong> Development Kit <br />
build.bat <br />
183
WINDRIVER <br />
C:\Cypress Cypress EZ-<strong>USB</strong> Development Kit <br />
build.bat <br />
set CYPRESS=C:\Cypress<br />
Cypress EZ-<strong>USB</strong> Development Kit D:\Cypress <br />
<br />
set CYPRESS=D:\Cypress<br />
• Microchip PIC18F4550 : MCC MCC18 <br />
build.bat <br />
C:\mcc18 MCC18 Toolchain <br />
build.bat <br />
set MCC=C:\mcc18<br />
MCC18 Toolchain D:\microchip\mcc18 <br />
<br />
set MCC=D:\microchip\mcc18<br />
• Philips PDI<strong>USB</strong>D12 : MCC Turbo C <br />
build.bat <br />
C:\borlandc\ Turbo C <br />
build.bat <br />
set TURBOC=c:\borlandc\<br />
Turbo C D:\TurboC <br />
<br />
set TURBOC=d:\TurboC\<br />
• build.bat <br />
184
15 WINDRIVER <strong>USB</strong> DEVICE<br />
15.4 <strong>WinDriver</strong> <strong>USB</strong> Device <br />
<strong>WinDriver</strong> <strong>USB</strong> Device ( ) <strong>USB</strong> <br />
:<br />
15.4.1 Device <strong>USB</strong> <br />
<strong>WinDriver</strong> <strong>USB</strong> Device DriverWizard <strong>USB</strong> <br />
:<br />
1. DriverWizard :<br />
o [] - [] - [<strong>WinDriver</strong>] - [DriverWizard] <br />
o DriverWizard <br />
o <strong>WinDriver</strong>\wizard\wdwizard.exe <br />
<br />
2. [Choose Your Project] [New device firmware project] <br />
[Next >>] <br />
DriverWizard [File] <br />
<br />
<br />
15.1: <br />
3. [Choose Your Development Board] [OK] <br />
<br />
185
WINDRIVER <br />
15.2: <br />
4. Microchip PIC18F4550 [Choose Your Device Function] <br />
<br />
15.3: Microchip – <br />
5. [Edit Device Descriptor] ID<br />
<br />
<br />
186
15 WINDRIVER <strong>USB</strong> DEVICE<br />
15.4: <br />
6. [Configure Your Device] <strong>USB</strong> <br />
15.5: <br />
187
WINDRIVER <br />
<br />
<br />
<br />
<br />
<br />
<br />
DriverWizard <br />
2 <br />
<br />
Silicon Laboratories C8051F320 Philips PDI<strong>USB</strong>D12 <br />
<br />
Microchip PIC18F4550 Mass Storage <br />
<br />
<br />
<br />
<br />
<br />
<br />
15.6: <br />
Philips PDI<strong>USB</strong>D12 () <br />
<br />
ISO_IN_OUT <br />
15.7 <br />
188
15 WINDRIVER <strong>USB</strong> DEVICE<br />
15.7: Philips PDI<strong>USB</strong>D12 – <br />
Cypress EZ-<strong>USB</strong> FX2LP CY7C68013A <br />
<br />
Microchip PIC18F4550 Mass Storage <br />
[Edit Inquiry Descriptor] SCSI <br />
<br />
15.8: Microchip PIC18F4550 Mass Storage – <br />
189
WINDRIVER <br />
<br />
<br />
7. [File] DriverWizard<br />
<br />
xxx.wdp DriverWizard <br />
<br />
<strong>USB</strong> DriverWizard (<br />
[15.4.2] ) <br />
15.4.1.1 EZ-<strong>USB</strong> <br />
EZ-<strong>USB</strong> EZ-<strong>USB</strong> <br />
(EZ-<strong>USB</strong>_TRM.pdf) 1.18 <br />
DriverWizard Cypress EZ-<strong>USB</strong> FX2LP CY7C68013A <br />
<br />
Cypress\<strong>USB</strong>\Doc\FX2LP\ EZ-<strong>USB</strong> <br />
URL :<br />
http://www.keil.<strong>com</strong>/dd/docs/datashts/cypress/fx2_trm.pdf<br />
<strong>USB</strong> 2.0 <strong>USB</strong> <br />
<strong>USB</strong> <br />
FIFO 4 <br />
<strong>USB</strong> IN0 IN15 OUT0 OUT15 <br />
32 <br />
EZ-<strong>USB</strong> <br />
OUT IN <br />
<br />
EZ-<strong>USB</strong> 1.16 3 64 4KB <br />
12 3 64 <br />
190
15 WINDRIVER <strong>USB</strong> DEVICE<br />
15.9: EZ-<strong>USB</strong> <br />
15.4.2 <br />
[Configure Your Device] <br />
<br />
• [Next >>] Alt+N <br />
• [Generate Code] <br />
• [Build] [Generate Code] <br />
[Select Code Generation Options] :<br />
191
WINDRIVER <br />
15.10: <br />
PC :<br />
• Cypress EZ-<strong>USB</strong> FX2LP CY7C68013A Silicon Laboratories C8051F320<br />
: [Your Keil base directory] Keil Cx51 Development Tools for 8x51 <br />
<br />
• Cypress EZ-<strong>USB</strong> FX2LP CY7C68013A : [Your Cypress <strong>USB</strong> directory] <br />
Cypress EZ-<strong>USB</strong> FX2LP Development Kit Cypress\<strong>USB</strong> <br />
• Microchip PIC18F4550 : [Your mcc18 base directory] MCC18 Toolchain<br />
<br />
• Philips PDI<strong>USB</strong>D12 : [Your Turbo C base directory] Turbo C <br />
<br />
192
15 WINDRIVER <strong>USB</strong> DEVICE<br />
[Select Code Generation Options] <br />
project/make <br />
<br />
Keil uVision IDE Silicon Laboratories IDE <br />
IDE [IDE to Invoke] [IDE to Invoke]<br />
IDE <br />
<strong>USB</strong> <strong>WinDriver</strong> <strong>USB</strong><br />
<strong>WinDriver</strong> <br />
<br />
() <strong>USB</strong> <strong>WinDriver</strong> <strong>USB</strong> <br />
DriverWizard 5 <br />
15.4.5 <br />
15.4.3 <br />
<br />
<strong>WinDriver</strong> <strong>USB</strong> Device API <br />
<br />
<strong>USB</strong> API <br />
: <strong>WinDriver</strong> <br />
:<br />
• FX2LP CY7C68013A : EZ-<strong>USB</strong>_TRM.pdf - 15.6Endpoint<br />
Configuration<br />
Cypress\<strong>USB</strong>\Doc\FX2LP\ URL <br />
:<br />
http://www.keil.<strong>com</strong>/dd/docs/datashts/cypress/fx2_trm.pdf<br />
• PIC18F4550 : 39632b.pdf ( 17.3<strong>USB</strong> RAM 17.4<br />
Buffer Descriptors and the Buffer Descriptors Table<br />
Web <br />
http://ww1.microchip.<strong>com</strong>/downloads/en/DeviceDoc/39632b.pdf<br />
• PDI<strong>USB</strong>D12 : PDI<strong>USB</strong>D12-08.pdf Web <br />
http://www.semiconductors.philips.<strong>com</strong>/pip/PDI<strong>USB</strong>D12D.html#datasheet<br />
• Silicon Laboratories C8051F320 : C8051F32xRev1_1.pdf (<br />
15.5FIFO Management 15.11 Configuring Endpoints 1-3<br />
Silabs\MCU\Documentation\Datasheets\ <br />
(Silicon Laboratories IDE ) Web <br />
<br />
http://www.keil.<strong>com</strong>/dd/docs/datashts/silabs/c8051f32x.pdf .<br />
193
WINDRIVER <br />
15.4.3.1 DriverWizard <strong>USB</strong> <br />
DriverWizard xxx_FW <br />
:<br />
• periph.c: <strong>WinDriver</strong>\wdf\\\include\ periph.h <br />
(: <strong>WinDriver</strong>\wdf\cypress\FX2LP\include\ periph.h) [15.3.1] <br />
<strong>USB</strong> C <br />
DriverWizard <br />
• DriverWizard :<br />
o Cypress EZ-<strong>USB</strong> FX2LP CY7C68013A :<br />
wdf_dscr.a51: <br />
o Microchip PIC18F4550Philips PDI<strong>USB</strong>D12 Silicon Laboratories C8051F320<br />
:<br />
wdf_dscr.c wdf_dscr.h (Microchip Silicon Laboratories): C <br />
<br />
• build.bat: <br />
• xxx.Uv2/mcp/wsp/mak: ([Select Code Generation Options] <br />
/ IDE ) / IDE (Keil uVision / Microchip MPLAB /<br />
Silicon Laboratories IDE / Turbo C) project / make <br />
• Microchip PIC18F4550 :<br />
o xxx.lkr: <br />
o Mass Storage :<br />
• wdf_xxx_hw.c: <br />
(18F4550\include\classmsd\wdf_disk.h <br />
[15.3.2]) stub C <br />
<strong>WinDriver</strong> <strong>USB</strong> Device <br />
<strong>WinDriver</strong> <strong>USB</strong> Device (<br />
15.4.3.2 ) :<br />
• main.c: C <br />
Silicon Laboratories C8051F320 Philips PDI<strong>USB</strong>D12 <br />
<strong>USB</strong> (<strong>USB</strong>_ISR() (Silicon<br />
Laboratories) / UsbISR() (Philips)) Philips ISR <br />
D12-ISA (PC) Eval Kit <br />
x86 <br />
( 15.4.3.2 )<br />
194
15 WINDRIVER <strong>USB</strong> DEVICE<br />
• wdf__lib.c (CypressMicrochip Silicon Laboratories :<br />
wdf_cypress_lib.c) / _lib.c (Philips : d12_lib.c): <br />
<strong>WinDriver</strong> <strong>USB</strong> Device <br />
C <br />
• Microchip PIC18F4550 :<br />
o wdf_usb9.c: wdusb9_.h [15.3.2] <br />
<strong>USB</strong> C <br />
o Mass Storage :<br />
• wdf_msd.c:<br />
<strong>WinDriver</strong>\wdf\microchip\18F4550\include\class\msd\wdf<br />
_msd.h [15.3.2] Mass Storage Class<br />
C <br />
• Philips PDI<strong>USB</strong>D12 :<br />
o d12_ci.h d12_ci.c: PDI<strong>USB</strong>D12 <br />
(d12_ci.h) <br />
C (d12_ci.c)<br />
o d12_io.c: d12_io.h [15.3.2] <br />
C <br />
15.4.3.2 DriverWizard <br />
:<br />
• build.bat <br />
• IDE (Cypress Silicon Laboratories Keil uVision<br />
Microchip Microchip MPLABSilicon Laboratories Silicon Laboratories IDE)<br />
IDE <br />
<br />
xxx.hex (CypressMicrochip Silicon Laboratories <br />
) / XXX.EXE (Philips PDI<strong>USB</strong>D12 ) xxx <br />
<br />
: build.bat project / make <br />
<strong>WinDriver</strong> <strong>USB</strong> Device <br />
(<br />
25,000Microchip PIC18F4550 Mass Storage <br />
1,000,000) ([15.3.5] )<br />
<br />
<br />
195
WINDRIVER <br />
Philips PDI<strong>USB</strong>D12 <br />
ISA PDI<strong>USB</strong>D12 x86 D12-ISA (PC) Eval<br />
Kit DOS <br />
<strong>WinDriver</strong> <strong>USB</strong> Device <br />
x86 (d12_io.hd12_io.c<br />
[15.4.3.1] main.c ISR) <br />
<br />
<br />
Windriver <strong>USB</strong> Device <br />
(xxx.wdp) <strong>WinDriver</strong> <strong>USB</strong> Device <br />
<br />
build.bat <br />
<br />
<br />
15.4.3.3 <br />
<br />
<br />
<strong>WinDriver</strong> <strong>USB</strong> <br />
(Cypress:<br />
<strong>WinDriver</strong>\ cypress\ firmware_sample\WIN32\ download_sample.exeMicrochip:<br />
<strong>WinDriver</strong>\ microchip\ pic18f4550\ bootloader_sample\WIN32\ bootloader_dem<br />
o.exe) Cypress EZ-<strong>USB</strong> FX2LP CY7C68013A Microchip<br />
PIC18F4550 <br />
15.4.4 <br />
[5.2] DriverWizard <br />
( <strong>USB</strong> ) : <br />
[5.2] <strong>WinDriver</strong> <strong>USB</strong> Device <br />
<br />
15.4.5 <strong>USB</strong> <br />
<strong>WinDriver</strong> <strong>USB</strong> <br />
<strong>WinDriver</strong> 6 <strong>WinDriver</strong> <br />
<br />
[15.4.2] DriverWizard <br />
<strong>WinDriver</strong> <strong>USB</strong> <br />
<br />
196
16 PCI EXPRESS<br />
16 <br />
PCI Express<br />
16.1 PCI Express <br />
PCI Express (PCIe) ( 3GIO 3rd Generation I/O) PC I/O<br />
(IBMDellCompaqHP <br />
Microsoft) <br />
PCI-Express PCI 2.2 <br />
PCI 2.2 <br />
PCI 2.2 <br />
132MB/s <br />
<br />
PCI Express <br />
2 <br />
<br />
PCI Express PCI Express 1 <br />
1 x1 2 <br />
x2 PCI Express x1x2x4x8x12x16 x32 <br />
() PCI Express 500MB/s <br />
x1 500MB/s x2 1,000MB/sx4 <br />
2,000MB/s x8 4,000MB/s x12 6,000MB/sx16 8,000MB/s <br />
32 PCI 132MB/s <br />
PCI Express <br />
<br />
PCI Express <br />
PCI <br />
<br />
<br />
PCI Express PCI Express <br />
PCI PCI Express <br />
()<br />
197
WINDRIVER <br />
PCI Express <br />
PCI Express QoS () PCI Express <br />
(: <br />
) <br />
<br />
PCI AGP PCI-X I/O <br />
PCI Express <br />
PCI Express PCI PCI () <br />
<br />
PCI 2.2 PCI 2.2 PCI Express-to-PCI <br />
PCI Express PCI Express-to-PCI <br />
PCI Express PCI 2.2 <br />
16.2 <strong>WinDriver</strong> PCI Express<br />
<strong>WinDriver</strong> PCI Express PCI <br />
API <br />
DriverWizard PCI Express (<br />
PCI ) <br />
<strong>WinDriver</strong> PCI API PCI Express-to-PCI (: PLX 8111/8114 <br />
PLX 8532 ) PC PCI <br />
<br />
<strong>WinDriver</strong> (Windows Linux) PCI Express <br />
API (WDC_PciReadCfgXXX() WDC_PciWriteCfgXXX() <br />
WD_PciConfigDump() )<br />
PCI Express ( PCI Express <strong>WinDriver</strong> ) <br />
<strong>WinDriver</strong> <br />
198
<strong>WinDriver</strong><br />
<br />
2006 3 29 <br />
<br />
<br />
108-0014 5-1-9 4F<br />
TEL 03-5440-7875 FAX 03-5440-7876<br />
E-MAIL: xlsoftkk@xlsoft.<strong>com</strong><br />
: http://www.xlsoft.<strong>com</strong>/<br />
Copyright © Jungo Ltd. All Rights Reserved.<br />
Translated by<br />
<strong>XLsoft</strong> Corporation<br />
12K Mauchly<br />
Irvine, CA 92618 USA<br />
URL: http://www.xlsoft.<strong>com</strong>/<br />
E-Mail: sales@xlsoft.<strong>com</strong><br />
199