7.12. Creazione personalizzata di link simbolici ai dispositivi

7.12.1. link simbolici ai CD-ROM

Alcuni software che si possono voler installare in seguito (es., vari media player) si aspettano l'esistenza dei symlink /dev/cdrom e /dev/dvd. In oltre, puņ essere conveniente inserire i riferimenti a questi symlink dentro /etc/fstab. Per ciascuno dei propri dispositivi CD-ROM, cercare la directory corrispondente sotto /sys (es., questo puņ essere /sys/block/hdd) e eseguire un comando simile al seguente:

udevtest /block/hdd

Guardare le righe contenenti l'output di vari *_id programs.

Ci sono due approcci nel creare i link simbolici. Il primo č di usare il nome del modello e il numero seriale, il secondo č basato su la locazione del dispositivo nel bus. Se si ha intenzione di usare il primo approccio, creare un file simile al seguente:

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

Sebbene gli esempi in questo libro funzionino correttamente tenere presente che udev non riconosce la backslash come proseguimento di riga. Se si modificano regole di udev con un editor, assicurarsi di lasciare ogni regola su una riga fisica.

In questo modo, i symlink resteranno correttamente anche se si spostassero i drive in una posizione differente sul bus IDE, ma il symlink /dev/cdrom non sarebbe creato se si rimpiazzasse il vecchio CD-ROM SAMSUNG con un drive vuoto.

La chiave SUBSYSTEM=="block" serve per evitare la corrispondenza con dispositivi SCSI generici. Senza questa, in caso di CD-ROM SCSI, il symlink qualche volta punterą al corretto dispositivo /dev/srX, e qualche volta a /dev/sgX, il quale č sbagliato.

Il secondo approccio propone:

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

In questo metodo, i symlink rimarrebbero correttamente anche se si sostituisse il drive con modelli diversi, ma li pone nelle vecchie posizioni sul bus IDE. La chiave ENV{ID_TYPE}=="cd" assicura che il symlink scompaia se si inserisse qualcosa di diverso da un CD-ROM in quella posizione nel bus.

Ovviamente, č possibile miscelare i due approcci.

7.12.2. Comportamento con dispositivi duplicati

Come spiegato in Sezione 7.4, «Gestione dei dispositivi e dei moduli in un sistema LFS», l'ordine nel quale i dispositivi con la stessa funzione appaiono in /dev č essenzialmente random. Es., se si ha una web camera USB e un sintonizzatore TV, qualche volta /dev/video0 si riferisce alla camera e /dev/video1 si riferisce al sintonizzatore, e qualche volta dopo un riavvio l'ordine diventa opposto. Per tutte le classi di hardware ad eccezione delle schede audio e delle schede di rete, questo č correggibile con la creazione personalizzata di regole di udev per symlink persistenti. Nel caso di schede di rete č descritto separatamente in Sezione 7.13, «Configurazione dello script di rete», e la configurazione delle schede audio puņ essere trovata in BLFS.

Per ciascuno dei propri dispositivi che probabilmente hanno questo problema (sebbene il problema non esista nella propria attuale distribuzione Linux), cercare la corrispondente directory sotto /sys/class o /sys/block. Per dispositivi video, questa puņ essere /sys/class/video4linux/videoX. Valutare gli attributi che identificano univocamente il dispositivo (di solito, funzionano gli ID dei venditori e dei produttori e/o i numeri seriali):

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

Poi scrivere le regole che creano i symlink, es.:

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

Il risultato č che i dispositivi /dev/video0 e /dev/video1 ancora riferiscono casualmente al sintonizzatore e alla web camera (e pertanto non dovrebbero essere mai usati direttamente), ma ci sono i symlink /dev/tvtuner e /dev/webcam che puntano ancora al corretto dispositivo.

Maggiori informazioni sulla scrittura delle regole di Udev puņ essere trovata in /usr/share/doc/udev-096/index.html.