Device driver

34
1 Device driver

description

Device driver. Gebruiker afschermen van de hardware. Prog1. Prog2. System calls/ API. Operating Systeem. Device drivers. Hardware. Introductie. Een device driver is een computer programma dat direct communiceert met een resource. - PowerPoint PPT Presentation

Transcript of Device driver

Page 1: Device driver

1

Device driver

Page 2: Device driver

2

Hardware

Operating Systeem

Prog1 Prog2

System calls/ API

Device drivers

Gebruiker afschermen van de hardware

Page 3: Device driver

3

Introductie

Een device driver is een computer programma dat direct communiceert met een resource.

Voorbeelden zijn: printerdriver, filedriver, displaydriver,….

Is de vertaalslag tussen het operating systeem en de applicaties die gebruik maken van de devices.

Een device driver werkt in de kernelmode.

Page 4: Device driver

4

Het maken van een apparaat zoals verwacht is een lastige taak.

Waarom werken met device drivers.

Het toevoegen van drivers onder het operatingsysteem biedt de bescherming en veiligheid die nodig is voor het aansturen door malafide gebruikers.

=> Fouten in hardware wordt door de software (driver) gecorrigeerd.

Device drivers zijn in principe gelinkte libraries

In plaats van elke keer het programma te veranderen biedt het o.s. de mogelijkheid om op eenvoudige wijze een andere device te benaderen.

Page 5: Device driver

55

Interfacing device drivers

B: met een standaard interface

A: zonder een standaard interface

Page 6: Device driver

6

File abstractie

Wat doe je met een device ?

• Lezen en schrijven

• Alleen lezen of alleen schrijven

Voorbeelden: USB device, CD ROM, LED display

Wat doe je met een file?

• Open, close, read, write,..

File is een uitstekende abstracte device.

Page 7: Device driver

7

Voorbeeld

int fd;char cbuf;fd=open(“/dev/tty”, O_RDONLY,0);read(fd, &cbuf, 1);close(fd);

Page 8: Device driver

8

crw-rw-rw- 1 root root 1, 3 2009-12-06 13:28 nullbrw-rw ---- 1 root disk 8, 0 2009-12-06 13:28 sdabrw-rw ---- 1 root disk 8, 1 2009-12-06 13:28 sda1brw-rw ---- 1 root disk 8, 2 2009-12-06 13:28 sda2

Device

Nummers voor “last modification” zijn de major en minor device-nummers van een bepaald device.

Major nummers identificeren de drivers die overeenkomen met de device.

b.v. sda, sda1 en sda2 hebben dezelfde device

Minor nummers worden gebruikt door de kernel om precies te bepalen naar welke apparaat verwezen wordt.

b.v. een onderscheid maken tussen verschillende partities op een harddisk /dev/sda, / dev/sda1, / dev/sda2 hebben allemaal dezelfde major, maar verschillende minor nummers.

Wordt intern gebruikt voor indexering

Page 9: Device driver

9

Device type

Toegankelijk via een stroom van bytes( zoals in een file)Vb: usb, modem, ..

Een network Devices

Een Block Devices

Via een systeem buffer die functioneert als een data-cache.

Voorbeeld Harddisk controllers

Een Character Devices

Page 10: Device driver

10

User programma & Kernel Interface

S y s te m C a ll In te r fa c e

V F SS o c ke t

B u f fe rC a c he

B l oc kD e v ic e D ri v er

C h a ra c te rD e v ic e D ri v er

H a r dw ar e

N e tw o rk P ro t o co l

N e tw o rk D e v ic e D ri v er

F il e S y s te m s

Page 11: Device driver

11

Device driver interface

Page 12: Device driver

12

Device driver interface

Page 13: Device driver

13

Kernel Modules Versus ApplicatiesKernel modules zijn event-driven

User-level applicaties kunnen functies aanroepen die niet gedefinieerd zijn.

Gebruik maken van externe library's

Kernel module kan alleen gelinkt worden met kernel functies

b.v: printk is de versie van printf wordt binnen de kernel gedefinieerd.

Gebruik in de kernel module dus geen user-level library's zoals stdio.h

Vergeet na disabelen van de interrupts deze niet te enabelen

Page 14: Device driver

14

User Space Versus Kernel-Space

Een kernel module run in kernel-space, waar applicatie run in user- space

Een applicatie kan zich verplaatsen van user-space naar kernel-space

b.v. het aanroepen van een system-call

Driver code moet re-entrant zijn.Een functie heet re-entrant als hij op ieder willekeurig punt onderbroken kan worden en een nieuwe “kopie” opgestart zonder elkaar in de weg te zitten.

