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








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

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

На главную -> MyLDP -> Электронные книги по ОС Linux
Beyond Linux From Scratch. Version 2011-12-30
Назад 3. Завершающие настройки в системе LFS Вперед

Об устройствах

Хотя большинство устройств, которые используются пакетами в системе BLFS и за ее пределами, настраиваются должным образом с помощью udev по правилам, устанавливаемых по умолчанию системой LFS в /etc/udev/rules.d, есть случаи, когда эти правила необходимо изменить или дополнить

Замечания для пользователя: http://wiki.linuxfromscratch.org/blfs/wiki/aboutdevices

Несколько звуковых карт

Если в системе несколько звуковых карт, то звуковая карта, используемая "по умолчанию", выбирается случайным образом. Метод, с помощью которого определяется порядок звуковых карт, зависит от того, являются ли драйверы карт модулями или нет. Если драйверы звуковой карты скомпилированы в ядре, то управление ядром осуществляется с помощью параметров, указываемых в /boot/grub/menu.lst. Например, если в системе есть карта FM801 и карта SoundBlaster PCI, то к параметрам можно добавить следующую строку:

snd-fm801.index=0 snd-ens1371.index=1

Если драйверы звуковой карты собраны в виде модулей, порядок можно задать в файле /etc/modprobe.conf следующим образом:

options snd-fm801 index=0
options snd-ens1371 index=1

Вопросы, касающиеся устройств USB

Обычно имеется два вида нодов устройств, которые используются с устройствами USB.

Ноды первого вида создаются в ядре специализированными драйверами устройств (например, usb_storage/sd_mod или usblp). Например, устройство хранения данных USB будет устройством /dev/sdb, а принтер USB будет устройством /dev/usb/lp0. Эти ноды устройств существует только тогда, когда загружен специализированный драйвер устройств.

Второй вид нодов устройств (/dev/bus/usb/BBB/DDD, где BBB является номером шины, а DDD является номером устройства) создается, даже если в ядре драйвера для устройства нет. С помощью этих "универсальных" raw-нодов устройств USB приложения могут обмениваться с устройством произвольными пакетами USB, что позволяет обойти возможно существующие драйвера ядра.

Доступ к raw-нодам устройств USB необходим, когда программы пользовательского пространства действуют в качестве драйвера устройства. Но для того, чтобы программа успешно открыла устройство, должны быть правильно установлены права доступа. По умолчанию, по соображениям безопасности, все raw-устройства USB принадлежат пользователю root и группе usb и имеют права доступа 0664 (необходим доступ на чтение, например, для lsusb и для тех программ, которым нужен доступ к хабам USB). С пакетами (например, SANE и libgphoto2), в которых имеются драйвера устройств USB пользовательского пространства, также поставляются правила udev, с помощью которых изменяются права доступа к raw-устройствам USB, которыми управляет пакет. То есть, правила, установленные пакетом SANE, изменяют права доступа для известных пакету сканеров, но не для принтеров. Если те, кто сопровождает пакет, забудут написать правила для вашего устройства, то сообщите об ошибке команде BLFS (если в системе BLFS этот пакет имеется) и разработчикам пакета, а вам потребуется написать собственное правило.

Есть одна ситуация, когда не работает такое детализированное управление доступом с помощью предварительно созданных правил udev. А именно, когда эмуляторы персональных компьютеров, например, KVM, QEMU и VirtualBox, используют raw-ноды устройств USB для предоставления из гостевой операционной системы доступа к произвольным устройствам USB (замечание: чтобы получить доступ и не использовать устаревшую точку монтирования /proc/bus/usb так, как это описывается ниже, требуются патчи). Очевидно, что те, кто сопровождает эти пакеты, не могут знать, какие устройства USB должны подключаться к гостевой операционной системе. Вы можете самостоятельно написать отдельные правила udev для всех необходимых вам устройств USB, либо можете воспользоваться универсальной группой "usb", имеющейся по умолчанию, члены которой могут отправлять любые команды на все устройства USB.

Для версий, предшествующих Linux-2.6.15, доступ к raw-устройствам USB осуществлялся не с помощью нодов устройств /dev/bus/usb/BBB/DDD, а с помощью псевдофайлов /proc/bus/usb/BBB/DDD. В некоторых приложениях (например, VMware Workstation) по-прежнему используется только этот устаревший метод и новые ноды устройств использовать нельзя. Для работы с таким приложениями воспользуйтесь группой "usb", но помните, что члены этой группы будут иметь неограниченный доступ ко всем устройствам USB. Чтобы создать запись fstab для устаревшей файловой системы usbfs, выполните:

usbfs  /proc/bus/usb  usbfs  devgid=14,devmode=0660  0  0

Замечание

Добавление пользователей в группу "usb" по своей сути небезопасно, поскольку они могут через ноды устройств конкретных драйверов USB обойти ограничения на доступ. Например, они могут читать конфиденциальные данные с жестких дисков USB, не будучи при этом членами группы "disk". Если это возможно, то старайтесь не добавлять пользователей в эту группу,.

Атрибуты устройств udev

Точные атрибуты устройств, такие как имя группы и права доступа, можно задавать при помощи создания дополнительных правил udev, похожих на то, что приведено ниже. Код изготовителя и код изделия можно определить, поискав записи в директории /sys/devices или после того, как устройство было подключено, использовав команду udevadm info. Подробности смотрите в документации в текущем директории udev - /usr/share/doc.

SUBSYSTEM=="usb_device", SYSFS{idVendor}=="05d8", SYSFS{idProduct}=="4002", \
  GROUP:="scanner", MODE:="0660"

Замечание

Приведенная выше команда использована только в иллюстративных целях. Правила udev для сканера добавляются в систему при установке пакета SANE-1.0.19.

Устройства, используемые в серверах

В некоторых случаях имеет смысл полностью отказаться от udev и создать статические устройства. Примером таких случаев являются серверы. Нужна ли на сервере возможность динамической работы с устройствами? На этот вопрос может ответить только системный администратор, но во многих случаях ответом будет - "нет".

Если динамические устройства не нужны, то в системе должны быть созданы статические устройства. В конфигурации, используемой по умолчанию, загрузочный скрипт /etc/rc.d/rcsysinit.d/S10udev монтирует раздел tmpfs в директории /dev. Эта проблему можно преодолеть с помощью временного монтирования корневого раздела:

Предупреждение

Если инструкции, приведенные ниже, выполнять неаккуратно, ваша система может перестать загружаться.

mount --bind / /mnt
cp -a /dev/* /mnt/dev
rm /etc/rc.d/rcsysinit.d/{S10udev,S45udev_retry}
umount /mnt

Теперь при следующей перезагрузке в системе будут использоваться статические устройства. Создавайте любое необходимое дополнительное устройство с помощью команды mknod.

Если вы хотите восстановить динамические устройства, заново создайте символические ссылки /etc/rc.d/rcsysinit.d/{S10udev,S45udev_retry} и снова перезагрузитесь. Статические устройства удалять не нужно (консоль и нуль-устройство всегда нужны), т. к. они спрятаны в разделе tmpfs. Накладные расходы использования дискового пространства несущественны (около 20-30 байт на запись).

Перевод сделан с варианта оригинала, датированного 2011-11-15 23:41:27 +0000


Предыдущий раздел: Оглавление Следующий раздел:
О пользователях и группах в системе   Файлы запуска командной оболочки Bash