03.11.2014 Views

WinDriver USB - XLsoft.com

WinDriver USB - XLsoft.com

WinDriver USB - XLsoft.com

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!