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 y que apunten a un dispositivo CD-ROOM o DVD-ROM. Igualmente, puede que te convenga poner referencias a dichos enlaces simbólicos en /etc/fstab. Udev incluye un guión que generará ficheros de reglas para crear dichos enlaces simbólicos por ti, dependiendo de las capacidades de cada dispositivo, pero deberás decidir cual de los dos modos de funcionamiento deseas que utilice el guión.

Primero, el guión puede operar en modo “by-path” (usado por defecto para dispositivos USB y FireWire), en el que las reglas creadas dependen de la ruta física del dispositivo CD o DVD. O puede operar en modo “by-id” (por defecto para dispositivos IDE y SCSI), en el que las reglas dependen de las cadenas de identificación almacenadas en el dispositivo CD o DVD. Las rutas son determinadas por el guión path_id de Udev, y las cadenas de identificación son leidas del hardware por sus programas ata_id o scsi_id, dependiendo del tipo de dispositivos que tengas.

Hay ventajas en cada método. El correcto a usar dependerá de qué tipo de cambios de dispositivos puedan ocurrir. Si esperas que cambie la ruta física a los dispositivos (esto es, los puertos y/o ranuras en los que estén conectados) debido por ejemplo a que planeas mover el controlador a un puerto IDE o USB diferente, entonces deberías usar el modo “by-id”. Por otro lado, si esperas que cambie la identificación del dispositivo, debido por ejemplo a una averia, y podrías sustituirlo por un dispositivo diferente pero con las mismas capacidades y conectado al mismo puerto, entonces deberías usar el modo “by-path”.

Si es posible que suceda cualquiera de estos tipos de cambio, entonces elige un modo basado el tipo de cambio que esperas suceda con mas frecuencia.

[Importante]

Importante

Los dispositivos externos (por ejemplo, un CD conectado por USB) no deberian usar el modo by-path, pues cada vez que se conecte a un nuevo puerto externo su ruta física cambiará. Todos los dispositivos conectados esternamente tendrán este problema si escribes reglas Udev para reconocerlos por su ruta física. El problema no se limita a dispositivos CD o DVD.

Si deseas ver los valores que los guiones Udev usarán, para el dispositivo CD-ROM apropiado encuentra el directorio correspondiente en /sys (puede ser, por ejemplo, /sys/block/hdd) y ejecuta un comando similar al siguiente:

udevtest /sys/block/hdd

Mira las lineas que contienen la salida de los diversos programas *_id. El modo “by-id” usará el valor ID_SERIAL si existe y no está vacio, en caso contrario usará una combinación de ID_MODEL y ID_REVISION. El modo “by-path” usa el valor ID_PATH.

Si el modo por defecto no es el adecuado para tu situación, puedes hacer la siguiente modificación en el fichero /etc/udev/rules.d/75-cd-aliases-generator.rules (donde mode es “by-id” o “by-path”):

sed -i -e 's/write_cd_rules/& mode/' \
    /etc/udev/rules.d/75-cd-aliases-generator.rules

Ten en cuenta que no es necesario crear los ficheros de reglas o enlaces simbolicos ahora, pues tienes montado el directorio /dev del anfitrión en el sistema LFS, y suponemos que los enlaces simbólicos existen en el anfitrión. Las reglas y enlaces simbólicos se crearán la primera vez que arranques tu sistema LFs.

Sin embargo, si tienes diversos dispositivos CD-ROM, los enlaces simbólicos generados en ese momento pueden apuntar a dispositivos diferentes de a los que apuntan en tu anfitrión, pues los dispositivos no se descubren en un orden predecible. Las asignaciones creadas cuando arrancas por primera vez el sistema LFS serán estables, por lo que esto solo es un problema si necesitas que los enlaces de ambos sistemas apunten a los mismos dispositivos. Si necesitas esto, revisa (y posiblemente edita) el fichero /etc/udev/rules.d/70-persistent-cd.rules generado tras el arranque para asegurate de que los enlaces cubren tus necesidades.

7.12.2. Manejar dispositivos duplicados

Como se explica en Sección 7.4, “Manejo de dispositivos y módulos en un sistema LFS”, el 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

# Enlaces persistentes para camaras web y sintonizadores
KERNEL=="video*", ATTRS{idProduct}=="1910", ATTRS{idVendor}=="0d81", \
    SYMLINK+="webcam"
KERNEL=="video*", ATTRS{device}=="0x036f", ATTRS{vendor}=="0x109e", \
    SYMLINK+="tvtuner"

EOF
[Nota]

Nota

Ten en cuenta que Udev no reconoce la barra inversa como continuación de línea. Los ejemplos de este libro funcionan correctamente debido a que tanto la barra inversa como el salto de línea son ignorados por el interprete de comandos. Esto hace que el interprete de comandos envíe cada regla a cat como una única línea (el interprete de comandos ignora dicha secuencia debida a que la cadena EOF usada para redirigir el documento insertado no se encuentra delimitado con comillas simples o dobles. Para mas detalles consulta la página de manual bash(1) y busca "Here Documents").

Si modificas las reglas Udev con un editor de texto, asegurate de poner cada regla en una sola línea.

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-113/index.html.