Udev (Русский)

From ArchWiki

Jump to: navigation, search
i18n
Русский
English
繁體中文
简体中文

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

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


Contents

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

Udev не будет загружать модули (как при загрузке, так и после), если только в вашем /etc/rc.conf не включена опция MOD_AUTOLOAD. Если она выключена, вы, как администратор, должны загружать нужные вам модули самостоятельно. Вы можете делать это различными способами. Лучше всего - указав все нужные модули в параметре MODULES в файле rc.conf или используя команду modprobe для каждого требуемого модуля. Другой метод - запустить команду 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 часто может совершать ошибки и загружать ненужные модули. Для предотвращения этого вы можете поместить их в черный список. Будучи занесенным в него, модуль никогда не будет загружаться 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.conf. Попробуйте почистить этот файл.

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

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

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

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

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

SUBSYSTEM=="net", ATTRS{address}=="aa:bb:cc:dd:ee:ff", NAME="lan0"
SUBSYSTEM=="net", ATTRS{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]", NAME="%k", SYMLINK+="usb%m", GROUP="users", OPTIONS="last_rule"
ACTION=="add", KERNEL=="sd[a-z][0-9]", SYMLINK+="usb%n", GROUP="users", NAME="%k"
ACTION=="add", KERNEL=="sd[a-z][0-9]", RUN+="/bin/mkdir -p /mnt/usb%n"
ACTION=="add", KERNEL=="sd[a-z][0-9]", PROGRAM=="/lib/udev/vol_id -t %N", RESULT=="vfat", RUN+="/bin/mount -t vfat -o rw,noauto,flush,quiet,nodev,nosuid,noexec,noatime,dmask=000,fmask=111 /dev/%k /mnt/usb%n", OPTIONS="last_rule"
ACTION=="add", KERNEL=="sd[a-z][0-9]", RUN+="/bin/mount -t auto -o rw,noauto,sync,dirsync,noexec,nodev,noatime /dev/%k /mnt/usb%n", OPTIONS="last_rule"
ACTION=="remove", KERNEL=="sd[a-z][0-9]", RUN+="/bin/umount -l /mnt/usb%n"
ACTION=="remove", KERNEL=="sd[a-z][0-9]", RUN+="/bin/rmdir /mnt/usb%n", OPTIONS="last_rule"

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

Версия с символическими ссылками в /media:

KERNEL=="sd[a-z]", NAME="%k", SYMLINK+="usbhd-%k", GROUP="users", OPTIONS="last_rule" 
ACTION=="add", KERNEL=="sd[a-z][0-9]", SYMLINK+="usbhd-%k", GROUP="users", NAME="%k" 
ACTION=="add", KERNEL=="sd[a-z][0-9]", RUN+="/bin/mkdir -p /media/usbhd-%k" 
ACTION=="add", KERNEL=="sd[a-z][0-9]", RUN+="/bin/ln -s /media/usbhd-%k /mnt/usbhd-%k" 
ACTION=="add", KERNEL=="sd[a-z][0-9]", PROGRAM=="/lib/udev/vol_id -t %N", RESULT=="vfat", RUN+="/bin/mount -t vfat -o rw,noauto,flush,quiet,nodev,nosuid,noexec,noatime,dmask=000,fmask=111 /dev/%k /media/usbhd-%k", OPTIONS="last_rule" 
ACTION=="add", KERNEL=="sd[a-z][0-9]", RUN+="/bin/mount -t auto -o rw,noauto,sync,dirsync,noexec,nodev,noatime /dev/%k /media/usbhd-%k", OPTIONS="last_rule" 
ACTION=="remove", KERNEL=="sd[a-z][0-9]", RUN+="/bin/rm -f /mnt/usbhd-%k" 
ACTION=="remove", KERNEL=="sd[a-z][0-9]", RUN+="/bin/umount -l /media/usbhd-%k" 
ACTION=="remove", KERNEL=="sd[a-z][0-9]", RUN+="/bin/rmdir /media/usbhd-%k", OPTIONS="last_rule"

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

Personal tools