From 5a6834585c43296c2207f5f251d3d5c237c7c8d2 Mon Sep 17 00:00:00 2001 From: Sn4il Date: Wed, 6 Mar 2024 10:25:41 +0300 Subject: Update LFS mirror --- lfs-12.0-sysv/chapter09/udev.html | 489 -------------------------------------- 1 file changed, 489 deletions(-) delete mode 100644 lfs-12.0-sysv/chapter09/udev.html (limited to 'lfs-12.0-sysv/chapter09/udev.html') diff --git a/lfs-12.0-sysv/chapter09/udev.html b/lfs-12.0-sysv/chapter09/udev.html deleted file mode 100644 index 2cec39d..0000000 --- a/lfs-12.0-sysv/chapter09/udev.html +++ /dev/null @@ -1,489 +0,0 @@ - - - - - - 9.3. Взаимодействие с устройствами и модулями - - - - - - - - -
-

- 9.3. Взаимодействие - с устройствами и модулями -

-

- В Глава 8, - мы установили демон udev во время сборки udev . Прежде чем мы углубимся в детали того, как - работает udev, необходимо кратко рассказать о предыдущих методах - взаимодействия с устройствами. -

-

- Системы Linux традиционно использовали метод статического создания - устройств, при котором огромное количество узлов устройств(иногда - буквально тысячи узлов) создавалось в /dev, независимо от того, существовали ли - соответствующие аппаратные устройства на самом деле. Обычно это - делалось с помощью скрипта MAKEDEV, который содержал ряд - вызовов команды mknod с - соответствующими основными и второстепенными номерами устройств, для - всех возможных вариантов, которые только могут существовать в мире. -

-

- Используя метод udev, узлы устройств создаются только для тех - устройств, которые обнаружены ядром. Эти узлы устройств создаются - каждый раз при загрузке системы; они хранятся в файловой системе - devtmpfs (виртуальная файловая - система, которая полностью находится в оперативной памяти). Узлы не - занимают много места в памяти и их общий размер незначителен. -

-
-

- 9.3.1. История -

-

- В феврале 2000 года, новая файловая система devfs была принята в ветку ядра 2.3.46 и была - доступна на протяжении выпуска стабильных релизов ветки 2.4. Хотя - она и присутствовала в ядре, такой способ динамического создания - устройств никогда не получал поддержки от разработчиков ядра. -

-

- Основная проблема с подходом, принятым devfs была связана с обработкой обнаружения, - создания и назначения имен устройствам. Проблема связанная с - именованием узлов была самой важной. Общепринято, что если имена - устройств можно настраивать, политика именования устройств должна - выбираться системными администраторами, а не навязываться - разработчиками. Файловая система devfs также страдала от состояния гонки, - присущего её архитектуре; оно не могло быть исправлено без - существенной переработки ядра. devfs долгое время была помечена как устаревшая - и, наконец, была удалена из ядра в июне 2006 года. -

-

- При разработке нестабильной ветки ядра 2.5, позднее, выпущенной как - стабильный релиз 2.6, появилась новая виртуальная файловая система - sysfs. Задача этой файловой системы - заключалась в предоставление информации о конфигурации оборудования - системы процессам пользовательского пространства. С помощью этого - представления, видимого в пользовательском пространстве, стало - возможным разработать замену пользовательского пространства для - devfs. -

-
-
-

- 9.3.2. Реализация Udev -

-
-

- 9.3.2.1. Sysfs -

-

- Краткое описание файловой системы sysfs было представлено выше. Можно задаться - вопросом, как sysfs получает - информацию об устройствах в системе, и о том, какие номера - устройств должны использоваться для них. Драйверы, - скомпилированные в ядро, регистрируют свои объекты в sysfs (внутри devtmpfs), по мере обнаружения ядром. Для - драйверов, которые скомпилированы в виде модулей, регистрация - происходит при его загрузке. После монтирования файловой системы - sysfs (в каталог /sys), данные, зарегистрированные драйверами, в - sysfs, станут доступны для - пользовательского пространства и udevd для обработки (включая - модификацию узлов устройств). -

-
-
-

- 9.3.2.2. Создание узла - устройства -

-

