Download
het schrijven van een device driver n.
Skip this Video
Loading SlideShow in 5 Seconds..
Het schrijven van een device driver PowerPoint Presentation
Download Presentation
Het schrijven van een device driver

Het schrijven van een device driver

172 Views Download Presentation
Download Presentation

Het schrijven van een device driver

- - - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

  1. Het schrijven van een device driver voor Windows 2000

  2. 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

  3. 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

  4. Introductie

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

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

  7. 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

  8. 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)

  9. 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

  10. 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

  11. Introductie Einde 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 hulpprogramma’s

  15. Hulpmiddelen Computersystemen • PC voor ontwikkeling • PC voor testen

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

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

  18. 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

  19. Hulpmiddelen Microsoft Visual Studio 6.0 (2)

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

  21. 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

  22. Hulpmiddelen DebugView (3)

  23. Hulpmiddelen LoadDrv • Installatie, starten, stoppen van een driver

  24. Hulpmiddelen Einde hulpmiddelen • Twee computersystemen • Verschillende software benodigd

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

  26. Device drivers

  27. 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)

  28. 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

  29. 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

  30. 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

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

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

  33. 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

  34. 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

  35. 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

  36. 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

  37. 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

  38. 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

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

  40. Device drivers Voorbeelden IRP’s IRP_MJ_CREATE: • Wordt verzonden als CreateFile wordt aangeroepen IRP_MJ_CLOSE: • Wordt verzonden als CloseFile wordt aangeroepen

  41. Device drivers Voorbeelden IRP’s (2) IRP_MJ_WRITE: • Wordt verzonden als een applicatie WriteFile aanroept • Kopieert of gebruikt buffer van gebruiker

  42. Device drivers Voorbeelden IRP’s (3) IRP_MJ_READ: • Wordt verzonden als een applicatie ReadFile aanroept • Kopieert naar of schrijft in buffer van gebruiker

  43. 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

  44. 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

  45. 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

  46. 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

  47. 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

  48. Device drivers Einde device drivers • Nut device driver • Aanroepen van een driver • Opbouw driver • IRQL’s • ISR’s en DPC’s

  49. Vragen Er kunnen nu vragen over device drivers gesteld worden.