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.
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.
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/video
. Localiza los atributos
que identifican inequívocamente al dispositivo (normalmente el
fabricante, ID del producto o el número de serie):
X
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
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
.