Het schrijven van een device driver - PowerPoint PPT Presentation

About This Presentation
Title:

Het schrijven van een device driver

Description:

Het schrijven van een device driver voor Windows 2000 Over deze presentatie Tijdsduur is ongeveer n uur Het leren begrijpen van een device driver is erg lastig ... – PowerPoint PPT presentation

Number of Views:156
Avg rating:3.0/5.0
Slides: 77
Provided by: Tommy89
Category:

less

Transcript and Presenter's Notes

Title: Het schrijven van een device driver


1
Het schrijven van een device driver
voor Windows 2000
2
Over deze presentatie
Algemeen
  • Tijdsduur is ongeveer één uur
  • Het leren begrijpen van een device driver is erg
    lastig ?
  • let goed op en maak tijdens relevante
    onderwerpen veel aantekeningen
  • Vragen kunnen gesteld worden na elk deelonderwerp
    en aan het einde

3
Inhoud
Algemeen
  • Introductie (5 min.)
  • Algemene toelichting op device drivers (25 min.)
  • Hulpmiddelen voor schrijven driver (10 min.)
  • Toelichting op PPort voorbeelddriver (15 min.)
  • Toelichting op Cypress EZ-USB oplossing (5 min.)
  • Slot

4
Introductie
5
Introductie
Introductie
  • Wie ben ik
  • Waarom deze stage
  • Voorkennis
  • Werkzaamheden

6
Wie ben ik
Introductie
  • Tommy Sools
  • Student in derde jaar informatica (blok 11)
  • Stagiair bij technische informatica
  • Begeleid door Ruud Ermers

7
Waarom deze stage
Introductie
  • Hobby elektronica
  • Diverse computerinterface projecten die
    natuurlijk een device driver vereisen
  • Op zoek naar USB microcontroller oplossing
  • Poging tot zelfstandig leren device drivers
  • Tenslotte de vraag of er binnen Fontys een module
    bestaat over device drivers

8
Voorkennis
Introductie
  • C binnen informaticamodulen (Visual Studio)
  • Programmeren in C
  • Low Level Programming
  • Interprocescommunicatie
  • Events Exceptions
  • Geheugentechnieken en beheer
  • Gedurende twee kwartalen begeleiden practica C
    Programmeren (Borland C Builder)

9
Voorkennis (2)
Introductie
  • Veel hobbyprojecten met Borland Delphi
  • www.sools.com
  • Programmeren aan administratiepakket Order-Direct
    tijdens eerste stage
  • Hobbyprojecten met 8051 en AVR microcontrollers,
    vooral in assembler taal

10
Werkzaamheden
Introductie
  • Tweede stage, twintig weken,
  • momenteel zesde week
  • Onderzoek doen naar de werking van device drivers
  • Ter oefening een aantal drivers schrijven
  • Practicumhandleiding schrijven over device
    drivers voor Windows 2000

11
Einde introductie
Introductie
  • Interesse vanuit hobby
  • Ruim voldoende voorkennis en ervaring
  • Stage duurt 20 weken
  • Doel is practicumhandleiding schrijven over
    Windows 2000 driverontwikkeling

12
Vragen
  • Er kunnen nu vragen over de introductie gesteld
    worden.

13
Hulpmiddelen
14
Hulpmiddelen
Hulpmiddelen
  • Computersystemen
  • Microsoft Visual Studio 6.0
  • Microsoft Windows 2000 DDK (SP1)
  • DebugView
  • LoadDrv
  • Talloze andere optionele hulpprogrammas

15
Computersystemen
Hulpmiddelen
  • PC voor ontwikkeling
  • PC voor testen

16
Ontwikkelsysteem
Hulpmiddelen
  • Besturingssysteem is niet relevant,
  • bijv. Windows 2000 of XP
  • Driver nooit testen op ontwikkelsysteem

17
Testsysteem
Hulpmiddelen
  • Windows 2000 Professional,
  • met alle service packs en updates
  • Zorgen voor een herstelmogelijkheid,
  • bijv. Norton Ghost

18
Microsoft Visual Studio 6.0
Hulpmiddelen
  • Sjabloon DDAppWiz.awx installeren
  • Als projectinstellingen goed zijn ?
  • compileren via Tools?Build
  • Resultaat is .sys bestand
  • Checked Build tegenover Free Build
  • Aan te passen via DBG define
  • Ook van toepassing op Windows zelf

