MC504/MC514 - Sistemas Operacionaisislene/2s2014-mc514/io-pipe/...Device driversPipesDrivers no...
Transcript of MC504/MC514 - Sistemas Operacionaisislene/2s2014-mc514/io-pipe/...Device driversPipesDrivers no...
![Page 1: MC504/MC514 - Sistemas Operacionaisislene/2s2014-mc514/io-pipe/...Device driversPipesDrivers no Linux MC504/MC514 - Sistemas Operacionais Entrada e Sa da Pipes Islene Calciolari Garcia](https://reader034.fdocuments.net/reader034/viewer/2022050122/5f52b8945cfaa1496919944b/html5/thumbnails/1.jpg)
Device drivers Pipes Drivers no Linux
MC504/MC514 - Sistemas OperacionaisEntrada e Saıda
Pipes
Islene Calciolari Garcia
Instituto de Computacao - Unicamp
Segundo Semestre de 2014
![Page 2: MC504/MC514 - Sistemas Operacionaisislene/2s2014-mc514/io-pipe/...Device driversPipesDrivers no Linux MC504/MC514 - Sistemas Operacionais Entrada e Sa da Pipes Islene Calciolari Garcia](https://reader034.fdocuments.net/reader034/viewer/2022050122/5f52b8945cfaa1496919944b/html5/thumbnails/2.jpg)
Device drivers Pipes Drivers no Linux
Sumario
1 Device drivers
2 Pipes
3 Drivers no Linux
![Page 3: MC504/MC514 - Sistemas Operacionaisislene/2s2014-mc514/io-pipe/...Device driversPipesDrivers no Linux MC504/MC514 - Sistemas Operacionais Entrada e Sa da Pipes Islene Calciolari Garcia](https://reader034.fdocuments.net/reader034/viewer/2022050122/5f52b8945cfaa1496919944b/html5/thumbnails/3.jpg)
Device drivers Pipes Drivers no Linux
Device drivers
“I know about car and bus drivers, pilots, and evenscrewdrivers; but what is this device driver?” queriedShweta, puzzled.
A driver drives, manages, controls, directs and monitorsthe entity under its command. What a bus driver doeswith a bus, a device driver does with a computer device(any piece of hardware connected to a computer) like amouse, keyboard, monitor, hard disk, Web-camera, clock,and more.
Ref:Device Drivers, Part 1: Linux Device Drivers for Your Girl Friend
![Page 4: MC504/MC514 - Sistemas Operacionaisislene/2s2014-mc514/io-pipe/...Device driversPipesDrivers no Linux MC504/MC514 - Sistemas Operacionais Entrada e Sa da Pipes Islene Calciolari Garcia](https://reader034.fdocuments.net/reader034/viewer/2022050122/5f52b8945cfaa1496919944b/html5/thumbnails/4.jpg)
Device drivers Pipes Drivers no Linux
Dispositivos de I/O e controladores
Tanenbaum: Figura 1.5
O sistema operacional deve interagir com os controladores
![Page 5: MC504/MC514 - Sistemas Operacionaisislene/2s2014-mc514/io-pipe/...Device driversPipesDrivers no Linux MC504/MC514 - Sistemas Operacionais Entrada e Sa da Pipes Islene Calciolari Garcia](https://reader034.fdocuments.net/reader034/viewer/2022050122/5f52b8945cfaa1496919944b/html5/thumbnails/5.jpg)
Device drivers Pipes Drivers no Linux
Character device
Tanenbaum: Figura 5.34
Acesso sequencial, caractere a caractereExecute ls -l /dev
![Page 6: MC504/MC514 - Sistemas Operacionaisislene/2s2014-mc514/io-pipe/...Device driversPipesDrivers no Linux MC504/MC514 - Sistemas Operacionais Entrada e Sa da Pipes Islene Calciolari Garcia](https://reader034.fdocuments.net/reader034/viewer/2022050122/5f52b8945cfaa1496919944b/html5/thumbnails/6.jpg)
Device drivers Pipes Drivers no Linux
Block device
Tanenbaum: Figura 1.8
Acesso nao sequencial a blocos de informacaoExecute ls -l /dev
![Page 7: MC504/MC514 - Sistemas Operacionaisislene/2s2014-mc514/io-pipe/...Device driversPipesDrivers no Linux MC504/MC514 - Sistemas Operacionais Entrada e Sa da Pipes Islene Calciolari Garcia](https://reader034.fdocuments.net/reader034/viewer/2022050122/5f52b8945cfaa1496919944b/html5/thumbnails/7.jpg)
Device drivers Pipes Drivers no Linux
Device drivers
Tanenbaum: Figura 5.11
![Page 8: MC504/MC514 - Sistemas Operacionaisislene/2s2014-mc514/io-pipe/...Device driversPipesDrivers no Linux MC504/MC514 - Sistemas Operacionais Entrada e Sa da Pipes Islene Calciolari Garcia](https://reader034.fdocuments.net/reader034/viewer/2022050122/5f52b8945cfaa1496919944b/html5/thumbnails/8.jpg)
Device drivers Pipes Drivers no Linux
Device driversLinux device driver partition
http://www.opensourceforu.com/2010/11/
understanding-linux-device-drivers/
![Page 9: MC504/MC514 - Sistemas Operacionaisislene/2s2014-mc514/io-pipe/...Device driversPipesDrivers no Linux MC504/MC514 - Sistemas Operacionais Entrada e Sa da Pipes Islene Calciolari Garcia](https://reader034.fdocuments.net/reader034/viewer/2022050122/5f52b8945cfaa1496919944b/html5/thumbnails/9.jpg)
Device drivers Pipes Drivers no Linux
Device drivers
Software que “conversa” com o controlador
Os fabricantes devem fornecer dados detalhados para a escritados device drivers
Como acoplar um device driver ao kernel:
relink e rebootentrada em um arquivo e rebooton-the-flyveja o comando lsmod
![Page 10: MC504/MC514 - Sistemas Operacionaisislene/2s2014-mc514/io-pipe/...Device driversPipesDrivers no Linux MC504/MC514 - Sistemas Operacionais Entrada e Sa da Pipes Islene Calciolari Garcia](https://reader034.fdocuments.net/reader034/viewer/2022050122/5f52b8945cfaa1496919944b/html5/thumbnails/10.jpg)
Device drivers Pipes Drivers no Linux
Dynamic loading drivers
He explained, “As we know, a typical driver installationon Windows needs a reboot for it to get activated. Thatis really not acceptable; suppose we need to do it on aserver? That’s where Linux wins. In Linux, we can loador unload a driver on the fly, and it is active for useinstantly after loading. Also, it is instantly disabled whenunloaded. This is called dynamic loading and unloadingof drivers in Linux.”
Ref:Device Drivers, Part 2: Writing Your First Linux Driver in the
Classroom
![Page 11: MC504/MC514 - Sistemas Operacionaisislene/2s2014-mc514/io-pipe/...Device driversPipesDrivers no Linux MC504/MC514 - Sistemas Operacionais Entrada e Sa da Pipes Islene Calciolari Garcia](https://reader034.fdocuments.net/reader034/viewer/2022050122/5f52b8945cfaa1496919944b/html5/thumbnails/11.jpg)
Device drivers Pipes Drivers no Linux
Dynamic loading drivers
lsmod: lists currently loaded modules
insmod <module file>: inserts/loads the specified modulefile
modprobe <module>: inserts/loads the module, along withany dependencies
rmmod <module>: removes/unloads the module
Ref:Device Drivers, Part 2: Writing Your First Linux Driver in the
Classroom
![Page 12: MC504/MC514 - Sistemas Operacionaisislene/2s2014-mc514/io-pipe/...Device driversPipesDrivers no Linux MC504/MC514 - Sistemas Operacionais Entrada e Sa da Pipes Islene Calciolari Garcia](https://reader034.fdocuments.net/reader034/viewer/2022050122/5f52b8945cfaa1496919944b/html5/thumbnails/12.jpg)
Device drivers Pipes Drivers no Linux
Device driversSem ou com uma interface padrao
Tanenbaum: Figura 5.13
![Page 13: MC504/MC514 - Sistemas Operacionaisislene/2s2014-mc514/io-pipe/...Device driversPipesDrivers no Linux MC504/MC514 - Sistemas Operacionais Entrada e Sa da Pipes Islene Calciolari Garcia](https://reader034.fdocuments.net/reader034/viewer/2022050122/5f52b8945cfaa1496919944b/html5/thumbnails/13.jpg)
Device drivers Pipes Drivers no Linux
Device driversLinux kernel overview
http://www.opensourceforu.com/2010/11/
understanding-linux-device-drivers/
![Page 14: MC504/MC514 - Sistemas Operacionaisislene/2s2014-mc514/io-pipe/...Device driversPipesDrivers no Linux MC504/MC514 - Sistemas Operacionais Entrada e Sa da Pipes Islene Calciolari Garcia](https://reader034.fdocuments.net/reader034/viewer/2022050122/5f52b8945cfaa1496919944b/html5/thumbnails/14.jpg)
Device drivers Pipes Drivers no Linux
Camadas de software
Tanenbaum: Figura 5.10
![Page 15: MC504/MC514 - Sistemas Operacionaisislene/2s2014-mc514/io-pipe/...Device driversPipesDrivers no Linux MC504/MC514 - Sistemas Operacionais Entrada e Sa da Pipes Islene Calciolari Garcia](https://reader034.fdocuments.net/reader034/viewer/2022050122/5f52b8945cfaa1496919944b/html5/thumbnails/15.jpg)
Device drivers Pipes Drivers no Linux
Tratamento de interrupcoes
Tanenbaum: Figura 1.10
![Page 16: MC504/MC514 - Sistemas Operacionaisislene/2s2014-mc514/io-pipe/...Device driversPipesDrivers no Linux MC504/MC514 - Sistemas Operacionais Entrada e Sa da Pipes Islene Calciolari Garcia](https://reader034.fdocuments.net/reader034/viewer/2022050122/5f52b8945cfaa1496919944b/html5/thumbnails/16.jpg)
Device drivers Pipes Drivers no Linux
Tratamento de interrupcoes
Tanenbaum: Figura 5.5
![Page 17: MC504/MC514 - Sistemas Operacionaisislene/2s2014-mc514/io-pipe/...Device driversPipesDrivers no Linux MC504/MC514 - Sistemas Operacionais Entrada e Sa da Pipes Islene Calciolari Garcia](https://reader034.fdocuments.net/reader034/viewer/2022050122/5f52b8945cfaa1496919944b/html5/thumbnails/17.jpg)
Device drivers Pipes Drivers no Linux
Como programar os dispositivos?
Instrucoes especiais
IN REG, PORTOUT PORT, REG
Memory-mapped I/O
MOV REG, ADDR
Conforme o valor de ADDR, a instrucao MOV fara acesso auma palavra de memoria ou dispositivo
![Page 18: MC504/MC514 - Sistemas Operacionaisislene/2s2014-mc514/io-pipe/...Device driversPipesDrivers no Linux MC504/MC514 - Sistemas Operacionais Entrada e Sa da Pipes Islene Calciolari Garcia](https://reader034.fdocuments.net/reader034/viewer/2022050122/5f52b8945cfaa1496919944b/html5/thumbnails/18.jpg)
Device drivers Pipes Drivers no Linux
Como programar os dispositivos?
Tanenbaum: Figura 5.2
![Page 19: MC504/MC514 - Sistemas Operacionaisislene/2s2014-mc514/io-pipe/...Device driversPipesDrivers no Linux MC504/MC514 - Sistemas Operacionais Entrada e Sa da Pipes Islene Calciolari Garcia](https://reader034.fdocuments.net/reader034/viewer/2022050122/5f52b8945cfaa1496919944b/html5/thumbnails/19.jpg)
Device drivers Pipes Drivers no Linux
Barramento simples e dual
Tanenbaum: Figura 5.3
![Page 20: MC504/MC514 - Sistemas Operacionaisislene/2s2014-mc514/io-pipe/...Device driversPipesDrivers no Linux MC504/MC514 - Sistemas Operacionais Entrada e Sa da Pipes Islene Calciolari Garcia](https://reader034.fdocuments.net/reader034/viewer/2022050122/5f52b8945cfaa1496919944b/html5/thumbnails/20.jpg)
Device drivers Pipes Drivers no Linux
Direct Memory Access (DMA)
Tanenbaum: Figura 5.4
![Page 21: MC504/MC514 - Sistemas Operacionaisislene/2s2014-mc514/io-pipe/...Device driversPipesDrivers no Linux MC504/MC514 - Sistemas Operacionais Entrada e Sa da Pipes Islene Calciolari Garcia](https://reader034.fdocuments.net/reader034/viewer/2022050122/5f52b8945cfaa1496919944b/html5/thumbnails/21.jpg)
Device drivers Pipes Drivers no Linux
Imprimindo uma string
Tanenbaum: Figura 5.6
![Page 22: MC504/MC514 - Sistemas Operacionaisislene/2s2014-mc514/io-pipe/...Device driversPipesDrivers no Linux MC504/MC514 - Sistemas Operacionais Entrada e Sa da Pipes Islene Calciolari Garcia](https://reader034.fdocuments.net/reader034/viewer/2022050122/5f52b8945cfaa1496919944b/html5/thumbnails/22.jpg)
Device drivers Pipes Drivers no Linux
Imprimindo uma stringProgrammed I/O
Tanenbaum: Figura 5.7
Trecho de codigo do kernel
![Page 23: MC504/MC514 - Sistemas Operacionaisislene/2s2014-mc514/io-pipe/...Device driversPipesDrivers no Linux MC504/MC514 - Sistemas Operacionais Entrada e Sa da Pipes Islene Calciolari Garcia](https://reader034.fdocuments.net/reader034/viewer/2022050122/5f52b8945cfaa1496919944b/html5/thumbnails/23.jpg)
Device drivers Pipes Drivers no Linux
Imprimindo uma stringInterrupt-driven I/O
Tanenbaum: Figura 5.8
(a) Trecho de codigo do kernel(b) Tratador da interrupcao
![Page 24: MC504/MC514 - Sistemas Operacionaisislene/2s2014-mc514/io-pipe/...Device driversPipesDrivers no Linux MC504/MC514 - Sistemas Operacionais Entrada e Sa da Pipes Islene Calciolari Garcia](https://reader034.fdocuments.net/reader034/viewer/2022050122/5f52b8945cfaa1496919944b/html5/thumbnails/24.jpg)
Device drivers Pipes Drivers no Linux
Imprimindo uma stringDMA
(a) Trecho de codigo do kernel(b) Tratador de interrupcao
![Page 25: MC504/MC514 - Sistemas Operacionaisislene/2s2014-mc514/io-pipe/...Device driversPipesDrivers no Linux MC504/MC514 - Sistemas Operacionais Entrada e Sa da Pipes Islene Calciolari Garcia](https://reader034.fdocuments.net/reader034/viewer/2022050122/5f52b8945cfaa1496919944b/html5/thumbnails/25.jpg)
Device drivers Pipes Drivers no Linux
copy to user e copy from user
Confidently, Shweta took on the challenge, and modifiedmy read() and my write() ...
static char c;static ssize_t my_read(struct file *f, char __user *buf,
size_t len, loff_t *off) {printk(KERN_INFO ‘‘Driver: read()\n’’);buf[0] = c;return 1;
}static ssize_t my_write(struct file *f, const char __user *buf,
size_t len, loff_t *off) {printk(KERN_INFO ‘‘Driver: write()\n’’);c = buf[len - 1];return len;
}Ref:Device Drivers, Part 6: Decoding Character Device File Operations
![Page 26: MC504/MC514 - Sistemas Operacionaisislene/2s2014-mc514/io-pipe/...Device driversPipesDrivers no Linux MC504/MC514 - Sistemas Operacionais Entrada e Sa da Pipes Islene Calciolari Garcia](https://reader034.fdocuments.net/reader034/viewer/2022050122/5f52b8945cfaa1496919944b/html5/thumbnails/26.jpg)
Device drivers Pipes Drivers no Linux
copy to user e copy from user
“Almost there, but what if the user has provided aninvalid buffer, or if the user buffer is swapped out.Wouldn’t this direct access of the user-space buf justcrash and oops the kernel?” pounced Pugs.
static char c;
static ssize_t my_read(struct file *f, char __user *buf,size_t len, loff_t *off) {
printk(KERN_INFO ‘‘Driver: read()\n’’);if (copy_to_user(buf, &c, 1) != 0)
return -EFAULT;else
return 1;}Ref:Device Drivers, Part 6: Decoding Character Device File Operations
![Page 27: MC504/MC514 - Sistemas Operacionaisislene/2s2014-mc514/io-pipe/...Device driversPipesDrivers no Linux MC504/MC514 - Sistemas Operacionais Entrada e Sa da Pipes Islene Calciolari Garcia](https://reader034.fdocuments.net/reader034/viewer/2022050122/5f52b8945cfaa1496919944b/html5/thumbnails/27.jpg)
Device drivers Pipes Drivers no Linux
Pipes
$ grep xxx log.txt > log-xxx.txt$ wc -l log-xxx.txt$ rm log-xxx.txt
$ grep xxx log.txt | wc -l
![Page 28: MC504/MC514 - Sistemas Operacionaisislene/2s2014-mc514/io-pipe/...Device driversPipesDrivers no Linux MC504/MC514 - Sistemas Operacionais Entrada e Sa da Pipes Islene Calciolari Garcia](https://reader034.fdocuments.net/reader034/viewer/2022050122/5f52b8945cfaa1496919944b/html5/thumbnails/28.jpg)
Device drivers Pipes Drivers no Linux
pipe()
int pipe (int FILEDES[2])
The ‘pipe’ function creates a pipe and puts the filedescriptors for the reading and writing ends of the pipe(respectively) into ‘FILEDES[0]’ and ‘FILEDES[1]’.
Veja o codigo: mypipe.c
![Page 29: MC504/MC514 - Sistemas Operacionaisislene/2s2014-mc514/io-pipe/...Device driversPipesDrivers no Linux MC504/MC514 - Sistemas Operacionais Entrada e Sa da Pipes Islene Calciolari Garcia](https://reader034.fdocuments.net/reader034/viewer/2022050122/5f52b8945cfaa1496919944b/html5/thumbnails/29.jpg)
Device drivers Pipes Drivers no Linux
Pipe com entrada e saıda padrao?
int dup2(int oldfd, int newfd);
dup2 makes newfd be the copy of oldfd, closing newfdfirst if necessary. After successful return of dup or dup2,the old and new descriptors may be used interchangeably.
Veja o codigo: mypipe2.c
![Page 30: MC504/MC514 - Sistemas Operacionaisislene/2s2014-mc514/io-pipe/...Device driversPipesDrivers no Linux MC504/MC514 - Sistemas Operacionais Entrada e Sa da Pipes Islene Calciolari Garcia](https://reader034.fdocuments.net/reader034/viewer/2022050122/5f52b8945cfaa1496919944b/html5/thumbnails/30.jpg)
Device drivers Pipes Drivers no Linux
Processos conectados de maneira transparente
$ cm1 <args1> | cmd2 <args2>
A modificacao da entrada e saıda padrao deve ser feita antesda chamada a execve().
Veja o codigo: minishell.c
![Page 31: MC504/MC514 - Sistemas Operacionaisislene/2s2014-mc514/io-pipe/...Device driversPipesDrivers no Linux MC504/MC514 - Sistemas Operacionais Entrada e Sa da Pipes Islene Calciolari Garcia](https://reader034.fdocuments.net/reader034/viewer/2022050122/5f52b8945cfaa1496919944b/html5/thumbnails/31.jpg)
Device drivers Pipes Drivers no Linux
popen()
FILE *popen(const char *command,const char *type);
int pclose(FILE *stream);
The popen() function opens a process by creating a pipe,forking, and invoking the shell. Since a pipe is bydefinition unidirectional, the type argument may specifyonly reading or writing, not both; the resulting stream iscorrespondingly read-only or write-only.
Veja o codigo: mypopen.c e mypopen2.c
![Page 32: MC504/MC514 - Sistemas Operacionaisislene/2s2014-mc514/io-pipe/...Device driversPipesDrivers no Linux MC504/MC514 - Sistemas Operacionais Entrada e Sa da Pipes Islene Calciolari Garcia](https://reader034.fdocuments.net/reader034/viewer/2022050122/5f52b8945cfaa1496919944b/html5/thumbnails/32.jpg)
Device drivers Pipes Drivers no Linux
Programando um device driver
Veja a serie: Device drivers de Anil Kumar Pugalia
Exemplo numero 1: ofd.c
Desafio: como implementar um device driver comcomportamento de pipe?