1 device driver. 2 hardware operating systeem prog1prog2 system calls/ api device drivers gebruiker...
TRANSCRIPT
![Page 1: 1 Device driver. 2 Hardware Operating Systeem Prog1Prog2 System calls/ API Device drivers Gebruiker afschermen van de hardware](https://reader035.vdocuments.net/reader035/viewer/2022081602/5551a0f04979591f3c8bae95/html5/thumbnails/1.jpg)
1
Device driver
![Page 2: 1 Device driver. 2 Hardware Operating Systeem Prog1Prog2 System calls/ API Device drivers Gebruiker afschermen van de hardware](https://reader035.vdocuments.net/reader035/viewer/2022081602/5551a0f04979591f3c8bae95/html5/thumbnails/2.jpg)
2
Hardware
Operating Systeem
Prog1 Prog2
System calls/ API
Device drivers
Gebruiker afschermen van de hardware
![Page 3: 1 Device driver. 2 Hardware Operating Systeem Prog1Prog2 System calls/ API Device drivers Gebruiker afschermen van de hardware](https://reader035.vdocuments.net/reader035/viewer/2022081602/5551a0f04979591f3c8bae95/html5/thumbnails/3.jpg)
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 devicedriver werkt in de kernelmode.
![Page 4: 1 Device driver. 2 Hardware Operating Systeem Prog1Prog2 System calls/ API Device drivers Gebruiker afschermen van de hardware](https://reader035.vdocuments.net/reader035/viewer/2022081602/5551a0f04979591f3c8bae95/html5/thumbnails/4.jpg)
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: 1 Device driver. 2 Hardware Operating Systeem Prog1Prog2 System calls/ API Device drivers Gebruiker afschermen van de hardware](https://reader035.vdocuments.net/reader035/viewer/2022081602/5551a0f04979591f3c8bae95/html5/thumbnails/5.jpg)
55
Interfacing device drivers
B: met een standaard interface
A: zonder een standaard interface
![Page 6: 1 Device driver. 2 Hardware Operating Systeem Prog1Prog2 System calls/ API Device drivers Gebruiker afschermen van de hardware](https://reader035.vdocuments.net/reader035/viewer/2022081602/5551a0f04979591f3c8bae95/html5/thumbnails/6.jpg)
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: 1 Device driver. 2 Hardware Operating Systeem Prog1Prog2 System calls/ API Device drivers Gebruiker afschermen van de hardware](https://reader035.vdocuments.net/reader035/viewer/2022081602/5551a0f04979591f3c8bae95/html5/thumbnails/7.jpg)
7
Voorbeeld
int fd;char cbuf;fd=open(“/dev/tty”, O_RDONLY,0);read(fd, &cbuf, 1);close(fd);
![Page 8: 1 Device driver. 2 Hardware Operating Systeem Prog1Prog2 System calls/ API Device drivers Gebruiker afschermen van de hardware](https://reader035.vdocuments.net/reader035/viewer/2022081602/5551a0f04979591f3c8bae95/html5/thumbnails/8.jpg)
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: 1 Device driver. 2 Hardware Operating Systeem Prog1Prog2 System calls/ API Device drivers Gebruiker afschermen van de hardware](https://reader035.vdocuments.net/reader035/viewer/2022081602/5551a0f04979591f3c8bae95/html5/thumbnails/9.jpg)
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: 1 Device driver. 2 Hardware Operating Systeem Prog1Prog2 System calls/ API Device drivers Gebruiker afschermen van de hardware](https://reader035.vdocuments.net/reader035/viewer/2022081602/5551a0f04979591f3c8bae95/html5/thumbnails/10.jpg)
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: 1 Device driver. 2 Hardware Operating Systeem Prog1Prog2 System calls/ API Device drivers Gebruiker afschermen van de hardware](https://reader035.vdocuments.net/reader035/viewer/2022081602/5551a0f04979591f3c8bae95/html5/thumbnails/11.jpg)
11
Device driver interface
![Page 12: 1 Device driver. 2 Hardware Operating Systeem Prog1Prog2 System calls/ API Device drivers Gebruiker afschermen van de hardware](https://reader035.vdocuments.net/reader035/viewer/2022081602/5551a0f04979591f3c8bae95/html5/thumbnails/12.jpg)
12
Device driver interface
![Page 13: 1 Device driver. 2 Hardware Operating Systeem Prog1Prog2 System calls/ API Device drivers Gebruiker afschermen van de hardware](https://reader035.vdocuments.net/reader035/viewer/2022081602/5551a0f04979591f3c8bae95/html5/thumbnails/13.jpg)
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: 1 Device driver. 2 Hardware Operating Systeem Prog1Prog2 System calls/ API Device drivers Gebruiker afschermen van de hardware](https://reader035.vdocuments.net/reader035/viewer/2022081602/5551a0f04979591f3c8bae95/html5/thumbnails/14.jpg)
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: 1 Device driver. 2 Hardware Operating Systeem Prog1Prog2 System calls/ API Device drivers Gebruiker afschermen van de hardware](https://reader035.vdocuments.net/reader035/viewer/2022081602/5551a0f04979591f3c8bae95/html5/thumbnails/15.jpg)
15
int global_variable = 1;
int f() {
global_variable = global_variable + 2;
return g_var;
}
If multiple threads call f() concurrently the result is unpredictable
int g()
{
return f() + 2;
}
g() calls a non-reentrant function f().
Voorbeeld van niet re-entrant code
![Page 16: 1 Device driver. 2 Hardware Operating Systeem Prog1Prog2 System calls/ API Device drivers Gebruiker afschermen van de hardware](https://reader035.vdocuments.net/reader035/viewer/2022081602/5551a0f04979591f3c8bae95/html5/thumbnails/16.jpg)
16
int f(int i) { return i + 2; }
int g(int i) { return f(i) + 2; }
Voorbeeld van niet re-entrant code
![Page 17: 1 Device driver. 2 Hardware Operating Systeem Prog1Prog2 System calls/ API Device drivers Gebruiker afschermen van de hardware](https://reader035.vdocuments.net/reader035/viewer/2022081602/5551a0f04979591f3c8bae95/html5/thumbnails/17.jpg)
17
DriverUser mode <==> Kernel mode
![Page 18: 1 Device driver. 2 Hardware Operating Systeem Prog1Prog2 System calls/ API Device drivers Gebruiker afschermen van de hardware](https://reader035.vdocuments.net/reader035/viewer/2022081602/5551a0f04979591f3c8bae95/html5/thumbnails/18.jpg)
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 buffer.buff: Pointer naar de user buffer Offp: offset binnen de file
sss
![Page 19: 1 Device driver. 2 Hardware Operating Systeem Prog1Prog2 System calls/ API Device drivers Gebruiker afschermen van de hardware](https://reader035.vdocuments.net/reader035/viewer/2022081602/5551a0f04979591f3c8bae95/html5/thumbnails/19.jpg)
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: 1 Device driver. 2 Hardware Operating Systeem Prog1Prog2 System calls/ API Device drivers Gebruiker afschermen van de hardware](https://reader035.vdocuments.net/reader035/viewer/2022081602/5551a0f04979591f3c8bae95/html5/thumbnails/20.jpg)
20
Read en Write Methodenin linux
![Page 21: 1 Device driver. 2 Hardware Operating Systeem Prog1Prog2 System calls/ API Device drivers Gebruiker afschermen van de hardware](https://reader035.vdocuments.net/reader035/viewer/2022081602/5551a0f04979591f3c8bae95/html5/thumbnails/21.jpg)
21
Applicationprocess
Operating System: dev/xyz
Device driver
Physical Device
hardware
Applicationprocess
Device driver
Physical Device
hardware
Algemene systemen versus embedded systemen
![Page 22: 1 Device driver. 2 Hardware Operating Systeem Prog1Prog2 System calls/ API Device drivers Gebruiker afschermen van de hardware](https://reader035.vdocuments.net/reader035/viewer/2022081602/5551a0f04979591f3c8bae95/html5/thumbnails/22.jpg)
22
FILE *fp = fopen(LCD_NAME, );
fprintf(fp, "test");
Device tabel
flags
dev
"w“
Aanroep van de driver
open()close()read()
write()
![Page 23: 1 Device driver. 2 Hardware Operating Systeem Prog1Prog2 System calls/ API Device drivers Gebruiker afschermen van de hardware](https://reader035.vdocuments.net/reader035/viewer/2022081602/5551a0f04979591f3c8bae95/html5/thumbnails/23.jpg)
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 24: 1 Device driver. 2 Hardware Operating Systeem Prog1Prog2 System calls/ API Device drivers Gebruiker afschermen van de hardware](https://reader035.vdocuments.net/reader035/viewer/2022081602/5551a0f04979591f3c8bae95/html5/thumbnails/24.jpg)
device driver voor de HAL (NIOS II)
Character-mode devicesTimer devicesFile subsystemsEthernet devicesDMA devicesFlash memory devices
Devices
![Page 25: 1 Device driver. 2 Hardware Operating Systeem Prog1Prog2 System calls/ API Device drivers Gebruiker afschermen van de hardware](https://reader035.vdocuments.net/reader035/viewer/2022081602/5551a0f04979591f3c8bae95/html5/thumbnails/25.jpg)
Driverfuncties tabel
![Page 26: 1 Device driver. 2 Hardware Operating Systeem Prog1Prog2 System calls/ API Device drivers Gebruiker afschermen van de hardware](https://reader035.vdocuments.net/reader035/viewer/2022081602/5551a0f04979591f3c8bae95/html5/thumbnails/26.jpg)
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 27: 1 Device driver. 2 Hardware Operating Systeem Prog1Prog2 System calls/ API Device drivers Gebruiker afschermen van de hardware](https://reader035.vdocuments.net/reader035/viewer/2022081602/5551a0f04979591f3c8bae95/html5/thumbnails/27.jpg)
Driverfuncties tabel
schrijf( ){}
alt_fd*,const chr*,intint
![Page 28: 1 Device driver. 2 Hardware Operating Systeem Prog1Prog2 System calls/ API Device drivers Gebruiker afschermen van de hardware](https://reader035.vdocuments.net/reader035/viewer/2022081602/5551a0f04979591f3c8bae95/html5/thumbnails/28.jpg)
_fd.h
register adressen_reg.h
declaraties voor de driver
.h declaraties
Diverse .h files.
![Page 29: 1 Device driver. 2 Hardware Operating Systeem Prog1Prog2 System calls/ API Device drivers Gebruiker afschermen van de hardware](https://reader035.vdocuments.net/reader035/viewer/2022081602/5551a0f04979591f3c8bae95/html5/thumbnails/29.jpg)
alt_sys_int.cOpstarten van drivers:
![Page 30: 1 Device driver. 2 Hardware Operating Systeem Prog1Prog2 System calls/ API Device drivers Gebruiker afschermen van de hardware](https://reader035.vdocuments.net/reader035/viewer/2022081602/5551a0f04979591f3c8bae95/html5/thumbnails/30.jpg)
NIOS II Software developer’s Handbook
Hoofdstuk 7