# Udev (Русский)

Если вы хотите перейти с DevFS на Udev, смотрите Переход с DevFS на Udev

Эта страница пытается обрисовать всё огромное количество изменений, происходивших в последнее время с изменением udev. Начиная с версии 084, udev отвечает за все hotplug и coldplug события. Соответственно, пакет hotplug устарел и удалён с репозиториев Arch, так как теперь udev отвечает за все эти события.

Обратите внимание: На сегодняшний день, в связи с изменениями в пакете udev и содержании основного конфигурационного файла системы /etc/rc.conf, эта статья не полностью отражает текущее положение вещей и нуждается в доработке.

## Правило номер один

В связи с последними изменениями в пакете udev, файл /etc/rc.conf теперь не поддерживает опцию MOD_AUTOLOAD и работа по определению и загрузке необходимых модулей предоставлена udev. Разница в том, что udev не будет по-умолчанию загружать некоторые проблемные модули (см. ниже) В любом случае, вы можете запустить команду `hwdetect --modules`, которая сгенерирует имена необходимых для вашей системы модулей. Затем вы можете скопировать их в параметр `MODULES` файла `rc.conf` или же добавить туда только нужные вам модули, которые не были загружены автоматически.

## Основные требования

- Вам нужно свежее ядро: все ядра, вышедшие до 2.6.15 не будут работать.
- Вы больше не можете использовать имена устройств в стиле DevFS в вашем fstab или конфигурационном файле загрузчика! Для получения дополнительной информации смотрите Переход с DevFS на Udev.

## Недавние изменения

- Программа `startudev` удалена. Пользуйтесь скриптом `/etc/start_udev`, если вы хотите, чтобы udev перезагрузил правила.
- Udev теперь заменяет функциональность `hotplug` и `hwdetect`. Несмотря на то, что мы предоставляем `hwdetect`, он обычно используется только в процессе создания initrd программой `mkinitrd`.
- Udev будет загружать модули одновременно, что может повлечь возрастание скорости загрузки. Однако, он не всегда загружает модули в одинаковом порядке, что может повлечь проблемы с сетевыми и звуковыми картами (если у вас есть оба устройства). Информацию об этом смотрите ниже.
- Начиная с udev>= 171, OSS-модули, (snd_seq_oss, snd_pcm_oss, snd_mixer_oss) по-умолчанию, автоматически не загружаются. Вы можете загрузить их вручную:

    sudo modprobe snd_mixer_oss

и, если требуется, добавить в /etc/rc.conf, в секцию модулей:

    MODULES=(snd_mixer_oss)

Обратите внимание: TVtime использует snd_mixer_oss для программного управления звуком.

## Добавление модулей в черный список

Udev часто может совершать ошибки и загружать ненужные модули. Для предотвращения этого вы можете поместить их в черный список. Будучи занесенным в него, модуль никогда не будет загружаться udev'ом. Ни во время загрузки, ни во время работы (например, когда вы подключите USB-накопитель).

Для добавления модуля в черный список, предварите его название восклицательным знаком (!) в параметре `MODULES` файла `rc.conf`.

Например,

    MODULES=(!moduleA !moduleB)

## load_modules: полезный параметр загрузки

Если вы укажете `load_modules=off` в параметрах загрузки ядра, udev не будет выполнять автозагрузку модулей. Это своего рода спасательный круг, на тот случай, если что-то пошло не так. Если udev загружает проблемный модуль, который подвешивает вашу систему или делает что-то ужасное, вы можете обойти автозагрузку модулей с помощью этого параметра, а затем внести коварный модуль в черный список.

## Известные проблемы с железом

- Устройства BusLogic могут быть неработоспособны и могут подвешивать систему при загрузке. Это баг в ядре, и он пока не исправлен. - Устройства для чтения карт памяти, подключающиеся по PCMCIA не будут относиться к съемным устройствам.

     Для получения доступа к ним с помощью pmount, добавьте их в /etc/pmount.allow

## Известные проблемы с автозагрузкой

### Модули CPUFreq

У нас пока нет хорошего метода обнаружения различных CPUFreq-контроллеров, так что модули для них не будут загружаться автоматически. Для использования функции изменения частоты процессора, вы должны загрузить нужный модуль, добавив его в параметр `MODULES` файла `rc.conf`.

### Проблемы со звуком, не все модули загружаются автоматически

