domingo, 25 de enero de 2009

Dispositivos

Dispositivo (device): cualquier tipo de sistema físico o lógico con el que interactúa el kernel
→ Dispositivo físico: p.e. discos, dispositivos serie, CD..
→ Dispositivo lógico: p.e. terminales virtuales, memoria, puertos..
Driver de dispositivos: parte del kernel que se encarga de interactuar con el dispositivo
→ puede estar compilado en el kernel o puede cargarse como un módulo
→ el fichero /proc/devices lista los drivers cargados en el kernel
Fichero de dispositivos: ficheros especiales que permiten a als aplicaciones interactuar con los dispositivos mediante rutinas estándar de manejo de ficheros (open,read, etc.)
→ están localizados en el directorio /dev


Tipos de dispositivos:

Dispositivos terminales: para comunicarnos con el sistema
→ terminales virutales: dispositivos /dev/ttyX con X d 0 a 63
→asociados a las distintas consolas de texto
→Pseudoterminales: pares de archivos de dispositivo que sirven como canal de comunicación entre procesos
→ no controlan ningún dispositivo físico real
→ lo que se escriba en cualquiera de los dos será recibido por el otro
→ se utilizan en conexiones remotas y en terminales del entorno de ventanas
→ los archivos del par se llaman maestro y esclavo
→Notación BSD: maestros /dev/ptyXX, esclavos /dev/ttyXX
→Notación Unix98: maestro /dev/ptmx (sólo uno), esclavos /dev/ptx/X (son creados automáticamente por un sistema de archivos virtual, devpts)
→ Dispositivos terminales serie: dispositivos /dev/ttySX
→ dispositivos asociados a los distintos puertos serie
→ Comando relacionados:
→ tty muestra el terminal en el que estamos conectados
→ stty permite cambiar características del terminal

Otros dispositivos
→ Discos:
→ IDE: /dev/hda, /dev/hdb, /dev/hdc, /dev/hdd
→ SCSI: /dev/sdX con X siendo a,b, ...
→ Floppy: /dev/fdX (pueden llevar un código indicando el tipo de disco y capacidad)
→ Particiones: el dispositivo seguido de un número
→ Dispositivos de loop: /dev/loop0, /dev/loop1,...
→ permiten usar un fichero como si de un dispositivo de disco se tratase: los datos se escriben y se leen en el fichero, en vez de en pistas y sectores del disco real
→ Ejemplo: monta una imagen de un CD: # mount -o loop,ro -t iso9660 imagen.iso /mnt/iso
→ es posible incluso crear ficheros encriptados que nos monten una partición del disco
→ Otros
→ dispositivos de memoria /dev/mem, /dev/kmem,etc..
→ dispositivos de audio: /dev/audio, /dev/mixer, etc
→ dispositivo /dev/zero: generador de valores nulo
→ dispositivo /dev/urandom: generador de valores aleatorios
→ estos dos últimos se suelen usar con el comando dd para crear ficheros con valores iniciales nulos o aleatorios

Características de los ficheros de dispositivos:
Un fichero de dispositivos es diferente aun fichero normal
→Ejemplo: $ ls -l /dev/hda
brw-rw---- 1 root disk 3, 0 2004-09-18 13:51 /dev/hda
→ La primera letra (c o b) indica dispositivo de caracteres o de bloques
→ caracteres: lee o escribe byte a byte
→ bloques: lee o escribe bloque a bloque (bloques usualemnte de 512bytes)
→ Los dos números antes de la fecha representan los números principal (major) y secundario (minor) que identifican al dispositivo
→Major numbre: identifica el driver que maneja el dispositivo
→Minor numbre: permite al driver identificar un dispositivo concreto entre varios controlados por el mismo driver

Creación de ficheros de dispositivos
Para crear un fichero de dispositivos se usa el comando mknod
→ Comando mknod: crea ficheros de caracteres o bloques (también puede crear tuberías)
→ Formato: mknod [opciones ] nombre tipo [major minor ]
→ Ejemplo: # mknod /dev/hda b 3 0
El script MAKEDEV permite crear dispositivos de una forma fácil( sin necesidad de conocer los números principal y secundario)

Gestión dinámica de dispositivos:
Los UNIX tradicionales mantienen en /dev una lista estática de posibles dispositivos
→ la mayoría de estos dispositivos no existe realmente en el sistema
→ esto puede suponer un problema para dispositivos que se enchufan "en caliente"
En Linux existen herramientas para manejar estos dipsositivos de forma dinámica:
devfs: filesystem especial presente en varios UNIX, como FreeBSD y Linux
→ controla la creación , borrado y gestión de permisos de los ficheros de dispositivos
→ el Linux 2.6 se ha abandonado en favor de udev
udev: reemplazo de devfs en Linux 2.6, apra lagestión de ficheros de dispositivos
→ udev tiene un conjunto de ventajas respecto a devfs
→ se ejecuta en el espacio de usuairo, y no en el del kernel, como devfs
→ permite personalizar el nombre de dispositivo
→ esta última característica permite resolver el problema del nombre asignado a dispositivos, que se enchufan en caliente (que puede variar en función del orden en que se conectan)