19
Microsoft Visual Studio 6.0 (2)
Hulpmiddelen
20
DebugView
Hulpmiddelen
  • Toont berichten die Checked Build van driver
    genereert met DbgPrint
  • DebugView geeft geen informatie weer gegenereerd
    vanuit ISRs

21
(No Transcript)
22
DebugView (2)
Hulpmiddelen
  • Werkt ook na bugcheck schermen
  • Startup Recovery instellingen goedzetten
  • Zorgen dat DebugView draait tijdens crash
  • Binnen DebugView kiezen voor
  • File?Process Crash Dump en
  • memory.dmp in Windows map selecteren

23
DebugView (3)
Hulpmiddelen
24
LoadDrv
Hulpmiddelen
  • Installatie, starten, stoppen van een driver

25
Einde hulpmiddelen
Hulpmiddelen
  • Twee computersystemen
  • Verschillende software benodigd

26
Vragen
  • Er kunnen nu vragen over hulpmiddelen bij het
    schrijven van device drivers gesteld worden.

27
Device drivers
28
Device Drivers
Device drivers
  • Waarom een device driver
  • Aanroepen van een driver
  • Opbouw van een driver
  • Interrupt Request Levels (IRQLs)
  • Interrupt Service Routines (ISRs) en
  • Deferred Procedure Calls (DPCs)

29
Waarom een device driver
Device drivers
  • Vereist door ontwerp van Windows voor
  • stabiliteit
  • beveiliging
  • Applicatie hoeft minder intelligent te zijn
  • er is minder dubbele code
  • Apparaat kan gedeeld worden met meerdere
    applicaties

30
Aanroepen van een driver
Device drivers
  • Keuze voor Borland C Builder
  • De meeste drivers kunnen benaderd worden alsof
    het bestanden zijn, dus met de volgende Win32 API
    functies
  • CreateFile
  • WriteFile
  • ReadFile
  • CloseFile

31
Aanroepen van een driver (2)
Device drivers
  • Daarnaast kan met sommige drivers de volgende
    functie gebruikt worden
  • DeviceIoControl
  • Invoer aan de functie is
  • IOCTL code die het soort verzoek aangeeft
  • Gegenereerd door CTL_CODE macro uit winioctl.h
  • Invoer- en uitvoerbuffer

32
Aanroepen van een driver (3)
Device drivers
  • Vanwege ingewikkeldheid van aanroepen worden deze
    in een aparte unit of vaak in een DLL geplaatst

33
Opbouw van een driver
Device drivers
  • Plaats binnen Windows
  • DriverEntry routine
  • DriverUnload routine
  • I/O Request Packet (IRP)
  • Dispatch routines
  • Voorbeelden IRPs

34
Plaats binnen Windows
Device drivers
Hardware
IoXxx functie-aanroepen
HAL macros
Applicatie
Win32 API
I/O Manager
Device Driver
ongemerkt
API functie aanroep
dispatch routine
35
DriverEntry routine
Device drivers
  • Ontvangt pointer naar Driver Object
  • Wordt aangeroepen wanneer de driver door Windows
    geladen wordt
  • Initialiseert pointers naar andere routines,
    zoals DriverUnload, AddDevice en StartIo
  • Initialiseert MajorFunction array die pointers
    bevat naar elke dispatch functie

36
DriverEntry (2)
Device drivers
  • Creëert Device Object voor elk apparaat
  • Device Object heeft gebruikergedefinieerde Device
    Extensie voor opslag van variabelen in
    niet-gepagineerd geheugen
  • Creëert voor elk device eventueel een symbolic
    link
  • de naam die een applicatie kan gebruiken met
    CreateFile

37
DriverUnload routine
Device drivers
  • Wordt alleen aangeroepen als de driver uit het
    geheugen wordt geladen voordat het afsluiten van
    Windows in gang is gezet
  • Als deze routine ontbreekt blijft de driver in
    het geheugen totdat Windows wordt afgesloten
  • Als er iets speciaals moet gebeuren als Windows
    wordt afgesloten moet IRP_MJ_SHUTDOWN worden
    afgehandeld

38
I/O Request Packet (IRP)
Device drivers
  • Meestal aangemaakt door I/O Manager als gevolg
    van Win32 API aanroep
  • Verplaatst zich vanaf de I/O Manager door de
    driver

39
Dispatch routines
Device drivers
  • Worden aangeroepen door de I/O manager door de
    MajorCode uit de IRP als index te gebruiken voor
    de MajorFunction array van de driver
  • Handelen codes zoals IRP_MJ_CREATE, IRP_MJ_WRITE
    en dergelijke af, die vaak samenhangen met een
    bepaalde Win32 API aanroep