- Файлы устройств создаются ядром в файловой системе devtmpfs. Любой драйвер, которому необходимо - зарегистрировать узел устройства, будет использовать для этого - devtmpfs (через системный драйвер - ядра). Когда экземпляр devtmpfs - монтируется в каталог /dev, узел - устройства будет доступен в пользовательском пространстве с - фиксированным именем, разрешениями и владельцем. -

-

- Через некоторое время, ядро отправит uevent в udevd. На основе правил, - которые указанны в файлах в каталогах /etc/udev/rules.d, /lib/udev/rules.d, и /run/udev/rules.d, udevd создаст дополнительные - символические ссылки на узлы устройств, или сменит разрешения, - владельца или группу, или изменит запись (имя) во внутренней базе - данных udevd для - этого объекта. -

-

- Правила в этих трёх каталогах пронумерованы и используются - совместно. Если udevd не может найти правило - для устройства, он оставит права доступа и владельца на - devtmpfs, которые были - установлены изначально. -

-
-
-

- 9.3.2.3. - Загрузка модуля -

-

- Драйверы устройств, скомпилированные в виде модулей ядра могут - содержать встроенные псевдонимы. Псевдонимы можно увидеть - просмотрев вывод программы modinfo, обычно они связаны со - специфичными для шины идентификаторами устройств, которые - поддерживается модулем. Например, драйвер snd-fm801 подерживает PCI устройства с - идентификатором поставщика 0x1319 и идентификатором устройства - 0x0801, и имеет псевдоним «pci:v00001319d00000801sv*sd*bc04sc01i*». - Для большинства устройств, драйвер шины экспортирует псевдонимы - драйвера, которые будет обрабатывать устройство через - sysfs. Например, файл - /sys/bus/pci/devices/0000:00:0d.0/modalias - может содержать строку «pci:v00001319d00000801sv00001319sd00001319bc04sc01i00». - Правила по умолчанию, которые предоставлены Udev, заставят - udevd вызвать - /sbin/modprobe с - содержимым, которое находится в значении переменной окружения - MODALIAS uevent (которое должно - совпадать с содержимым файла modalias в sysfs), тем самым загружая все - модули, чьи псевдонимы совпадают в строке после расширения - подстановочных знаков -

-

- В указанном примере, это означает, что в дополнение к - snd-fm801 будет загружен - устаревший (и нежелательный) драйвер forte, если он будет доступен. Ниже - приведены способы, как можно предотвратить загрузку нежелательных - драйверов. -

-

- Само ядро также способно загружать модули для сетевых протоколов, - файловых систем и поддержки NLS по запросу. -

-
-
-

- 9.3.2.4. Работа с устройствами с горячей заменой или - динамическими устройствами -

-

- При подключении устройства, например, MP3-плеер, к универсальной - последовательной шине (USB), ядро распознает, что устройство - подключено, и генерирует событие uevent. Затем это событие - обрабатывается udevd, как было описано выше. -

-
-
-
-

- 9.3.3. Проблемы с загрузкой модулей и созданием устройств -

-

- Существует несколько возможных проблем, связанных с автоматическим - созданием узлов устройств. -

-
-

- 9.3.3.1. Модуль ядра не загружается автоматически -

-

- Udev загрузит модуль только в том случае, если у него есть - псевдоним, специфичный для шины, и драйвер шины правильно - экспортирует необходимые псевдонимы в sysfs. В других случаях следует организовать - загрузку модуля иными способами. Известно, что, начиная с версии - Linux-6.4.12, udev, выполняет загрузку правильно написанных - драйверов для INPUT, IDE, PCI, USB, SCSI, SERIO, и FireWire - устройств. -

-

- Чтобы определить, имеет ли требуемый драйвер устройства - необходимую поддержку Udev, запустите modinfo с именем модуля в - качестве аргумента. Далее, попробуйте найти каталог устройства в - /sys/bus и проверьте, есть ли там - файл modalias. -

-

- Если файл modalias существует в - sysfs, то драйвер, который - поддерживает устройство, может обращаться к нему напрямую, но не - имеет псевдонима, это ошибка в драйвере. Загрузите драйвер без - помощи Udev и ожидайте, что проблема будет исправлена позднее. -

-

- Если же в каталоге /sys/bus нет - файла modalias, это означает, что - разработчики ядра еще не добавили поддержку modalias к этому типу шины. В Linux-6.4.12 это - относится к шиной ISA. Ожидайте, что эта проблема будет - исправлена в более поздних версиях ядра. -

