7.5. Создание собственных ссылок на устройства

7.5.1. Ссылки на CD-ROM

Некоторые программы, которые Вы можете захотеть установить позже (например, разные медиаплееры), ожидают, что ссылки /dev/cdrom и /dev/dvd существуют и указывают на устройство CD-ROM или DVD-ROM. Кроме того, эти ссылки удобно использовать в файле /etc/fstab. Вместе с Udev поставляется скрипт, который сгенерирует файлы правил для создания этих символических ссылок основываясь на возможностях каждого устройства, однако Вам необходимо выбрать один из двух режимов работы скрипта.

Во-первых, скрипт может работать в режиме «by-path» (используется большинством устройств USB и FireWire), когда создаваемые им правила будут зависеть от физического пути к CD- или DVD-устройству. Во-вторых, он может работать в режиме «by-id» (применяется для большинства устройств IDE и SCSI), при котором правила будут зависеть от идентификатора, сохраненного в самом устройстве. Путь определяется скриптом path_id из поставки Udev, и идентификатор считывается при помощи его же программ ata_id или scsi_id, в зависимости от типа Вашего устройства.

У каждого подхода есть свои преимущества; выбор будет зависеть от того, какого типа изменения будут происходить с Вашим устройством наиболее часто. Если физический путь к устройству может смениться (например, потому что Вы подключаете его в разные порты/слоты), то Вам следует использовать режим «by-id». С другой стороны, если измениться может идентификатор устройства, например, Вы ожидаете его скорой поломки и планируете заменить его другим таким же, подключив в тот же самый разъем, то Вам подойдет режим «by-path».

Если возможны изменения и того, и другого характера, Вам прийдется выбирать режим, основываясь на предположениях о том, какие же все-таки будут происходить чаще.

[Важно]

Важно

Внешние устройства (например, CD-привод, подключенный через USB) не должны использовать режим by-path, поскольку каждый раз при подключении устройства в новый внешний порт будет меняться его физический путь. Если Вы в правилах Udev попытаетесь распознавать внешние устройства по их физическому пути, Вы убедитесь, что проблема характерна для всех внешних устройств, а не только для CD- и DVD-приводов.

Если Вы хотите узнать значения, которые будут использовать скрипты Udev, тогда найдите каталог соответствующего CD-привода в /sys (например, это может быть /sys/block/hdd) и выполните команду типа:

udevadm test /sys/block/hdd

Look at the lines containing the output of various *_id programs. The «by-id» mode will use the ID_SERIAL value if it exists and is not empty, otherwise it will use a combination of ID_MODEL and ID_REVISION. The «by-path» mode will use the ID_PATH value.

If the default mode is not suitable for your situation, then the following modification can be made to the /etc/udev/rules.d/83-cdrom-symlinks.rules file, as follows (where mode is one of «by-id» or «by-path»):

sed -i -e 's/"write_cd_rules"/"write_cd_rules mode"/' \
    /etc/udev/rules.d/83-cdrom-symlinks.rules

Note that it is not necessary to create the rules files or symlinks at this time, because you have bind-mounted the host's /dev directory into the LFS system, and we assume the symlinks exist on the host. The rules and symlinks will be created the first time you boot your LFS system.

However, if you have multiple CD-ROM devices, then the symlinks generated at that time may point to different devices than they point to on your host, because devices are not discovered in a predictable order. The assignments created when you first boot the LFS system will be stable, so this is only an issue if you need the symlinks on both systems to point to the same device. If you need that, then inspect (and possibly edit) the generated /etc/udev/rules.d/70-persistent-cd.rules file after booting, to make sure the assigned symlinks match what you need.

7.5.2. Разбираемся с дублирующимися устройствами

As explained in Раздел 7.4, «Device and Module Handling on an LFS System», the order in which devices with the same function appear in /dev is essentially random. E.g., if you have a USB web camera and a TV tuner, sometimes /dev/video0 refers to the camera and /dev/video1 refers to the tuner, and sometimes after a reboot the order changes to the opposite one. For all classes of hardware except sound cards and network cards, this is fixable by creating udev rules for custom persistent symlinks. The case of network cards is covered separately in Раздел 7.2, «General Network Configuration», and sound card configuration can be found in BLFS.

For each of your devices that is likely to have this problem (even if the problem doesn't exist in your current Linux distribution), find the corresponding directory under /sys/class or /sys/block. For video devices, this may be /sys/class/video4linux/videoX. Figure out the attributes that identify the device uniquely (usually, vendor and product IDs and/or serial numbers work):

udevadm info -a -p /sys/class/video4linux/video0

Затем впишите правила, которые будут создавать ссылки:

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

# Постоянные ссылки для веб-камеры и тюнера
KERNEL=="video*", ATTRS{idProduct}=="1910", ATTRS{idVendor}=="0d81", \
    SYMLINK+="webcam"
KERNEL=="video*", ATTRS{device}=="0x036f", ATTRS{vendor}=="0x109e", \
    SYMLINK+="tvtuner"

EOF

В результате устройства /dev/video0 и /dev/video1 все также будут продолжать случайным образом меняться местами при каждой загрузке (и поэтому не должны использоваться непосредственно), но теперь на помошь пришли символические ссылки /dev/tvtuner и /dev/webcam, которые всегда будут указывать на правильные устройства.