Tema 10. Periféricos

Anuncio
Tema 10.
Periféricos
Administración de Sistemas Operativos y Periféricos
Ma Pilar González Férez
Tema 10. Periféricos – p. 1/34
Índice
1. Ficheros
2. Módulos del núcleo
3. Conectando un dispositivo
4. Udev
5. Otras herramientas
6. HAL
7. The magic SysRq key
Tema 10. Periféricos – p. 2/34
Ficheros
Ficheros especiales de dispositivo
Todos los dispositivos tienen un fichero en /dev que lo
representa (/dev/sda1, /dev/lp0, /dev/sdb, /dev/audio, . . . )
Son ficheros especiales de bloque o de carácter (dependiendo del
tipo de dispositivo)
Cada uno de estos ficheros tiene asociados 2 números que el
núcleo utiliza para mapear las referencias a los mismos:
Número mayor (major number) ⇒ Identifica con qué driver está
asociado ese fichero, e.d., el tipo de dispositivo
Número menor (minor number) ⇒ Identifica la instancia
concreta del dispositivo asociado a ese fichero. También se le
conoce como unit number
brw-rw----
1 root disk 8, 0 abr 11 12:29 sda
Algunos de estos ficheros son creados por defecto, otros se
crearán al conectar el dispositivo mediante la herramienta udev
Tema 10. Periféricos – p. 3/34
Ficheros (ii)
/sysfs ⇒ Monta el sistema de ficheros basado en memoria Sysfs
Exporta al espacio de usuarios ciertos atributos e información
(estructuras de datos internas del núcleo) sobre los dispositivos
conectados en el sistema
La información es almacenada en ficheros que normalmente
contienen un único atributo
Estos ficheros se organizan en una jerarquía de directorios
Sysfs es manejado por el núcleo (aparece en el 2.6 y superiores)
Muestra los dispositivos hardware disponibles, sus atributos y
módulos o drivers
Determinadas herramientas, como udev, lo utilizan para obtener
información de los dispositivos, en concreto de sus directorios
block y class
Tema 10. Periféricos – p. 4/34
Ficheros (iii)
/proc ⇒ Monta el sistema de ficheros virtual basado en memoria
Proc
Contiene información sobre el hardware del sistema, cualquier
proceso que se esté ejecutando, la configuración del núcleo, etc.
Algunos ficheros en /proc:
cpuinfo ⇒ Información del procesador del sistema
devices ⇒ Los dispositivos de caracteres y de bloques actualmente
configurados (sólo incluye los dispositivos cuyos módulos están cargados)
interrupts ⇒ Interrupciones por IRQ
iomem ⇒ Mapa actual de la memoria del sistema para diversos dispositivos
ioports ⇒ Listado de puertos registrados para la comunicación de
entrada/salida con un dispositivo
modules ⇒ Listado de todos los módulos cargados por el sistema
partitions ⇒ Listado de las particiones de cada disco, junto con su tamaño
y los números “mayor” y “menor”
mounts ⇒ Listado de los sistemas de ficheros montados
Tema 10. Periféricos – p. 5/34
Ficheros (iv)
/proc (continúa. . . )
Algunos directorios en /proc:
bus/ ⇒ Información específica sobre los diversos buses disponibles en el
sistema y los dispositivos conectados
driver/ ⇒ Información para drivers (módulos) específicos que el núcleo
está usando
net/ ⇒ Proporciona una visión exhaustiva de diversos parámetros y
estadísticas de red
scsi/ ⇒ Información sobre dispositivos SCSI conectados (o simulados como
SCSI)
sys/ ⇒ Proporciona información sobre el sistema y permite al administrador
activar y desactivar características del núcleo:
· sys/dev/ ⇒ Parámetros para dispositivos particulares en el sistema
· sys/fs/ ⇒ Información referente a varios aspectos del sistema de
ficheros
· sys/kernel/ ⇒ Archivos de configuración que afectan directamente al
funcionamiento del núcleo
· sys/net/ ⇒ Información sobre la configuración de red en funcionamiento
· sys/vm/ ⇒ La configuración del subsistema de memoria virtual del núcleo
Tema 10. Periféricos – p. 6/34
Módulos del núcleo
El núcleo de Linux:
Está organizado siguiendo una arquitectura monolítica y un
diseño modular
Por defecto incluye un soporte mínimo
El resto de características (soporte para distintos SF,
dispositivos, . . . ) se cargan, de forma dinámica, mediante los
módulos del núcleo, según se van necesitando
Esta carga dinámica de módulos permite la incorporación en
“caliente” de nuevo código al núcleo, sin necesidad de reiniciar el
sistema
Los módulos son "trozos de sistema operativo", en forma de ficheros
objeto (.ko), que se pueden insertar y extraer en tiempo de
ejecución, añadiendo o eliminando la funcionalidad que incorporan
Tema 10. Periféricos – p. 7/34
Módulos del núcleo (ii)
El código de los módulos cargados pasa a ser parte del propio
núcleo y, por lo tanto, se ejecuta en el modo núcleo (o supervisor) del
procesador, con acceso a todas las funciones del núcleo, a las
funciones exportadas por módulos previamente insertados y a todo
el hardware de la máquina sin restricciones
La única diferencia con código enlazado en el núcleo es la
posibilidad de extraer el módulo una vez que ha realizado su labor o
ha dejado de ser útil, liberando así todos los recursos usados
Los módulos permiten incluir funcionalidad al núcleo de forma que se
soporten, por ejemplo:
Distintos sistemas de ficheros (ext3, ext4, jfs, vfat, . . . )
Los distintos dispositivos hardware instalados (tarjeta de red,
sonido, gráfica, . . . ). (Normalmente se conocen como drivers)
Distintos protocolos de red
Tema 10. Periféricos – p. 8/34
Módulos del núcleo (iii)
Algunos módulos tienen dependencias ⇒ necesitan que otros
módulos sean cargados previamente para poder cargarse (y por tanto
funcionar correctamente)
Cada núcleo instalado tiene sus propios módulos
/lib/modules/numero_version_kernel/kernel/ ⇒ directorio
en el que están los módulos
/lib/modules/numero_version_kernel/kernel/drivers ⇒ Los
módulos para la gestión de los dispositivos
/lib/modules/numero_version_kernel/kernel/fs ⇒ Los módulos para
la gestión de los sistemas de ficheros
/lib/modules/numero_version_kernel/kernel/net ⇒ Los módulos para
la gestión de los distintos protocolos de red
Si se compila el núcleo, se puede seleccionar que determinadas
funcionalidades que se cargan como módulos, se incluyan por
defecto en el núcleo. Así, el núcleo incluirá esa funcionalidad y no
habrá que cargarla como módulo a posteriori cuando se necesite
Tema 10. Periféricos – p. 9/34
Módulos del núcleo (iv)
¿Cuándo se cargan los módulos?
initrd.img ⇒ Le proporciona al núcleo, en el momento del
inicio del sistema, determinados módulos que necesita para
acceder al sistema por primera vez (por ejemplo a un SF, a un sistema
RAID, al disco duro o a otros dispositivos hardware)
/etc/rc.d/rc.sysinit ⇒ En el proceso de arranque se
cargan los módulos de todos los dispositivos presentes
Directamente con la orden modprobe algunos módulos que necesita
Con start_udev se cargan los módulos de todos los dispositivos que hay
conectados al arrancar (y aún no se ha cargado su módulo)
Determinados scripts de inicio de demonios (/etc/init.d/)
cargan los módulos que precisan con modprobe
En “caliente”, al conectar un nuevo dispositivo Udev lo detectará
y cargará el módulo correspondiente
El administrador, a “mano”, si lo necesita
Tema 10. Periféricos – p. 10/34
Módulos del núcleo (v)
lsmod ⇒ Muestra un listado de los módulos cargados, informando
sobre el nombre, su tamaño, el recuento de usos y sus
dependencias. Obtiene los datos de /proc/modules
Module
nfsd
lockd
nfs_acl
Size
275600
71300
3120
Used by
9
1 nfsd
1 nfsd
modinfo ⇒ Muestra información sobre un módulo del núcleo
(fichero, autor, descripción, licencia, dependencias, parámetros, etc.)
[root@xxxx ˜]# /sbin/modinfo vfat
filename: /lib/modules/2.6.30.10-105.2.23.fc11.x86_64/kernel/fs/fat/vfat.ko
author:
Gordon Chaffee
description: VFAT filesystem support
license:
GPL
srcversion:
EFC768E1C562451391FF83A
depends:
fat
vermagic:
2.6.30.10-105.2.23.fc11.x86_64 SMP mod_unload
Tema 10. Periféricos – p. 11/34
Módulos del núcleo (vi)
insmod ⇒ Carga módulos, pero no resuelve dependencias
rmmod ⇒ Descarga módulos cargados, pero no tiene en cuenta
dependencias
modprobe
Carga módulos, verificando sus dependencias y cargando previamente los
módulos necesarios (se recomienda usar en vez de insmod)
-r ⇒ Descarga un módulo y los módulos de los que dependía
-l ⇒ Muestra un listado de todos los módulos disponibles
−−show-depends ⇒ Muestra las dependencias de un módulo
depmod ⇒ Genera el fichero modules.dep y los ficheros de mapas
(modules.usbmap, modules.pcimap, . . . )
modules.dep ⇒ Contiene un listado con las dependencias entre módulos. Está
en el directorio /lib/modules/numero_version_kernel/
Los ficheros de mapas son como bases de datos de módulos para un tipo de
dispositivo concreto, que indican qué dispositivos soportan cada uno de los
módulos disponibles. Sirven para seleccionar el módulo a usar para un
dispositivo conectado. Están en /lib/modules/numero_version_kernel/
Tema 10. Periféricos – p. 12/34
Módulos del núcleo (vii)
Con los ficheros del directorio /etc/modprobe.d/ se puede
cambiar el comportamiento de modprobe:
Especificar opciones o parámetros para un módulo
Asignar “alias” (o nombres alternativos) a un módulo
Corregir el comportamiento normal de modprobe, como por
ejemplo insertando más de un módulo o ejecutando un fichero
Entre las posibles opciones están:
alias nombre_alias nombre_modulo ⇒ Asignar un alias a un módulo
options nombre_modulo opciones ... ⇒ Especificar opciones
install nombre_modulo orden_a_ejecutar ⇒ Ejecutar la orden
indicada en vez de insertar el módulo, como se haría normalmente
remove nombre_modulo orden_a_ejecutar ⇒ Similar a la opción
“install”, pero al eliminar un módulo
include nombre_fichero ⇒ Incluir otros ficheros de configuración, si se
indica un directorio se incluyen todos los ficheros que haya en él
Tema 10. Periféricos – p. 13/34
Módulos del núcleo (viii)
Posibles ejemplos
alias scsi_hostadapter libata
alias scsi_hostadapter1 pata_via
options snd-via82xx index=0
alias snd-card-1 snd-mpu401
options snd-card-1 index=1
options snd-mpu401 index=1
alias eth2 r8169
alias eth3 via-rhine
alias snd-card-0 snd-via82xx
options snd-card-0 index=0
Tema 10. Periféricos – p. 14/34
Conectando un dispositivo
Cuando el núcleo detecta que ha ocurrido un evento, normalmente
hardware, lo notifica al software que se ejecuta en modo usuario:
El evento será: “se ha conectado un nuevo dispositivo” o “se ha
desconectado un dispositivo”
El software en modo usuario realizará las tareas necesarias,
según el evento, para poder usar el dispositivo (o dejar de usarlo)
Es muy útil para crear el fichero especial del dispositivo conectado, cargar los
módulos para poder manejar el dispositivo, ejecutar programas de
inicialización, montar el dispositivo, . . .
El objetivo es que al conectar un dispositivo se pueda usar
directamente (sin intervención del usuario en el proceso de preparación)
Inicialmente, incluye soporte para dispositivos USB y PCI (Cardbus),
y puede automáticamente configurar algunos interfaces de red
Tema 10. Periféricos – p. 15/34
Udev
Udev ⇒ Manejador de dispositivos dinámicos (Userspace device
manager )
Recibe las notificaciones del núcleo sobre los eventos de cambios en
el hardware y realiza las tareas oportunas:
Proporciona un directorio de dispositivos, /dev/, dinámico, que
contiene sólo los ficheros de los dispositivos conectados en un
momento dado ⇒ Crea o elimina los ficheros especiales de
dispositivo o renombra las interfaces de red, según se conectan
o desconectan dispositivos
Carga los módulos necesarios para manejar ese dispositivo
Ejecuta programas de inicialización, si es necesario
Mantiene una base de datos sobre los dispositivos presentes en
el sistema
El demonio udevd es el proceso encargado de hacer estas tareas
cuando el núcleo le informa del evento producido
Tema 10. Periféricos – p. 16/34
Udev (ii)
El núcleo informa a udevd pasándole:
Como parámetro el nombre del subsistema del núcleo específico
cuyo evento es procesado (“usb”, “scsi_device”, “pci”, . . . )
En variables de entorno, información sobre la acción que se ha
producido (“ACTION”, “DEVPATH”, . . . )
Al conectar un dispositivo ⇒ udevd lee de SYSFS información sobre
el dispositivo y obtiene sus atributos (como la etiqueta, el no de serie o el no
del bus del dispositivo). Estos atributos determinan un nombre único a
asignarle al fichero especial de dispositivo a crear
Al desconectar un dispositivo ⇒ udevd obtiene de la base de datos
el nombre del fichero de dispositivo a eliminar
udevd usa una serie de ejecutables que hay en /lib/udev/ para
realizar algunas de las tareas
Tema 10. Periféricos – p. 17/34
Udev (iii)
Funcionamiento de udevd
1. El núcleo le informa si un dispositivo es conectado/desconectado
2. Mira en /sys/ si el driver proporciona un fichero dev que
contiene el número mayor y menor para el fichero del dispositivo
3. Usa las reglas que están /etc/udev/rules.d/ para saber qué
tiene que hacer. En concreto:
Crear el fichero especial de dispositivo y los enlaces
simbólicos al mismo con los nombres alternativos propuestos
Establecer los permisos y los propietarios del fichero especial
de dispositivo creado
Si es necesario, cargar los módulos para poder trabajar con el
dispositivo
Si se le indica, ejecutar los programas especificados, por
ejemplo, para la inicialización
Tema 10. Periféricos – p. 18/34
Udev (iv)
Los ficheros de reglas de Udev
Las reglas le indican a udevd el nombre a asignar al fichero
especial de dispositivo, los permisos y propietarios, si es
necesario ejecutar un programa, y que cargue el módulo
Los ficheros de reglas están en el directorio
/etc/udev/rules.d/
udevd procesa todos los ficheros de reglas en orden alfabético
El nombre de los ficheros suele ser
“número_dos_dígitos-nombre_descriptivo.rules”:
50-udev-default.rules o 60-cdrom_id.rules
Las reglas locales se podrían guardar en un fichero llamado
/etc/udev/rules.d/99-local.rules
Se recomienda mantener el nombre por defecto para el
dispositivo e incluir otros nombres alternativos como “enlaces
simbólicos”
Tema 10. Periféricos – p. 19/34
Udev (v)
Formato de las reglas de Udev
Una regla está formada por una lista de una o más claves
separadas por comas: key [, key]
Hay dos tipos de claves: de comprobación y de asignación
Si todas las claves de comprobación de una regla se cumplen, se
“ejecuta” la clave de asignación, que permitirá:
Asignar un nombre al fichero especial de dispositivo, permisos o propietario
Establecer un “enlace simbólico” a ese fichero de dispositivo
Ejecutar un programa como parte del manejo del evento: cargar un módulo
Si no se cumple ninguna regla, no se ejecuta nada y asigna el
nombre por defecto para el fichero especial de dispositivo
Cada clave tiene un comportamiento distinto que depende del
operador usado. Los posibles operadores son:
==
Comparación igualdad
!=
=
Asignar un valor
+=
Comparación de desigualdad
Añadir un valor a los ya asignados
Tema 10. Periféricos – p. 20/34
Udev (vi)
Formato de las reglas de Udev
Claves de comprobación:
ACTION ⇒ coincide con la acción indicada por el kernel
BUS ⇒ coincide el tipo de bus del dispositivo
ATTR{fichero_sys} ⇒ coincide con el valor de un atributo sysfs del
“dispositivo” del evento
ATTRS{fichero_sys} ⇒ busca en el directorio del dispositivo (devpath) y
en sus directorios “padre” un dispositivo con un atributo sysfs que coincida
con el indicado
KERNEL ⇒ concuerda el nombre que el núcleo asigna al dispositivo
PROGRAM ⇒ ejecutar el programa externo, la clave es “verdad” si el programa
termina correctamente (valor de salida 0)
ENV{var} ⇒ comprueba una variable de entorno
Tema 10. Periféricos – p. 21/34
Udev (vii)
Formato de las reglas de Udev
Claves de asignación:
NAME ⇒ indica el nombre del fichero de dispositivo en el directorio /dev/
SYMLINK ⇒ permite especificar nombres adicionales
OWNER, GROUP, MODE ⇒ propietario, grupo propi. y permisos del fichero
RUN ⇒ ejecutar un programa
IMPORT{tipo} ⇒ importa el resultado o el contenido del fichero en variables
de entorno. Donde “tipo” puede ser un programa a ejecutar o un fichero a leer
ENV{var} ⇒ exporta una variable de entorno
En las claves de comprobación se pueden usar “comodines”
En “NAME” y “SYMLINK” se pueden usar operadores especiales:
%n ⇒ será sustituido por el número asignado por el núcleo. Por ejemplo,
’sda3’ tiene el número ’3’
%k ⇒ representa el nombre que el núcleo le da al dispositivo
Tema 10. Periféricos – p. 22/34
Udev (viii)
Ejemplos de reglas de Udev
# Valores por defecto para propietario, grupo propietario y permisos
KERNEL=="*", OWNER="root", GROUP="root", MODE="0600"
# Asignando el grupo propietario y los permisos
SUBSYSTEM=="block", GROUP="disk", MODE="0640"
#Averiguando el valor de la variable ID_SERIAL, si está vacı́a
KERNEL=="sd*[!0-9]", ENV{ID_SERIAL}=="", IMPORT{program}="/sbin/usb_id -x"
KERNEL=="fd[0-9]*", NAME="%k", SYMLINK="floppy/%n" #Asignando un nombre
BUS=="usb", ATTRS{serial}=="L04", NAME="%k", SYMLINK="hp1300"
BUS=="usb", ATTRS{vendor}=="FUJIFILM", ATTRS{model}=="M100", NAME="%k", \
SYMLINK+="camera%n", SYMLINK+="fuji%n"
#/dev/sda, /dev/sda1,..., y /dev/uhd, /dev/uhd1,... (tantos como particiones)
BUS=="usb", KERNEL=="sd*", ATTRS{product}=="USB 2.0 Storage Device", \
NAME="%k", SYMLINK="uhd%n"
KERNEL=="sd[a-z]", BUS=="scsi", ATTRS{removable}=="1", \
PROGRAM="/etc/udev/scripts/check-cdrom.sh %k DVD-R", \
SYMLINK+="dvdwriter%e"
ACTION=="add", SUBSYSTEM=="?*", ENV{MODALIAS}=="?*", \
RUN+="/sbin/modprobe $env{MODALIAS}"
Tema 10. Periféricos – p. 23/34
Udev (ix)
Identificando dispositivos a través de los ficheros del SYSFS:
El sistema de ficheros SYSFS (/sys/) guarda pequeños
ficheros (normalmente tienen un atributo por fichero) debajo de un árbol
de directorios que proporcionan información sobre el hardware
Las claves “ATTR” y “ATTRS” en las reglas de Udev permiten
buscar y usar información en estos ficheros
Por ejemplo, para una cámara conectada hay un fichero en
/sys/block/sdb/device/model que contiene “USB 2.0M
DSC”, por lo que se puede usar la clave ATTRS{model}==“USB
2.0M DSC”
Se pueden utilizar cualquier fichero del directorio /sys/, hasta
un máximo de 5
Es necesario encontrar un directorio en /sys/ que se
corresponda con el hardware e incluya un fichero llamado “dev”.
Todos estos directorios están en /sys/block o en /sys/class
Tema 10. Periféricos – p. 24/34
Udev (x)
Identificando dispositivos a través de los ficheros de “SYSFS” . . .
Una vez encontrado un directorio de ese tipo, la herramienta
udevinfo muestra información sobre el dispositivo que se
puede usar en las reglas. Se puede ejecutar:
# udevinfo -a -p /sys/path/to/hardware/info
Para localizar el directorio se puede usar también udevinfo:
# udevinfo -q path -n /dev/sdc
/block/sda
# udevinfo -a -p ‘udevinfo -q path -n /dev/sdc‘
looking at device ’/block/sdc’:
KERNEL=="sdc"
SUBSYSTEM=="block"
DRIVER==""
ATTR{capability}=="13"
ATTR{stat}=="
44
503
1148
ATTR{size}=="2031616"
ATTR{removable}=="1"
ATTR{range}=="16"
ATTR{dev}=="8:32"
284
0
0
Tema 10. Periféricos – p. 25/34
Udev (xi)
# udevinfo -a -p ‘udevinfo -q path -n /dev/sdc‘
.....
looking at parent device ’/devices/pci0000:00/0000:00:1d.7/usb1/1-5’:
KERNELS=="1-5"
SUBSYSTEMS=="usb"
DRIVERS=="usb"
ATTRS{serial}=="575104000138"
********
ATTRS{product}=="USB BAR
"
ATTRS{manufacturer}=="
"
ATTRS{quirks}=="0x0"
ATTRS{maxchild}=="0"
ATTRS{version}==" 2.00"
ATTRS{devnum}=="4"
..........
looking at parent device ’/devices/pci0000:00/0000:00:1d.7/usb1’:
KERNELS=="usb1"
SUBSYSTEMS=="usb"
DRIVERS=="usb"
ATTRS{serial}=="0000:00:1d.7"
********
ATTRS{product}=="EHCI Host Controller"
Tema 10. Periféricos – p. 26/34
Udev (xii)
¿Cómo se crean el resto de ficheros del directorio
/dev/ (los que están allí nada más arrancar)?
Al empezar el arranque, el fichero initrd.img crea
expresamente una serie de dispositivos (como las particiones, los
dispositivos de las terminales, /dev/zero o /dev/null)
Cuando el Init toma el control, se ejecuta start_udev (es
lanzado por /etc/rc.d/rc.sysinit) que crea los ficheros indicados
en /etc/udev/devices y lanza el demonio udevd
En el directorio /etc/udev/makedev.d/ se pueden crear
ficheros que contengan los nombres de los dispositivos a crear
en el arranque
Tema 10. Periféricos – p. 27/34
Otras herramientas
lsusb ⇒ Visualiza información sobre todos los buses USB del sistema y todos los
dispositivos conectados a ellos
-v ⇒ Imprimir información detallada de los dispositivos
-D device ⇒ Información sólo sobre el dispositivo indicado, donde, por ejemplo
“device” se especifica como /proc/bus/usb/001/001
Bus 002 Device 002: ID 046d:c016 Logitech, Inc.
Bus 001 Device 001: ID 0000:0000
lspci ⇒ Visualiza información sobre todos los buses PCI del sistema y todos los
dispositivos conectados a ellos
-v ⇒ Imprimir información detallada de los dispositivos
00:02.0 VGA compatible controller: Intel Corp. 82852/855GM
Integrated Graphics Device (rev 02)
hwbrowser ⇒ Visualiza información gráficamente sobre los dispositivos instalados
en el sistema
lshw ⇒ Listado detallado del hardware conectado al equipo
lshw-gui ⇒ Visualiza gráficamente un listado detallado del hardware del equipo
Tema 10. Periféricos – p. 28/34
HAL (Hardware Abstraction Layer)
HAL es una capa de abstracción del hardware:
Proporciona información sobre los dispositivos hardware que hay
conectados en el sistema
Para cada dispositivo, mantiene información detallada del mismo
Permite que el software a nivel de “escritorio” pueda reaccionar
ante los cambios de configuración del hardware (le informa de los
cambios producidos)
Para HAL cada elemento hardware es un “objeto” de dispositivo, al
que asigna un identificador único y tiene un conjunto de propiedades
almacenadas como clave/valor
El valor de estas propiedades lo obtiene del propio hardware, de
ficheros de información de los dispositivos o de la configuración
actual del dispositivo
El valor de estas propiedades determinará el tratamiento que hay
que hacer al dispositivo
Tema 10. Periféricos – p. 29/34
HAL (ii)
HAL puede informar a otras aplicaciones cuando un dispositivo es
añadido o eliminado, o cuando cambian las propiedades del mismo,
para que estas aplicaciones actúen en consecuencia:
Se conecta un “pen-drive” ⇒ avisa a un programa para que monte el dispositivo
Se inserta un cd de música ⇒ avisa a un programa para que lo reproduzca
Se inserta un cd de datos ⇒ lo notifica a un programa que lo montará
El demonio hald es el encargado de hacer esta tarea:
Mantiene la base de datos de los objetos hardware (obteniendo la
información de los ficheros de información de los dispositivos y del propio HW)
Controla el “ciclo de vida” de los dispositivos
Proporciona una descripción rica y amplia de las características
de los elementos hardware
Notifica los cambios hardware:
Mediante “callouts” a los componentes a nivel de sistema
Mediante el D-BUS a aplicaciones a nivel de “escritorio”
Tema 10. Periféricos – p. 30/34
HAL (iii)
Los “callouts” son programas que se invocan cuando la lista de
dispositivos manejada por HAL cambia o las propiedades de un
dispositivo cambian
Estos programas permiten mantener de forma “correcta” el sistema,
p.e. cambiando los permisos de un fichero de dispositivo, preparando
el sistema para montar el SF o configurando el subsistema de red
Los programas “callouts” están indicados en los ficheros de
“información” del HAL (/usr/share/hal/fdi/) y son ejecutados
por el demonio hald cada vez que se produce un cambio hardware
Ejemplos de programas “callouts”:
(suelen estar en /usr/libexec/)
hal_lpadmin ⇒ Programa de CUPS para añadir/eliminar una impresora que se
conecta/desconecta (es el paquete hal-cups-utils)
hal-storage-mount ⇒ Realiza el montaje del dispositivo conectado
hal-storage-unmount ⇒ Desmonta el dispositivo
hal-storage-eject ⇒ “Expulsar” el cd
Tema 10. Periféricos – p. 31/34
HAL (iv)
Las aplicaciones pueden usar HAL para obtener información de los
dispositivos e interactuar con el dispositivo a través del núcleo
Ejemplos de estas aplicaciones serían: programas para manejar un
cámara conectada o para montar de forma automática un pen–drive
Un ejemplo de aplicaciones a nivel de escritorio que hacen uso de la
información de HAL es gvfs que, de forma automática, monta los
nuevos dispositivos, abre el explorador de ficheros o reproduce cd’s
de música o de vídeo, . . . , (antes lo hacía gnome-volume-manager)
En el caso de KDE, el demonio kded es el encargado de recibir las
notificaciones de los cambios hardware y actuar en consecuencia.
Por ejemplo, si el dispositivo conectado es un pen–drive:
Informa al usuario del evento y le pregunta si desea “abrir” el dispositivo. En caso
afirmativo, ejecuta “konqueror” para el directorio que hace de punto de montaje
Tema 10. Periféricos – p. 32/34
HAL (v)
hald-addon-* ⇒ Escuchan cambios en los dispositivos que hald
no detecta (insertar un cd en el lector) e informa al hald para que actúe
lshal ⇒ Muestra un listado detallado de todos los dispositivos
hardware que hay conectados en el sistema
−−monitor ⇒ Ejecutado con esta opción, monitoriza los cambios producidos al
conectar o desconectar un dispositivo, o cambiar sus propiedades
hal-device ⇒ Lista todos los dispositivos conectados
gnome-device-manager ⇒ Herramienta gráfica que lista los
dispositivos conectados, monitorizando los posibles cambios
D-BUS es un sistema para comunicación entre procesos, que
proporciona un sistema de bus de mensajes para realizar dicha tarea
Proporciona una librería que permite establecer y realizar una conexión entre dos
aplicaciones
Un demonio gestiona la conexión y envía los mensajes de una aplicación a la otra
HAL lo usa para comunicar cambios HW a las aplicaciones a nivel de “escritorio”
Tema 10. Periféricos – p. 33/34
The magic SysRq key
Es un combinación “mágica” de teclas con la que se pide al núcleo
que realice una tarea concreta en caso de “emergencia”, que hará
salvo que esté completamente bloqueado
Se activa poniendo un “1” en el fichero /proc/sys/kernel/sysrq
Para activarla siempre en el fichero /etc/sysctl.conf se pone:
kernel.sysrq = 1
La combinación de teclas es AltGr + PetSis + tecla, donde
algunas opciones son:
‘b’ ⇒ reinicia el sistema inmediatamente sin sincronizar o desmontar los discos
‘s’ ⇒ sincroniza todos los sistemas de ficheros montados
‘u’ ⇒ remonta todos los sistemas de ficheros en modo de sólo lectura
‘p’ ⇒ muestra información en la consola sobre el estado de los registros y los
flags del procesador
‘t’ ⇒ muestra información sobre las tareas en ejecución y su información
También se puede escribir el carácter en /proc/sysrq-trigger
(por ejemplo para reiniciar “echo b > /proc/sysrq-trigger”)
Tema 10. Periféricos – p. 34/34
Descargar