40
Dispatch routines (2)
Device drivers
  • Completeren IRP door aanroep van
    IoCompleteRequest of IRP in StartIo wachtrij
    zetten door aanroep van IoMarkIrpPending

41
Voorbeelden IRPs
Device drivers
  • IRP_MJ_CREATE
  • Wordt verzonden als CreateFile wordt aangeroepen
  • IRP_MJ_CLOSE
  • Wordt verzonden als CloseFile wordt aangeroepen

42
Voorbeelden IRPs (2)
Device drivers
  • IRP_MJ_WRITE
  • Wordt verzonden als een applicatie WriteFile
    aanroept
  • Kopieert of gebruikt buffer van gebruiker

43
Voorbeelden IRPs (3)
Device drivers
  • IRP_MJ_READ
  • Wordt verzonden als een applicatie ReadFile
    aanroept
  • Kopieert naar of schrijft in buffer van gebruiker

44
Voorbeelden IRPs (4)
Device drivers
  • IRP_MJ_DEVICE_CONTROL
  • Wordt verzonden als een applicatie
    DeviceIoControl aanroept
  • Bevat meestal één groot case statement die de
    verschillende IOCTL codes afhandelt

45
Einde opbouw van een driver
Device drivers
  • Driver bevindt zich tussen I/O Manager en
    hardware
  • DriverEntry routine is beginpunt
  • DriverUnload routine is optioneel
  • I/O Request Packets (IRPs) verplaatsen zich door
    de driver
  • Dispatch routines worden gebruikt om IRPs af te
    handelen
  • Verschillende soorten IRPs

46
Interrupt Request Levels (IRQL)
Device drivers
  • Delen van een driver worden vanuit verschillende
    contexten aangeroepen
  • Afhankelijk van deze context verschilt het IRQL
    nummer
  • Hoe hoger het IRQL, hoe beperkter een driver is
    in zijn aanroepen
  • Code binnen een hoger IRQL kan niet onderbroken
    worden door code met een lager of gelijk IRQL

47
IRQL (2)
Device drivers
  • Voorbeelden van IRQLs (hoog naar laag)
  • DIRQL hardware IRQLs
  • Van toepassing binnen een ISR voor hardware
  • Niet alloceren van niet-gepagineerd geheugen
  • DISPATCH_IRQL
  • Van toepassing binnen een DPC routine
  • Alleen alloceren van niet-gepagineerd geheugen
  • APC_IRQL
  • PASSIVE_IRQL
  • Van toepassing binnen dispatch routines
  • Alloceren van gepagineerd geheugen

48
ISRs en DPCs
Device drivers
  • Interrupt Service Routine (ISR) wordt aangeroepen
    wanneer er een hardware interrupt optreedt
  • IRQL een DIRQL
  • ISR plant Deferred Procedure Call (DPC)
  • Windows voert DPCs uit zodra het IRQL daalt tot
    DISPATCH_LEVEL
  • DPC regelt tijdsintensieve zaken of zaken die
    alleen op een lager IRQL mogelijk zijn

49
Einde device drivers
Device drivers
  • Nut device driver
  • Aanroepen van een driver
  • Opbouw driver
  • IRQLs
  • ISRs en DPCs

50
Vragen
  • Er kunnen nu vragen over device drivers gesteld
    worden.

51
PPort voorbeelddriver
52
Pport driver
PPort driver
  • StartIo principe
  • Terugloopplug
  • Werking
  • Probleem
  • Oplossingen

53
StartIo principe
PPort driver
  • StartIo principe
  • Dispatch routine roept IomarkIrpPending aan om
    IRP in wachtrij te plaatsen
  • IoStartPacket haalt IRP uit wachtrij en roept de
    StartIo routine aan, die verwerking uitvoert
    afhankelijk van de MajorCode
  • StartIo routine roept IoStartNextPacket aan zodat
    volgende IRP uit wachtrij verwerkt kan worden

54
StartIo principe (2)
PPort driver
  • StartIo routine zorgt voor serialisatie
  • StartIo routine verzorgt de eigenlijke I/O met de
    hardware
  • Hoeft niet verplicht gebruikt te worden

55
Terugloopplug
PPort driver
  • Als hardware wordt er een terugloopplug op de
    parallelle poort gebruikt
  • Genereren van interrupt mogelijk via Reset
    uitgang (gekoppeld aan Ack ingang)

