Het schrijven van een device driver
Download
1 / 76

Het schrijven van een device driver - PowerPoint PPT Presentation


  • 142 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


Microsoft visual studio 6 0 2

Hulpmiddelen

Microsoft Visual Studio 6.0 (2)


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


Debugview 3

Hulpmiddelen

DebugView (3)


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


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