Posteado por: kmilodenisgonzalez | febrero 21, 2011

Udev

Udev es el nuevo gestor de dispositivos de los Sistemas GNU/Linux, su función principal es controlar los ficheros de dispositivos en /dev, este nuevo gestor desplaza a los ya obsoletos devfs y hotplug, udev también se encarga de todos los eventos de dispositivos ocurridos en el espacio de usuario (principalmente eventos usb).

Realizando la carga de los módulos del kernel de manera asincrónica, esto supone una ventaja evidente con respecto a la carga de módulos secuencial que era lo que predominaba anteriormente. Este nuevo gestor de dispositivos se incluyo a partir de la versión 2.6 de Linux, su funcionamiento es a través de una serie de pasos lógicos :

1. Busca en /sys toda la información que corresponde con el dispositivo.
2. Busca en /lib/udev/rules.d/ y /etc/udev/rules.d/ las reglas definidas por el root que coincidan con el dispositivo. Si no encuentra ninguna regla que coincida crea el nodo con las características originales definidas por el Kernel.

Udev viene con un grupo de reglas ya definidas, pero a veces nos hace falta definir nuestras propias reglas, (con el objetivo de renombrar el dispositivo, darle una ubicación estática o hasta ejecutar un .sh o un binario en caso de que un dispositivo especifico sea detectado).

Aquí les dejo un documento que explica bastante bien el empleo de udev y la creación de reglas que pueden ser de utilidad, ya que el objetivo de este articulo es mostrarle como hacer uso de udev a través de python, empleando el módulo pyudev creado por Sebastian Wiesner.

Descargar udev (Documentación)

Antes de volcarnos por completo a la programación les dejo algunos comando que pueden ser de utilidad, que estan muy bien explicado en los documentos que les deje mas arriba.

Como emplear el comando udevadm.
udevadm COMANDO [OPCION]

COMANDO
|
————-> info consultar el sysfs o la base de datos de udev
————-> trigger seguir los eventos a nivel del kernel
————-> settle espera por que un evento en cola finalice
————-> control controla el demonio de udev
————-> monitor monitorea el kernel y los eventos udev
————-> test inicia una simulación de udev

Con este comando podemos obtener una lista de todos los atributos de un dispositivo determinado (sda, sdb, sdc, etc) que se puede usar para escribir nuestras propias reglas reglas.

udevadm info -a -p $(udevadm info -q path -n [dispositivo])

nota: El dispositivo se remplaza con el de tu sistema, /dev/sda, /dev/sdb, etc.

sudo ls -lR /dev/disk

Con este comando se obtienen todos los dispositivos de almacenamiento, bien detallados (partición, etiqueta, id, etc)

sudo lshal –monitor

Con este se puede monitorear en tiempo real los eventos de los dispositivos usb, veremos algo parecido con el modulo pyudev de python.

A lanzar código…

Esta es la secuencia en la que actualmente los Sistemas GNU/Linux detectan eventos usb.

KERNEL –> UDEV –> D-BUS –> HAL


from pyudev import Context, Monitor

context = Context()

if __name__ == '__main__':

    monitor = Monitor.from_netlink(context)
    monitor.filter_by(subsystem='usb') 
    for accion, dispositivo in monitor:
        if accion == 'add':            #Los eventos pueden ser <<remove, add, change y move>>
            print dispositivo.sys_path  

Con este ejemplo hacemos uso del monitor de udev, para detectar los eventos usb y poder procesarlos de acuerdo a nuestros requerimiento, fijense que en este ejemplo solo me interesan los eventos usb que se agreguen (accion == add), como memoria, disco duro externo, ect.

Otros subsystem:

input, usb, pci, scsi, block

nota: Todos estos datos pueden obtenerse con el comando que les mostré anteriormente (udevadm info -a -p $(udevadm info -q path -n [dispositivo]) ).

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

Categorías

A %d blogueros les gusta esto: