Некоторые
программы,
которые Вы
можете
захотеть
установить
позже
(например,
разные
медиаплееры),
ожидают,
что ссылки
/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.
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/video
. Figure out the attributes
that identify the device uniquely (usually, vendor and product IDs
and/or serial numbers work):
X
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
,
которые
всегда
будут
указывать
на
правильные
устройства.