het schrijven van een device driver
Download
Skip this Video
Download Presentation
Het schrijven van een device driver

Loading in 2 Seconds...

play fullscreen
1 / 76

Het schrijven van een device driver - PowerPoint PPT Presentation


  • 143 Views
  • Uploaded on

Het schrijven van een device driver. voor Windows 2000. Algemeen. Over deze presentatie. 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

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' Het schrijven van een device driver' - brinly


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
over deze presentatie

Algemeen

Over deze presentatie
  • 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
inhoud

Algemeen

Inhoud
  • 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
introductie

Introductie

Introductie
  • Wie ben ik
  • Waarom deze stage
  • Voorkennis
  • Werkzaamheden
wie ben ik

Introductie

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

Introductie

Waarom deze stage
  • 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
voorkennis

Introductie

Voorkennis
  • 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)
voorkennis 2

Introductie

Voorkennis (2)
  • 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
werkzaamheden

Introductie

Werkzaamheden
  • 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
einde introductie

Introductie

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

Er kunnen nu vragen over de introductie gesteld worden.

hulpmiddelen

Hulpmiddelen

Hulpmiddelen
  • Computersystemen
  • Microsoft Visual Studio 6.0
  • Microsoft Windows 2000 DDK (SP1)
  • DebugView
  • LoadDrv
  • Talloze andere optionele hulpprogramma’s
computersystemen

Hulpmiddelen

Computersystemen
  • PC voor ontwikkeling
  • PC voor testen
ontwikkelsysteem

Hulpmiddelen

Ontwikkelsysteem
  • Besturingssysteem is niet relevant,

bijv. Windows 2000 of XP

  • Driver nooit testen op ontwikkelsysteem
testsysteem

Hulpmiddelen

Testsysteem
  • Windows 2000 Professional,

met alle service packs en updates

  • Zorgen voor een herstelmogelijkheid,

bijv. Norton Ghost

microsoft visual studio 6 0

Hulpmiddelen

Microsoft Visual Studio 6.0
  • 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
debugview

Hulpmiddelen

DebugView
  • Toont berichten die Checked Build van driver genereert met DbgPrint
  • DebugView geeft geen informatie weer gegenereerd vanuit ISR’s
debugview 2

Hulpmiddelen

DebugView (2)
  • 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

loaddrv

Hulpmiddelen

LoadDrv
  • Installatie, starten, stoppen van een driver
einde hulpmiddelen

Hulpmiddelen

Einde hulpmiddelen
  • Twee computersystemen
  • Verschillende software benodigd
vragen1
Vragen

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

device drivers1

Device drivers

Device Drivers
  • Waarom een device driver
  • Aanroepen van een driver
  • Opbouw van een driver
  • Interrupt Request Levels (IRQL’s)
  • Interrupt Service Routines (ISR’s) en

Deferred Procedure Calls (DPC’s)

waarom een device driver

Device drivers

Waarom een device driver
  • 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
aanroepen van een driver

Device drivers

Aanroepen van een driver
  • 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
aanroepen van een driver 2

Device drivers

Aanroepen van een driver (2)
  • 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
aanroepen van een driver 3

Device drivers

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

Device drivers

Opbouw van een driver
  • Plaats binnen Windows
  • DriverEntry routine
  • DriverUnload routine
  • I/O Request Packet (IRP)
  • Dispatch routines
  • Voorbeelden IRP’s
plaats binnen windows

Device drivers

Plaats binnen Windows

Hardware

IoXxx functie-aanroepen

HAL macro’s

Applicatie

Win32 API

I/O Manager

Device Driver

API functie aanroep

ongemerkt

dispatch routine

driverentry routine

Device drivers

DriverEntry routine
  • 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
driverentry 2

Device drivers

DriverEntry (2)
  • 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
driverunload routine

Device drivers

DriverUnload routine
  • 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
i o request packet irp

Device drivers

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

Device drivers

Dispatch routines
  • 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
dispatch routines 2

Device drivers

Dispatch routines (2)
  • Completeren IRP door aanroep van IoCompleteRequest of IRP in StartIo wachtrij zetten door aanroep van IoMarkIrpPending
voorbeelden irp s

Device drivers

Voorbeelden IRP’s