Page 15: Device driver

15

int global_variable = 1;

int f() {

global_variable = global_variable + 2;

return g_var;

}

Het reultaat is bij “multiple threads” aanroep van f() onvoorspelbaar.

int g()

{

return f() + 2;

}

g() roept een “non-reentrant” functie f() aan.

Voorbeeld van niet re-entrant code

Page 16: Device driver

16

int f(int i) { return i + 2; }

int g(int i) { return f(i) + 2; }

Voorbeeld van niet re-entrant code

Page 17: Device driver

17

DriverUser mode <==> Kernel mode

Page 18: Device driver

18

Read en Write Methodenin linux

Read en write kopieeren van en naar applicatie code.

prototypesssize_t read(struct file *filp, char __user *buff,

size_t count, loff_t *offp);ssize_t write(struct file *filp, const char __user

*buff, size_t count, loff_t *offp);

filp: File pointercount:Grootte van de user bufferbuff: Pointer naar de user buffer Offp: offset binnen de file

sss

Page 19: Device driver

19

Read en Write Methodenin linux

Wees voorzichtig bij het omgaan met user / kernel data transfers

User buffer pointers kunnen illegaal zijnEr kan een page-fault veroorzaakt worden (data is alleen virtueel aanwezig, dus niet in RAM).Pointers kunnen malvious zijn.

Er zijn speciale functies die veilige data transfare verzorgt tussen de user en de kernel ruimte.

unsigned long copy_to_user(void __user *to, const void *from, unsigned long count);

unsigned long copy_from_user(void *to, const void __user *from, unsigned long count);

sss

Page 20: Device driver

20

Read en Write Methodenin linux

Page 21: Device driver

21

Applicationprocess

Operating System: dev/xyz

Device driver

Physical Device

hardware

Applicationprocess

Device driver

Physical Device

hardware

Algemene systemen versus embedded systemen

Page 22: Device driver

22

Hardware

Operating Systeem

Prog1 Prog2

System calls/ API

Device drivers

Gebruiker afschermen van de hardware

Page 23: Device driver

23

FILE *fp = fopen(LCD_NAME, );

fprintf(fp, "test");

Device tabel

flags

dev

"w“

Aanroep van de driver

open()close()read()

write()

Page 24: Device driver

Hoe te werk gaan

1: Creëer de device-header file die de registers beschrijft (dit is de interface file)

2: Implementeer de driver functionaliteit

3: Test de driver (m.b.v. de main)

4: Integreer de driver.

Page 25: Device driver

device driver voor de HAL (NIOS II)

Character-mode devicesTimer devicesFile subsystemsEthernet devicesDMA devicesFlash memory devices

Devices

Page 26: Device driver

Driverfuncties tabel

Page 27: Device driver

FILE *fp = fopen(LCD_NAME, );

Device tabel

open()close()read()

flags

dev

"w“

Aanroep van de driver

write()alt_fd

alt_dev

int alt_dev_reg( alt_dev* dev );

Page 28: Device driver

Driverfuncties tabel

schrijf( ){}

alt_fd*,const chr*,intint

Page 29: Device driver

NIOS II Software developer’s Handbook

Hoofdstuk 7

Page 30: Device driver

30

The High Level Picture

A lot of research effort in the OS community has gone into performance, rather than reliability.

The result: operating system crashes are still a huge problem today5% of Windows systems crash every day

•Device drivers are the biggest cause of crashesDrivers cause 85% of Windows XP crashesDrivers in Linux are 7 times buggier than the kernel

Dept. of Computer Science & Engineering

University of Washington

Page 31: Device driver

31

Why Do Drivers Fail?

Complex and hard to writeMust handle asynchronous events

• interrupts

Must obey kernel programming rules • Locking, synchronization

Difficult to test and debug • timing-related bugs

Non-reproducible failures

Often written by inexperienced programmersCode often not available to OS vendors

Dept. of Computer Science & Engineering

University of Washington

Page 32: Device driver

32

OS Today

Kernel

Driver

ApplicationApplication

Dept. of Computer Science & Engineering

University of Washington

Page 33: Device driver

33

Our Goal: OS With Reliability

Kernel

Driver

Application

Driver

Application

Dept. of Computer Science & Engineering

University of Washington

Page 34: Device driver

34

Recovery Works

0

20

40

60

80

100

Mp3Player

AudioRecorder

RemoteCopy

Sniffer Compiler Database

Nu

mb

er

of

fail

ure

s

Driver Failures

Application Failures

Sound Net Storage

Dept. of Computer Science & Engineering

University of Washington