het schrijven van een device driver n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
Het schrijven van een device driver PowerPoint Presentation
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


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

Het schrijven van een device driver


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