IRP_MJ_CREATE:

  • Wordt verzonden als CreateFile wordt aangeroepen

IRP_MJ_CLOSE:

  • Wordt verzonden als CloseFile wordt aangeroepen
voorbeelden irp s 2

Device drivers

Voorbeelden IRP’s (2)

IRP_MJ_WRITE:

  • Wordt verzonden als een applicatie WriteFile aanroept
  • Kopieert of gebruikt buffer van gebruiker
voorbeelden irp s 3

Device drivers

Voorbeelden IRP’s (3)

IRP_MJ_READ:

  • Wordt verzonden als een applicatie ReadFile aanroept
  • Kopieert naar of schrijft in buffer van gebruiker
voorbeelden irp s 4

Device drivers

Voorbeelden IRP’s (4)

IRP_MJ_DEVICE_CONTROL:

  • Wordt verzonden als een applicatie DeviceIoControl aanroept
  • Bevat meestal één groot case statement die de verschillende IOCTL codes afhandelt
einde opbouw van een driver

Device drivers

Einde opbouw van een driver
  • Driver bevindt zich tussen I/O Manager en hardware
  • DriverEntry routine is beginpunt
  • DriverUnload routine is optioneel
  • I/O Request Packets (IRP’s) verplaatsen zich door de driver
  • Dispatch routines worden gebruikt om IRP’s af te handelen
  • Verschillende soorten IRP’s
interrupt request levels irql

Device drivers

Interrupt Request Levels (IRQL)
  • 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
irql 2

Device drivers

IRQL (2)
  • Voorbeelden van IRQL’s (hoog naar laag):
    • DIRQL: hardware IRQL’s
      • 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
isr s en dpc s

Device drivers

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

Device drivers

Einde device drivers
  • Nut device driver
  • Aanroepen van een driver
  • Opbouw driver
  • IRQL’s
  • ISR’s en DPC’s
vragen2
Vragen

Er kunnen nu vragen over device drivers gesteld worden.

pport driver

PPort driver

Pport driver
  • StartIo principe
  • Terugloopplug
  • Werking
  • Probleem
  • Oplossingen
startio principe

PPort driver

StartIo principe

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
startio principe 2

PPort driver

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

PPort driver

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

PPort driver

Werking
  • 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
probleem

PPort driver

Probleem
  • Bugcheck scherm:

MULTIPLE_IRP_COMPLETE_REQUEST

  • Oorzaak:

DPC wordt dubbel uitgevoerd,

dus ook de ISR wordt dubbel uitgevoerd

oplossingen

PPort driver

Oplossingen

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

oplossingen 2

PPort driver

Oplossingen (2)

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

einde pport driver

PPort driver

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

Er kunnen nu vragen over de PPort driver gesteld worden.

ez usb oplossing

EZ-USB oplossing

EZ-USB oplossing
  • Cypress EZ-USB chip
  • Cypress EZ-USB toolkit
  • USB MP3 device
  • USB experimenteerbord
ez usb chip

EZ-USB oplossing

EZ-USB chip
  • Cypress AN2131
  • Snelheid effectief 6 MHz

(24 MHz ÷ 4 klokpulsen)

  • 8 kilobyte intern RAM
  • Dataoverdracht van MCU naar USB module via RAM geheugen
cypress ez usb toolkit

EZ-USB oplossing

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

EZ-USB oplossing

USB MP3 Device
  • Rob Looijmans
  • Jan Blanken
  • Ron van Balen
  • Gerard Akse
usb mp3 device 2

EZ-USB oplossing

USB MP3 Device (2)
  • 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
usb experimenteerbord

EZ-USB oplossing

USB experimenteerbord
  • 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
usb experimenteerbord 2

EZ-USB oplossing

USB experimenteerbord (2)
  • 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
einde ez usb oplossing

EZ-USB oplossing

Einde 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
vragen4
Vragen

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

verdere stage

Slot

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

Slot

Slot
  • Hulpmiddelen
  • Device drivers
  • Pport driver
  • EZ-USB oplossing
vragen5
Vragen

Algemene vragen over deze presentatie kunnen nu gesteld worden.

einde
Einde

Deze PowerPoint presentatie is desgewenst te downloaden vanaf:

stage.sools.com

ad