-

- Udev не предназначен для загрузки драйверов «обёрток», таких как - snd-pcm-ossи не аппаратных - драйверов, например, loop. -

-
-
-

- 9.3.3.2. Модуль ядра не загружается автоматически и Udev не - предназначен для его загрузки -

-

- Если модуль «обёртка» только расширяет функциональность, - предоставляемую каким-либо другим модулем (например модуль - snd-pcm-oss расширяет - функциональность модуля snd-pcm, давая возможность звуковым - картам быть доступными для OSS приложений), настройте - modprobe для - загрузки оболочки после того, как Udev загрузит обернутый модуль. - Для этого добавьте строку «softdep» в файл, который находится в - каталоге /etc/modprobe.d/<filename>.conf. - Например: -

-
softdep snd-pcm post: snd-pcm-oss
-

- Обратите внимание, что команда «softdep» разрешает добавлять pre: зависимости, или одновременно pre: и post: - зависимости. Обратитесь к документации modprobe.d(5) для изучения синтаксиса и - возможностей «softdep». -

-

- Если рассматриваемый модуль не является обёрткой, и полезен сам - по себе, настройте загрузочный скрипт modules, чтобы он - инициализировался при загрузке системы. Для этого добавьте имя - модуля в файл /etc/sysconfig/modules в отдельной строке. Этот - способ сработает и для модулей-обёрток,но не является - оптимальным. -

-
-
-

- 9.3.3.3. Udev загружает какой-то нежелательный модуль -

-

- Либо не создавайте модуль, либо занесите его в черный список в - файле /etc/modprobe.d/blacklist.conf, как это сделано - с модулем forte в примере - ниже: -

-
blacklist forte
-

- Модули, занесенные в черный список, можно загрузить вручную с - помощью явной команды modprobe. -

-
-
-

- 9.3.3.4. Udev неправильно создает устройство или делает - неправильную символическую ссылку -

-

- Это обычно происходит, если правило неожиданно совпадает с другим - устройством. Например, плохо написанное поставщиком оборудования - правило может соответствовать как диску SCSI(искомое устройство), - так и универсальному устройству SCSI (неправильно). Найдите - ошибочное правило и исправьте его с помощью команды udevadm info. -

-
-
-

- 9.3.3.5. Правило Udev работает ненадежно -

-

- Это может быть проявлением предыдущей проблемы. В ином случае, - если правило использует атрибуты файловой системы sysfs, то это может быть проблемой - синхронизации ядра, которая будет исправлена в более поздних - версиях ядра. Но вы можете обойти проблему, создав правило, - которое ожидает используемый атрибут sysfs и добавляет его к файлу правил - /etc/udev/rules.d/10-wait_for_sysfs.rules - (создайте его, если файл не существует). Пожалуйста, сообщите в - списке рассылки разработчиков LFS, если это решение вам поможет. -

-
-
-

- 9.3.3.6. Udev не создаёт устройство -

-

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

-

- Если драйвер ядра не экспортирует свои данные в sysfs, udev не хватает информации, - необходимой для создания узла устройства. Это, вероятнее всего, - произойдет со сторонними драйверами, которых нет в дереве - исходного кода ядра. Создайте статический узел в каталоге - /usr/lib/udev/devices с - соответствующими старшим/младшим номерами (смотрите файл - devices.txt в документации к ядру или документации, - предоставленной сторонним поставщиком драйвера). Статический узел - будет скопирован в /dev с помощью - udev. -

-
-
-

- 9.3.3.7. Порядок присвоения имен устройствам меняется случайным - образом после перезагрузки -

-

- Это связано с тем, что udev обрабатывает события uevents и - загружает модули параллельно, а значит в непредсказуемом порядке. - Это никогда не будет «исправлено». Вы не должны полагаться на то - что имена устройств ядра стабильны. Вместо этого создайте свои - собственные правила, которые делают символические ссылки со - стабильными именами на основе некоторых неизменяемых атрибутов - устройства, таких как серийный номер или вывод различных утилит - *_id, установленных Udev. Смотрите Раздел 9.4, «Управление - устройствами» и Раздел 9.5, «Настройка сети» для - примера. -

-
-
-
-

- 9.3.4. Полезная информация -

-

- Дополнительную документацию можно получить на следующих сайтах: -

-
- -
-
-
- - - -- cgit v1.2.3