Gentoo Logo

Руководство Gentoo по использованию udev

Content:

1. Что такое udev ?

Каталог /dev

Когда пользователи Linux говорят про апаратное обеспечение своих систем в обществе людей которые верят что Linux это вид вируса или марка кофе используют выражение "слеш dev слеш " , то замечают удивление окружающих. Но для счастливых пользователей Linux (вы тоже в их числе) использовать /dev/hda1 быстрее и легче чем говорить про первый раздел первого главного диска. Не так ли?

Все мы знаем что в UNIX-подобных ОС устройство это файл.Некоторые знают почему файлы устройств имеют специальные номера, которые мы видим когда выполняем команду ls -l в каталоге /dev. Но мы уверены, что первый мастер IDE диск должен быть представлен как /dev/hda. Вы можете не замечать этого, но это так.

Подумайте про устройства с "горячей" заменой, таких как USB, IEEE1394, PCI платы с "горячим" подключением и так далее. Какое устройство первое? Как долго? Как будут названы другие устройства когда первый отключен? Какой это будет иметь эффект? Вы будете рады когда ваше задание на печать вдруг будет перенесено с вашего супернового лазерного принтера на ваш почти мертвый матричный принтер, потому что ваша мама решила отключить ваш принтер?

Введение в udev. Цели проекта интересные и нужные:

  • Запуск в userspace
  • Динамическое создание/удаление файлов устройств
  • Предоставление стандартных имен
  • Предоставление "user-space" API

Для предоставления этих особенностей, udev разрабатываеться как три независимых проекта: namedev, libsysfs и, конечно, udev.

namedev

Namedev позволяет задавать именa устройств отдельно от программы udev. Это делает систему именования очень гибкой и позволяет использование "третьих" схем. Эта подсистема именования устройств дает стандартный интерфейс, который использует udev.

Сейчас namedev предоставляет только одну схему именования устройств; эта схема предоставлена LANANA, которая используеться для нумерования устройств сейчас и потому очень ситуативна для пользователей Linux.

Namedev использует пяти-шаговую процедуру поиска имени для заданного устройства. Если имя устройства найдено в одном из шагов, то оно и используется . Вот эти шаги такие:

  • метка или серийный номер
  • номер устройства по шине
  • топология шины
  • статически заданное имя
  • имя предоставленное ядром

Шаг "метка или серийный номер" проверяет имеет ли устройство уникальный идентификатор. Для примера, USB устройства имеют уникальный USB серийный номер; SCSI устройства имеют уникальный UUID. Если namedev найдет соответствие между уникальным номером и заданным конфигурационным файлом, то будет использоваться имя заданное в конфигурационном файле.

Шаг "шинный номер устройства" проверяет номер устройства, который дает шина. Для окружений, не поддерживающих горячее подключение эта процедура позволяет определить устройство. Для примера, номера шины PCI нечасто изменяются за все время работы системы. И снова, если namedev найдет соответствие между уникальным номером и заданным конфигурационным файлом, то будет использоваться имя заданное в конфигурационном файле.

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

Четвертый шаг - "статически заданное имя", - это просто строка замены. Когда имя предоствленое ядром (имя по умолчанию) совпадает со строкой для подстановки, оно заменяется нужным именем.

Последний шаг (имя заданное ядром) - выбирается стандартное предоставленное ядром. В большинстве случаев этого вполне достаточно, т.к. соответствует наименованию, использующемуся на данный момент в Linux системах.

libsysfs

udev контактирует с ядром через псевдофайловую систему - sysfs. Проект libsysfs предоставляет единый программный инетрфейс (API) для доступа к информации, предоставляемой файловой системой sysfs. Это позволяет обращаться к любому устройтву независимо от его типа.

udev

Как только ядро замечает изменение в структуре устройств, оно вызывает программу /sbin/hotplug. Hotplug запускает приложения , которые линкованы в каталог /etc/hotplug.d/default где вы также можете найти символическую ссылку на программу udev. Hotplug передает информацию от ядра к udev, который производит необходимы изменения в структуре каталога /dev, такие как создание и удаление файлов устройств.

2. Использование udev в Gentoo

Требования

udev подразумевает использование в комбинации с ядром ветки 2.6 (таких как development-sources или gentoo-dev-sources). Если вы используете такое ядро, тогда вы должны установить достаточно свежую версию sys-apps/baselayout. Это все что нужно.

Code Listing 2.1: Инсталяция udev

# emerge udev

udev установит hotplug-baseкак одно из требований зависимостей.Если вы при "горячем" подключении вашего любимого USB или IEEE1394 устройства хотите исполнять специфические действия , тогда вы должны также установить полную версию hotplug скриптов.

Code Listing 2.2: Инсталяция полной версии hotplug

# emerge hotplug

Относительно ядра, если вы используете установки по умолчанию заданные программой genkernel тогда у вас все уже есть. Иначе вам требуется при конфигурации ядра включить следующие опции:

Code Listing 2.3: Требуемые опции ядра

General setup --->
  [*] Support for hot-pluggable devices

File systems --->
  Pseudo filesystems --->
    [*] /proc file system support
    [*] Virtual memory file system support (former shm fs)

Вы можете оставить файловую систему устройств /dev (УСТАРЕЛО) активной если хотите.

