7.12. Crear enlaces simbólicos persnalizados a los dispositivos

7.12.1. Enlaces simbólicos a CD-ROM

Cierto software que puede que quieras instalar más adelante (por ejemplo, reproductores de medios) esperan que existan los enlaces simbólicos /dev/cdrom y /dev/dvd. Igualmente, puede que te convenga poner referencias a dichos enlaces simbólicos en /etc/fstab. Para cada uno de tus dispositivos CD-ROM, encuentra el directorio correspondiente bajo /sys (por ejemplo, este puede ser /sys/block/hdd) y ejecuta un comando similar al siguiente:

udevtest /block/hdd

Mira el contenido de la salida de los diversos programas *_id.

Hay dos formas de crear los enlaces simbólicos. La primera es usar el modelo y número de serie, la segunda se basa en la localización del dispositivo en el bus. Si vas a usar el primer método, crea un fichero similar al siguiente:

cat >/etc/udev/rules.d/82-cdrom.rules << EOF

# Custom CD-ROM symlinks
SUBSYSTEM=="block", ENV{ID_MODEL}=="SAMSUNG_CD-ROM_SC-148F", \
    ENV{ID_REVISION}=="PS05", SYMLINK+="cdrom"
SUBSYSTEM=="block", ENV{ID_MODEL}=="PHILIPS_CDD5301", \
    ENV{ID_SERIAL}=="5VO1306DM00190", SYMLINK+="cdrom1 dvd"

EOF
[Nota]

Nota

Aunque los ejemplo de este libro funcionan correctamente, ten en cuenta que Udev no reconoce la barra inversa como continuación de línea. Si modificas las reglas Udev con un editor, asegurate de poner cada regla en una sola línea.

De este modo los enlaces serán correctos incluso si mueves los dispositivos a una posición diferente en el bus IDE, pero el enlace /dev/cdrom no será creado si reemplazas el viejo CD-ROM SAMSUNG por uno nuevo.

La llave SUBSYSTEM=="block" es necesaria para evitar que se detecten dispositivos genéricos SCSI. Sin ella, y en el caso de CD-ROMs SCSI, los enlaces apuntarán en ocasiones al dispositivo /dev/srX correcto, y otras veces a /dev/sgX, que es erroneo.

El segundo método sería:

cat >/etc/udev/rules.d/82-cdrom.rules << EOF

# Custom CD-ROM symlinks
SUBSYSTEM=="block", ENV{ID_TYPE}=="cd", \
    ENV{ID_PATH}=="pci-0000:00:07.1-ide-0:1", SYMLINK+="cdrom"
SUBSYSTEM=="block", ENV{ID_TYPE}=="cd", \
    ENV{ID_PATH}=="pci-0000:00:07.1-ide-1:1", SYMLINK+="cdrom1 dvd"

EOF

De esta forma los enlaces serán correctos incluso si sustituyes los dispositivos con modelos diferentes y los pones en la misma posición en el bus IDE. La llave ENV{ID_TYPE}=="cd" asegura que los enlaces desaparezcan si pones algo diferente a un CD-ROM en dicha posición del bus.

Por supuesto, es posible mezclar ambos métodos.

7.12.2. Manejar dispositivos duplicados

Como se explica en Sección 7.4, “Manejo de dispositivos y módulos en un sistema LFS”, en orden en el que dispositivos con la misma funcionalidad aparecen en /dev es aleatorio. Es decir, si tienes una cámara web USB y una sintonizadora de TV, a veces /dev/video0 se refiere a la cámara y /dev/video1 al sintonizador, pero tras un reinicio el orden puede ser el contrario. Para todas las clases de harware, excepto tarjetas de sonido y de red, esto puede solucionarse creando reglas udev para personalizar enlaces simbólicos persistentes. El caso de las tarjetas de red se cubre en Sección 7.13, “Configuración del guión network”, y la configuración de tarjetas de sonido se puede encontrar en BLFS.

Para cada uno de tus dispositivos que puedan tener este problema (incluso si el problema no existe en tu distribución Linux actual) encuentra el directorio correspondiente bajo /sys/class o /sys/block. Para dispositivos de vñideo este puede ser /sys/class/video4linux/videoX. Localiza los atributos que identifican inequívocamente al dispositivo (normalmente el fabricante, ID del producto o el número de serie):

udevinfo -a -p /sys/class/video4linux/video0

Entoces escribe reglas que creen los enlaces simbólicos:

cat >/etc/udev/rules.d/83-duplicate_devs.rules << EOF

# Persistent symlinks for webcam and tuner
KERNEL=="video*", SYSFS{idProduct}=="1910", SYSFS{idVendor}=="0d81", \
    SYMLINK+="webcam"
KERNEL=="video*", SYSFS{device}=="0x036f", SYSFS{vendor}=="0x109e", \
    SYMLINK+="tvtuner"

EOF

El resultado es que los dispositivos /dev/video0 y /dev/video1 aún se refieren de forma aleatoria al sintonizador o a la cámara web (y por tanto nunca deben usarse directamente) pero los enlaces simbólicos /dev/tvtuner y /dev/webcam siempre apuntarán al dispositivo correcto.

Puedes encontrar más información sobre la creación de reglas Udev en /usr/share/doc/udev-096/index.html.