Наши партнеры








Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

На главную -> MyLDP -> Электронные книги по ОС Linux
Linux From Scratch (version 6.8)
Назад Глава 7. Настройка скриптов загрузки системы Вперед

7.10. Создание пользовательских символических ссылок на устройства

7.10.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 в зависимости от того, устройство какого типа у вас есть

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

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

Важно

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

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

udevadm test /sys/block/hdd

Взгляните на строки, содержащие выходные данные вида *_id. В режиме "by-id" будет использоваться значение ID SERIAL если оно существует и не пустое, в противном случае он будет использоваться сочетание ID_MODEL и ID_REVISION. В режиме "by-path" будет использоваться значение ID_PATH.

Если режим, предлагаемый по умолчанию, не подходит в вашей ситуации, то в файле /lib/udev/rules.d/75-cd-aliases-generator.rules можно сделать изменение следующим образом (где mode может быть "by-id" или " by-path"):

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

Обратите внимание, что сейчас не нужно создавать файлы с правилами или символические ссылки, поскольку есть директорий /dev хост системы, которые примонтирован к системе LFS, и мы предполагаем, что в хост системе символические ссылки имеются. Правила и символические ссылки будут созданы, когда вы первый раз загрузите систему LFS.

Однако, если у вас есть несколько устройств CD-ROM, то символические ссылки, создаваемые сейчас, могут указывать не на те устройства, которые есть в хост системе, поскольку обнаружение происходит в непредсказуемом порядке. Назначение устройств, которое будет выполнено, когда вы первый раз загружаете систему LFS, будет стабильным, так что проблема лишь в том, если вам требуется, чтобы символические ссылки на обеих системах указывали на одни и те же устройство. Если вам это необходимо, то проверьте (и, возможно, измените) файл /etc/udev/rules.d/70-persistent-cd.rules, сгенерированный после загрузки, и обеспечьте, чтобы назначаемые символические ссылки указывали туда, куда нужно.

7.10.2. Несколько одинаковых устройств

Как объясняется в разделе 7.9 "Управление устройствами и модулями в системе LFS", порядок, в котором устройства, имеющие одинаковые функции, появятся в /dev, по существу, является случайным. Например, если у вас есть USB веб-камера и ТВ-тюнер, то иногда /dev/video0 указывает на камеру, а /dev/video1 — на тюнер, а иногда после перезагрузки порядок изменяется на противоположный. Для всех классов аппаратных средств, кроме звуковых и сетевых карт, эту проблему можно скорректировать с помощью создания правил udev, которые будут создавать стабильные символические ссылки. Случай, относящийся к сетевым картам, рассматривается отдельно в разделе 7.13 "Конфигурирование скрипта network", а описание конфигурирования звуковых карт можно найти в BLFS.

Для каждого из ваших устройств, для которых, скорее всего, возможна эта проблема (даже если в текущем дистрибутиве Linux эта проблема отсутствует), найдите соответствующий директорий в /sys/class или в /sys/block. Для видеоустройств, это может быть /sys/class/video4linux/videoX. Найдите в атрибутах значения, которые однозначно определяют устройство (как правило, идентификаторы поставщика и изделия и / или серийные номера):

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

Затем напишите правила, которые создают символические ссылки, например:

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

# Persistent symlinks for webcam and tuner
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, которые всегда указывают на правильное устройство.


Предыдущий раздел: Оглавление Следующий раздел:
Управление устройствами и модулями в системе LFS   Конфигурирование скрипта localnet