X-Git-Url: http://git.cascardo.eti.br/?a=blobdiff_plain;f=_ldd.xml;h=a1085c6615fc247d80fdc4a0d68044d1efd75d4f;hb=026a5113ac13ea107f4efc166086756664fd2149;hp=47ebedfe7af0a854558475b0cfc586e5c2d13260;hpb=2cb687376e3a8daa8ac36295918d8747ef7c5bdd;p=cascardo%2Fkernel%2Fold_slides%2F.git diff --git a/_ldd.xml b/_ldd.xml index 47ebedf..a1085c6 100644 --- a/_ldd.xml +++ b/_ldd.xml @@ -9,26 +9,26 @@ -Introduction +Introdução -Devices in POSIX Systems are files in /dev directory. As with any files -in POSIX, they may be opened, closed, read from, written to, seeked, -ioctl'd, and others. +Dispositivos em sistemas POSIX são arquivos no diretório /dev. Como quaisquer +outros arquivos no POSIX, eles podem ser abertos, fechados, lidos, escritos, +posicionados, controlados, entre outros. -Examples of device files: +Exemplos de arquivos de dispositivos: -/dev/sda - A SCSI block device +/dev/sda - Um dispositivo de bloco SCSI -/dev/ttyS0 - A Serial terminal device +/dev/ttyS0 - Um dispositivo terminal serial @@ -36,11 +36,11 @@ Examples of device files: -POSIX I/O calls +Chamandas de Entrada e Saída em POSIX -POSIX systems have some standard calls for I/O. Since devices are files, -these same system calls are used to work with devices. We are gonna work -with the following calls: +Sistemas POSIX possuem algumas chamadas padrões para E/S. Já que dispositivos +são arquivos, essas mesmas chamadas são utilizadas para trabalhar com +dispositivos. Vamos trabalhar com as seguintes chamadas: @@ -56,7 +56,7 @@ write close -seek +lseek ioctl @@ -67,19 +67,19 @@ ioctl open -The open system call opens a file. When working with devices, that's -when some initialization should be done. Some devices may be opened only -once at a time. +A chamada de systema open abre um arquivo. Quando estivermos trabalhando com +dispositivo, é quando alguma inicialização deve ser feita. Alguns dispositivos +só podem ser abertos por um processo de cada vez. int open (char * filename, int flags); -flags may be O\_RDONLY, O\_WRONLY, O\_RDWR and many others, some not -important for devices. +flags podem ser O\_RDONLY, O\_WRONLY, O\_RDWR e muitas outras, algumas menos +importantes para dispositivos. -Example: +Exemplo: fd = open ("/dev/ttyS0", O\_RDWR); @@ -89,13 +89,13 @@ fd = open ("/dev/ttyS0", O\_RDWR); close -The close system call closes an open file. +A chamada de sistema close fecha um arquivo aberto. int close (int fd); -Example: +Exemplo: close (fd); @@ -105,18 +105,18 @@ close (fd); read -The read system call reads data from an open file into a buffer. For -devices, it reads from the device. +A chamada de sistema read lê de um arquivo aberto para um buffer. Para +dispositivos, ela lê de um dispositivo. int read (int fd, char *buffer, int bsz); -Read returns the number of bytes written into the buffer, which may be -less than the number of bytes requested for any number of reasons. +read retorna o número de bytes escritos no buffer, que pode ser menor que o +número de bytes requisitados por diferentes razões. -Example: +Exemplo: c = read (fd, buffer, sizeof (buffer)); @@ -126,22 +126,106 @@ c = read (fd, buffer, sizeof (buffer)); write -The write system call writes data to an open file from a buffer. For -devices, it writes to the device. +A chamada de sistema write escreve dados de um buffer em um arquivo aberto. Para +dispositivos, ela escreve no dispositivo. int write (int fd, char *buffer, int bsz); -Write returns the number of bytes written to the file, which may be -less than the number of bytes requested for any number of reasons. +write retorna o número de bytes escritos no arquivo, que pode ser menor que o +número de bytes requisitados por diferentes razões. -Example: +Exemplo: c = write (fd, buffer, strlen (buffer)); + +lseek + +A chamada de sistema lseek muda a posição corrente do arquivo, permitindo a +leitura ou escrita naquela posição. Posicionar em um dispositivo pode ter +diferentes significados. + + +off\_t lseek (int fd, off\_t pos, int whence); + + +O significado da posição depende do valor de whence, que pode ser +SEEK\_SET (a posição absoluta), SEEK\_CUR (relativa a posição corrente), +SEEK\_END (relativa ao fim do arquivo). + + +Exemplo: + + +lseek (fd, 0, SEEK\_END); + + + + +ioctl + +A chamada de sistema ioctl é uma operação "pega-tudo". Para aquelas operações +que não se encaixam no modelo leitura/escrita, ioctl permite ao usuário enviar +um comando com um argumento opcional ao dispositivo. Esse comando pode aceitar +entrada ou gerar saída. + + +int ioctl (int fd, int request, char *arg); + + +O último argumento é opcional e depende do tipo de requisição. Todo dispositivo +ou classe de dispositivo pode ter seu diferente conjunto de ioctl's. + + +Exemplo: + + +struct ifreq req; ioctl (fd, SIOCGIFFLAGS, \&req); + + + + +Módulos do Linux + +Linux é modularizado. Drivers, sistemas de arquivos, protocolos de rede e outros +podem ser carregados em tempo de execução. Todo módulos tem uma função init e +uma função exit. + + +Módulos podem ter parâmetros. Em tempo de carga, parâmetros, que podem ser +booleanos, inteiros ou strings, são dados pelo usuário. + + + + +Tipos e números de dispositivos + +Dispositivos no Linux podem ter diferentes tipos, incluindo dispositivos de +caractere, dispositivos de bloco e dispositivos de rede. Tanto dispositivos de +caractere quanto de bloco têm números identificadores, um número maior e um +número menor. + + + + +Alocação de dispositivos de caractere + +No Linux, números maior e menor devem ser requisitados ou alocados. As chamadas +para fazê-lo para os dispositivos de caractere são: + + +int register\_chrdev\_region (dev\_t first, unsigned int count, char +*name); +int alloc\_chrdev\_region (dev\_t *dev, unsigned int firstminor, +unsigned int count, char *name); +void unregister\_chrdev\_region (dev\_t dev, unsigned int count); + + +