Конфигурирование

Если вы хотите использовать udev-настройки от Gentoo, делающие вашу жизнь более комфортной, то дальше можете не читать. Вы все установили. Скрипты загрузки Gentoo не запустят демон devfsd и деактивируют devfs когда вы загрузитесь.

Но если вы считаете себя крутым пользователем и хотите запустить только udev, без наших специфичных настроек, в том виде, какой предполагался разработчиками udev (включая проблемы потери номеров устройств, потому что udev пока этого неподдерживает), то читайте дальше :)

Warning: Тогда не жалуйтесь если что-то случиться. Вы отказываетесь от тяжелой работы многих разработчиков Gentoo, которые корректировали ваши скрипты загрузки, что бы добиться стабильной работы udev с Gentoo!

Мы деактивируем все правила сохранения файловых номеров устройств: отредактируйте переменную RC_DEVICE_TARBALL в файле /etc/conf.d/rc и задайте ей значение no:

Code Listing 2.4: /etc/conf.d/rc

RC_DEVICE_TARBALL="no"

Если вы включили поддержку devfs в ваше ядро, то вы можете отключить эту поддержку в файле конфигурации загрузчика: добавьте devfs=nomount к параметрам ядра. Если вы хотите использовать devfs и отключить udev - добавьте gentoo=noudev.

3. Известные проблемы

Потеря файла устройства при загрузке

Если вы неможете загрузить систему, потому что получаете ошибку про то что /dev/null несуществует или потому что потерена консоль инициализации системы, значит проблема в том, что некоторые файлы устройств должны существовать до того как /dev примонтируется и будет управляться udev. Это часто происходит на машинах на машинах, на которые Gentoo был установлен со старых носителей.

Если вы используете sys-apps/baselayout-1.8.12 или новее, то это не столь важно, т.к. процесс загрузки будет продолжен до конца. Но чтобы избвится от надоедливых предупреждений, вы должны создать недостающие устройства, следуюя нижеприведенным инструкциям:

Что бы посмотреть какие устройства должны быть до монтирования /dev запустите следующие команды:

Code Listing 3.1: Список файлов устройств, которые должны существовать при загрузке

# mkdir test
# mount --bind / test
# cd test/dev
# ls

Устройства нужные для корректной загрузки системы это /dev/null и /dev/console. Если они небыли показаны в предыдущем тесте, то вы должны их создать вручную. Выполните следующие команды в каталоге test/dev/ :

Code Listing 3.2: Создание некоторых файлов устроуств

# mknod -m 660 console c 5 1
# mknod -m 660 null c 1 3

Когда закончите незабудьте отмонтировать каталогtest/ :

Code Listing 3.3: Отмонтирование каталога test/

# cd ../..
# umount test
# rmdir test

udev и nvidia

Если вы используете проприетарные драйвера nVidia и X-сервер нестартует на udev-only системе, тогда проверьте следующее:

  • модуль nvidia прописан в /etc/modules.autoload.d/kernel-2.6
  • версия nvidia-kernel равняеться или больше чем media-video/nvidia-kernel-1.0.5336-r2
  • версия baselayout равняеться или больше чем sys-apps/baselayout-1.8.12

Другие проблемы

Если файлы устройств несоздаються когда моуль загружаеться через /etc/modules.autoload.d/kernel-2.6, но создаються когда вы загружаете модуль вручную используя modprobe, тогда вы должны обновиться до sys-apps/baselayout-1.8.12 или позже.

Поддержка устройств фреймбуфера (/dev/fb/*) появилась только в ядрах начиная с 2.6.6-rc2.

Для ядер младше 2.6.4 вы должны включить поддержку файловой системы /dev/pts .

Code Listing 3.4: Включение поддержки файловой системы /dev/pts

File systems --->
  Pseudo filesystems --->
    [*] /dev/pts file system for Unix98 PTYs

4. Ресурсы & Благодарности

На Linux Symposium (Ottawa, Ontario Canada - 2003) Грег Кроах-Хартман (Greg Kroah-Hartman) (Корпорация IBM) достаточно хорошо и понятно расказал про программы udev.

Decibel's UDEV Primer - это подробный документ про udev и Gentoo.

Writing udev rules Gentoo-разработчика Даниела Дрейка (Daniel Drake) - это превосходный документ для того что-бы научиться настраивать инсталяцию udev.



Print

Updated May 27, 2004

Summary: Этот документ описывает что такое "udev " и как его можно использовать для ваших нужд.

Sven Vermeulen
Author

Gregorio Guidi
Contributor

Alexander Simonov
Translator

Sergey Kuleshov
Editor

Donate to support our development efforts.

Tek Alchemy

Tek Alchemy offers dedicated servers and other hosting solutions running Gentoo Linux.

php|architect

php|architect is the monthly magazine for PHP professionals, available worldwide in print and electronic format. A percentage of all the sales will be donated back into the Gentoo project.

The Gentoo Linux Store
SevenL.net

Seven L Networks provides customizable Dedicated Servers for your customized Gentoo install. Colocation and other hosting services are also provided.

$99/mo dedicated servers

No BS Dedicated Gentoo Linux Servers from vr.org.

Copyright 2001-2005 Gentoo Foundation, Inc. Questions, Comments, Corrections? Email www@gentoo.org.