56
Werking
PPort driver
  • StartIo ontvangt IRP
  • StartIo roept TransmitByte aan
  • TransmitByte genereert interrupt
  • ISR roept TransmitByte aan
  • Als bytes op zijn dan plant de ISR een DPC in,
    die de IRP completeert
  • DPC completeert IRP

57
Probleem
PPort driver
  • Bugcheck scherm
  • MULTIPLE_IRP_COMPLETE_REQUEST
  • Oorzaak
  • DPC wordt dubbel uitgevoerd,
  • dus ook de ISR wordt dubbel uitgevoerd

58
Oplossingen
PPort driver
  • Oplossing 1
  • Binnen ISR regel verwijderen
  • WriteControl(pDevExt, CTL_DEFAULT)
  • Zorgt ervoor dat het Interrupt Enabled bit wordt
    uitgeschakeld
  • Veroorzaakt bugcheck scherm bij afsluiten van
    Windows
  • DRIVER_IRQL_NOT_LESS_OR_EQUAL

59
Oplossingen (2)
PPort driver
  • Oplossing 2
  • Bijhouden of de DPC al is uitgevoerd nadat een
    interrupt is gegenereerd
  • Werkt alleen goed als de interrupt door jezelf
    gegenereerd wordt
  • acceptabel voor deze driver maar onmogelijk
    binnen de meeste drivers

60
Einde PPort driver
PPort driver
  • StartIo principe
  • Terugloopplug
  • StartIo, ISR en DPC implementatie
  • Probleem
  • Voorlopige oplossing

61
Vragen
  • Er kunnen nu vragen over de PPort driver gesteld
    worden.

62
EZ-USB oplossing
63
EZ-USB oplossing
EZ-USB oplossing
  • Cypress EZ-USB chip
  • Cypress EZ-USB toolkit
  • USB MP3 device
  • USB experimenteerbord

64
EZ-USB chip
EZ-USB oplossing
  • Cypress AN2131
  • Snelheid effectief 6 MHz
  • (24 MHz 4 klokpulsen)
  • 8 kilobyte intern RAM
  • Dataoverdracht van MCU naar USB module via RAM
    geheugen

65
Cypress EZ-USB toolkit
EZ-USB oplossing
  • Firmware voor Keil C51
  • Keil uVision 2 benodigd
  • Broncode van een universele driver
  • Veel documentatie

66
USB MP3 Device
EZ-USB oplossing
  • Rob Looijmans
  • Jan Blanken
  • Ron van Balen
  • Gerard Akse

67
USB MP3 Device (2)
EZ-USB oplossing
  • Twee stereo MP3 naar analoog decoders
  • verbonden via SPI bus via UART met EZ-USB
    processor
  • Functioneert als terugloopapparaat en genereert
    een test sinustoon via een speciaal commando
  • Functioneert in de toekomst als USB geluidskaart

68
USB experimenteerbord
EZ-USB oplossing
  • 32 kilobyte extra RAM geheugen
  • EEPROM via I2C bus
  • 8 LEDs
  • 4 drukknoppen, optioneel als interrupts
  • 2 RS232 poorten
  • LCD aansluiting
  • Standaardheaders voor uitbreidingen voor
    printplaat Peter Klijn

69
USB experimenteerbord (2)
EZ-USB oplossing
  • Hardware gereed voor 18 april a.s.
  • Als voorbeeld wordt een aangepaste driver
    geschreven
  • Geschikt als voorbeeldhardware bij het schrijven
    van een eigen driver
  • Geschikt om te leren werken met een 8051 processor

70
Einde EZ-USB oplossing
EZ-USB oplossing
  • Handige toolkit, inclusief alle benodigde
    broncode en documentatie
  • Tenminste twee projecten maken op dit moment
    gebruik van de EZ-USB chip
  • Het toekomstgerichte experimenteerbord zorgt dat
    Cypress EZ-USB voorlopig de standaard is binnen
    Fontys

71
Vragen
  • Er kunnen nu vragen over de EZ-USB oplossing
    gesteld worden.

72
Slot
73
Verdere stage
Slot
  • Stage duurt nog circa 14 weken
  • Vrijwel elke dag tot aan de zomervakantie
    beschikbaar voor vragen over device drivers in
    lokaal 0.153

74
Slot
Slot
  • Hulpmiddelen
  • Device drivers
  • Pport driver
  • EZ-USB oplossing

75
Vragen
  • Algemene vragen over deze presentatie kunnen nu
    gesteld worden.

76
Einde
  • Deze PowerPoint presentatie is desgewenst te
    downloaden vanaf
  • stage.sools.com
Write a Comment
User Comments (0)
About PowerShow.com