Некотоые пользователи обнаружили эту проблему при наличии старых записей в `/etc/modprobe.d/modprobe.conf`. Попробуйте почистить этот файл.

### Смешивание устройств, порядок сетевых/звуковых карт меняется при каждой загрузке

Поскольку udev загружает все модули одновременно, устройства иногда инициализируются в различном порядке. Например, с двумя сетевыми картами, вы можете обнаружить, что они меняются именами `eth0` и `eth1`.

Решение тут состоит в самостоятельном указании порядка загрузки модулей с помощью параметра `MODULES` в файле `rc.conf`. Модули, добавленные в этот список, будут загружены перед стартом udev, так что вы имеете полный контроль над порядком их загрузки.

    # Модуль 8139too всегда будет загружаться перед e100
    MODULES=(8139too e100)

Другой метод определения порядка сетевых карт - использование правил udev для именования каждого сетевого интерфейса. Создайте файл `/etc/udev/rules.d/10-network.rules` и внесите туда MAC-адреса ваших сетевых карт:

    SUBSYSTEM=="net", ATTR{address}=="aa:bb:cc:dd:ee:ff", NAME="lan0"
    SUBSYSTEM=="net", ATTR{address}=="ff:ee:dd:cc:bb:aa", NAME="wlan0"

Обратите внимание, что:

- Для получения MAC-адреса каждой карты, запустите такую команду: `udevadm info -a -p /sys/class/net/<ваше_устройство> | grep address`
- Убедитесь, что используете нижний регистр, указывая MAC-адрес в правиле udev.
- Некоторые люди имели проблемы, именуя сетевые интерфейсы в старом стиле: eth0, eth1, и т.д. Попробуйте что-нибудь вроде "lan" или "wlan", если встретитесь с проблемами.

Не забудьте обновить /etc/rc.conf и другие конфигурационные файлы, использующие старый стиль именования!

## Известные проблемы с самосборными ядрами

### Udev не запускается вообще

Убедитесь, что версия вашего ядра - 2.6.15 или выше. Ранние ядра не умеют работать с событиями uevent, которые необходимы udev для автозагрузки.

### Символические ссылки на CD/DVD и права сломались

Если вы используете ядро 2.6.15, вам нужен патч для uevent из ABS (он портирует нужную функциональность uevent из ядра 2.6.16). Просто синхронизируйте ваше дерево ABS командой `abs`, и вы найдете патч в директории `/var/abs/kernels/kernel26/`.

## Трюки с Udev

### Автомонтирование USB-устройств

    KERNEL!="sd[a-z][0-9]", GOTO="auto_mount_end"

    IMPORT{program}="/sbin/blkid -o udev -p %N"
    ENV{ID_FS_LABEL}!="", ENV{dir_name}="%E{ID_FS_LABEL}"
    ENV{ID_FS_LABEL}=="", ENV{dir_name}="usbhd-%k"

    ACTION=="add", RUN+="/bin/mkdir -p /media/%E{dir_name}", RUN+="/bin/mount -t auto -o rw,relatime,noexec,nodev,utf8
    /dev/%k /media/%E{dir_name}"

    ACTION=="remove", ENV{dir_name}!="", RUN+="/bin/umount -l /media/%E{dir_name}", RUN+="/bin/rmdir /media/%E{dir_name}"

    LABEL="auto_mount_end"

Поместите это правило в любой файл директории /etc/udev/rules.d/, имя которого оканчивается на .rules. Например, на моей системе этот код находится в файле /etc/udev/rules.d/10-usb.rules.

Важно! Если вы используете любые несъемные устройства, именуемые как /dev/sdX (например жесткие диски SATA), измените во всех sd[a-z] все a на первые неиспользуемые буквы для sd*-устройств. Например, если у вас есть один SATA-диск, распознающийся как /dev/sda, измените все "sd[a-z]" на "sd[b-z]". Хорошая идея - начинать имена файлов с вашими правилами с номера. Например, 010-udev.rules. Тогда udev прочтет их до стандартных правил (например, если Вы хотите применить свои правила перед использованием hal (файл 90-hal.rules)). Эти правила не требует никаких изменений в /etc/fstab. Просмотрите команды монтирования, возможно вы захотите изменить параметры прав доступа, синхронизации и т.д. (поищите в форумах последствия различных конфигураций).

Categories:

- Русский
- Hardware detection and troubleshooting (Русский)