diff --git a/appendices/scripts.xml b/appendices/scripts.xml index ab0f9f4..b0652b6 100644 --- a/appendices/scripts.xml +++ b/appendices/scripts.xml @@ -36,7 +36,7 @@ - Версия скриптов загрузки и настройки системы-&lfs-bootscripts-version; + Скрипты загрузки и настройки системы-&lfs-bootscripts-version; Скрипты в приложении перечислены с указанием каталога, в котором они обычно находятся. Порядок такой: - The Bash Shell Startup Files + Файлы запуска оболочки Bash /etc/profile diff --git a/chapter09/udev.xml b/chapter09/udev.xml index c05e69a..6e89d75 100644 --- a/chapter09/udev.xml +++ b/chapter09/udev.xml @@ -8,323 +8,304 @@ - Overview of Device and Module Handling + Взаимодействие с устройствами и модулями Udev usage - In , we installed the udev - package when eudev - systemd was built. Before we go into the - details regarding how this works, a brief history of previous methods of - handling devices is in order. + В , мы установили пакет udev + во время сборки eudev + systemd. Прежде чем мы углубимся в детали того, как + это работает, необходимо кратко рассказать о предыдущих методах взаимодействия с устройствами. - Linux systems in general traditionally used a static device creation - method, whereby a great many device nodes were created under /dev (sometimes literally thousands of nodes), - regardless of whether the corresponding hardware devices actually existed. This - was typically done via a MAKEDEV script, which contains a - number of calls to the mknod program with the relevant - major and minor device numbers for every possible device that might exist in - the world. + Системы Linux традиционно использовали метод статического создания устройств, при котором + огромное количество узлов устройств(иногда буквально тысячи узлов) создавалось в + /dev, независимо от того, существовали ли соответствующие + аппаратные устройства на самом деле. Обычно это делалось с помощью скрипта MAKEDEV, + который содержал команды вызова программы mknod с нужным количеством устройств + для всех возможных вариантов, которые только могут существовать в мире. - Using the udev method, only those devices which are detected by the - kernel get device nodes created for them. Because these device nodes will be - created each time the system boots, they will be stored on a devtmpfs file system (a virtual file system - that resides entirely in system memory). Device nodes do not require much - space, so the memory that is used is negligible. + Используя метод udev, только те устройства, которые были обнаружены ядром, + получают свой узел. Поскольку эти узлы будут создаваться каждый раз, при загрузке + системы, они будут располагаться в каталоге файловой + системы devtmpfs (виртуальная файловая + система, которая полностью находится в оперативной памяти). Узлы не занимают много + места в памяти и их общий размер незначителен. - History + История - In February 2000, a new filesystem called devfs was merged into the 2.3.46 kernel - and was made available during the 2.4 series of stable kernels. Although - it was present in the kernel source itself, this method of creating devices - dynamically never received overwhelming support from the core kernel - developers. + В феврале 2000 года, новая файловая система devfs была принята в ветку ядра 2.3.46 и была + доступна на протяжении выпуска стабильных релизов ветки 2.4. Хотя она и + присутствовала в ядре, такой способ динамического создания устройств никогда не + получал поддержки от разработчиков ядра. - The main problem with the approach adopted by devfs was the way it handled device - detection, creation, and naming. The latter issue, that of device node - naming, was perhaps the most critical. It is generally accepted that if - device names are allowed to be configurable, then the device naming policy - should be up to a system administrator, not imposed on them by any - particular developer(s). The devfs file system also suffered from race - conditions that were inherent in its design and could not be fixed without a - substantial revision to the kernel. It was marked as deprecated for a long - period – due to a lack of maintenance – and was finally removed - from the kernel in June, 2006. + Основная проблема с подходом, принятым devfs + была связана с обработкой обнаружения, создания и назначения имен устройствам. Проблема + связанная с именованием узлов была самой важной. Как правило, если имена + устройствам можно настраивать, то политика назначения имён должна быть установлена + системным администратором, а не навязываться каким-либо разработчиком. Файловая + система devfs также страдала от состояния гонки, + которое было присуще ее дизайну и не могло быть исправлено без существенной переработки + самого ядра. В конечном счёте, эта файловая система была помечена как устаревшая на протяжении + достаточно долгого периода времени, по причине отсутствия её ненадлежащей поддержки, и была + удалена из ветки ядра в июне 2006 года. - With the development of the unstable 2.5 kernel tree, later released - as the 2.6 series of stable kernels, a new virtual filesystem called - sysfs came to be. The job of - sysfs is to export a view of - the system's hardware configuration to userspace processes. With this - userspace-visible representation, the possibility of developing a userspace - replacement for devfs became - much more realistic. + При разработке нестабильной ветки ядра 2.5, позднее, выпущенной как стабильный + релиз 2.6, появилась новая виртуальная файловая система + sysfs. Задача этой файловой системы + заключалась в экспорте представления об аппаратной конфигурации системы в процессы + пользовательского пространства. С помощью этого представления, видимого в пользовательском + пространстве, разработка замены для devfs + стала гораздо реалистичнее. - Udev Implementation + Реализация Udev Sysfs - The sysfs filesystem - was mentioned briefly above. One may wonder how sysfs knows about the devices present on - a system and what device numbers should be used for them. Drivers that - have been compiled into the kernel directly register their objects with a - sysfs (devtmpfs internally) - as they are detected by the kernel. For drivers compiled as modules, this - registration will happen when the module is loaded. Once the sysfs filesystem is mounted (on /sys), - data which the drivers register with sysfs are available to userspace - processes and to udevd for processing (including modifications to device - nodes). + Краткое описание файловой системы sysfs было + представлено выше. Можно задаться вопросом, как sysfs + получает информацию об устройствах в системе, и о том, какие номера устройств должны использоваться + для них. Драйверы, скомпилированные в ядро, напрямую регистрируют объекты с помощью + sysfs (внутри devtmpfs), + по мере обнаружения ядром. Для драйверов, которые скомпилированы в виде модулей, регистрация будет + происходить при его загрузке. После того, как файловая система + sysfs будет примонтирована в каталог + /sys, данные, которые регистрируются драйверами, в + sysfs, станут доступны для пользовательского окружения + и udevd для обработки (включая изменения узлов устройств). - Device Node Creation + Создание узла устройства - Device files are created by the kernel by the devtmpfs filesystem. Any driver that - wishes to register a device node will go through the devtmpfs (via the driver core) to do it. - When a devtmpfs instance is - mounted on /dev, the device node - will initially be created with a fixed name, permissions, and - owner. + Файлы устройств создаются ядром при помощи файловой + системы devtmpfs. Любой драйвер, + которому необходимо зарегистрировать узел устройства, будет проходить через + файловую систему devtmpfs (через + системный драйвер ядра). Когда экземпляр + devtmpfs монтируется в каталог + /dev, узел устройства будет создан с + фиксированным именем, соответствующими разрешениями и владельцем. - A short time later, the kernel will send a uevent to - udevd. Based on the rules specified in the files within the + Через некоторое время, ядро отправит uevent в udevd. + На основе правил, которые указанны в файлах в каталогах /etc/udev/rules.d, /usr/lib/udev/rules.d, and /run/udev/rules.d directories, - udevd will create additional symlinks to the device node, or - change its permissions, owner, or group, or modify the internal - udevd database entry (name) for that object. + class="directory">/lib/udev/rules.d, и /run/udev/rules.d, + udevd создаст дополнительные символические ссылки на узлы устройств, + или сменит разрешения, владельца или группу, или изменит запись (имя) во внутренней + базе данных udevd для этого объекта. - The rules in these three directories are numbered and all three - directories are merged together. If udevd can't find a - rule for the device it is creating, it will leave the permissions and - ownership at whatever devtmpfs used initially. + Правила в этих трёх каталогах пронумерованы и используются совместно. Если + udevd не может найти правило для устройства, он оставит права + доступа и владельца на devtmpfs, которые + были установлены изначально. - Module Loading + Загрузка модуля - Device drivers compiled as modules may have aliases built into them. - Aliases are visible in the output of the modinfo - program and are usually related to the bus-specific identifiers of devices - supported by a module. For example, the snd-fm801 - driver supports PCI devices with vendor ID 0x1319 and device ID 0x0801, - and has an alias of pci:v00001319d00000801sv*sd*bc04sc01i*. - For most devices, the bus driver exports the alias of the driver that - would handle the device via sysfs. E.g., the - /sys/bus/pci/devices/0000:00:0d.0/modalias file - might contain the string - pci:v00001319d00000801sv00001319sd00001319bc04sc01i00. - The default rules provided with udev will cause udevd - to call out to /sbin/modprobe with the contents of the - MODALIAS uevent environment variable (which should be the - same as the contents of the modalias file in sysfs), - thus loading all modules whose aliases match this string after wildcard - expansion. + Драйверы устройств, скомпилированные в виде модулей ядра могут содержать + встроенные псевдонимы. Псевдонимы можно увидеть просмотрев вывод программы + 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), тем самым загружая все + модули, чьи псевдонимы совпадают в строке после расширение подстановочных + знаков - In this example, this means that, in addition to - snd-fm801, the obsolete (and unwanted) - forte driver will be loaded if it is - available. See below for ways in which the loading of unwanted drivers can - be prevented. + В указанном примере, это означает, что в дополнение к snd-fm801 + будет загружен устаревший (и нежелательный) драйвер forte, если он + будет доступен. Ниже приведены способы, как можно предотвратить загрузку нежелательных + драйверов. - The kernel itself is also able to load modules for network - protocols, filesystems, and NLS support on demand. + Само ядро также способно загружать модули для сетевых протоколов, файловых систем + и поддержки NLS по запросу. - Handling Hotpluggable/Dynamic Devices + Работа с устройствами с горячей заменой или динамическими устройствами - When you plug in a device, such as a Universal Serial Bus (USB) MP3 - player, the kernel recognizes that the device is now connected and - generates a uevent. This uevent is then handled by - udevd as described above. + При подключении устройства, например, MP3-плеер, к универсальной последовательной + шине (USB), ядро распознает, что устройство подключено, и генерирует событие + uevent. Затем это событие обрабатывается udevd, как было описано выше. - Problems with Loading Modules and Creating Devices + Проблемы с загрузкой модулей и созданием устройств - There are a few possible problems when it comes to automatically - creating device nodes. + Существует несколько возможных проблем, связанных с автоматическим созданием узлов + устройств. - A kernel module is not loaded automatically + Модуль ядра не загружается автоматически - Udev will only load a module if it has a bus-specific alias and the - bus driver properly exports the necessary aliases to sysfs. In other cases, one should - arrange module loading by other means. With Linux-&linux-version;, udev is - known to load properly-written drivers for INPUT, IDE, PCI, USB, SCSI, - SERIO, and FireWire devices. + Udev загрузит модуль только в том случае, если у него есть псевдоним, специфичный + для шины, и драйвер шины правильно экспортирует необходимые псевдонимы в sysfs. В других + случаях следует организовать загрузку модуля иными способами. Известно, что, начиная + с версии Linux-&linux-version;, udev, выполняет загрузку правильно написанных + драйверов для INPUT, IDE, PCI, USB, SCSI, SERIO, и FireWire устройств. - To determine if the device driver you require has the necessary - support for udev, run modinfo with the module name as - the argument. Now try locating the device directory under - /sys/bus and check whether there is - a modalias file there. + Чтобы определить, имеет ли требуемый драйвер устройства необходимую поддержку + Udev, запустите modinfo с именем модуля в качестве аргумента. + Далее, попробуйте найти каталог устройства в + /sys/bus и проверьте, есть ли там + файл modalias. - If the modalias file exists in sysfs, the driver supports the device and - can talk to it directly, but doesn't have the alias, it is a bug in the - driver. Load the driver without the help from udev and expect the issue - to be fixed later. + Если файл modalias существует в + sysfs, то драйвер, который поддерживает + устройство, может обращаться к нему напрямую, но не имеет псевдонима, это ошибка + в драйвере. Загрузите драйвер без помощи Udev и ожидайте, что проблема будет + исправлена позднее. - If there is no modalias file in the relevant - directory under /sys/bus, this - means that the kernel developers have not yet added modalias support to - this bus type. With Linux-&linux-version;, this is the case with ISA - busses. Expect this issue to be fixed in later kernel versions. + Если же в каталоге /sys/bus нет + файла modalias, это означает, что разработчики ядра еще не + добавили поддержку modalias к этому типу шины. + В Linux-&linux-version; это относится к шиной ISA. Ожидайте, что эта проблема + будет исправлена в более поздних версиях ядра. - Udev is not intended to load wrapper drivers such as - snd-pcm-oss and non-hardware drivers such as - loop at all. + Udev не предназначен для загрузки драйверов обёрток, таких как + snd-pcm-ossи неаппаратных драйверов, например, + loop. - A kernel module is not loaded automatically, and udev is not - intended to load it + Модуль ядра не загружается автоматически, и Udev не предназначен для его + загрузки - If the wrapper module only enhances the - functionality provided by some other module (e.g., - snd-pcm-oss enhances the functionality of - snd-pcm by making the sound cards available to OSS - applications), configure modprobe to load the wrapper - after udev loads the wrapped module. To do this, add a - softdep line to the corresponding - /etc/modprobe.d/<filename>.conf - file. For example: + Если модуль обёртка только расширяет функциональность, + предоставляемую каким-либо другим модулем (например модуль + snd-pcm-oss расширяет функциональность модуля + snd-pcm, давая возможность звуковым картам быть доступными + для OSS приложений), настройте modprobe для загрузки оболочки + после того, как Udev загрузит обернутый модуль. Для этого добавьте строку + softdep в файл, который находится в каталоге + /etc/modprobe.d/<filename>.conf. Например: softdep snd-pcm post: snd-pcm-oss - Note that the softdep command also allows - pre: dependencies, or a mixture of both - pre: and post: dependencies. See - the modprobe.d(5) manual page for more information - on softdep syntax and capabilities. + Обратите внимание, что команда softdep разрешает добавлять + pre: зависимости, или одновременно + pre: и post: зависимости. Обратитесь к документации + modprobe.d(5) для изучения синтаксиса и возможностей + softdep. - If the module in question is not a wrapper and is - useful by itself, configure the modules bootscript to - load this module on system boot. To do this, add the module name to the - /etc/sysconfig/modules file on a separate line. - This works for wrapper modules too, but is suboptimal in that case. + Если рассматриваемый модуль не является обёрткой, и полезен сам по + себе, настройте загрузочный скрипт modules, чтобы он инициализировался + при загрузке системы. Для этого добавьте имя модуля в файл /etc/sysconfig/modules + в отдельной строке. Этот способ сработает и для модулей-обёрток,но не является оптимальным. - Udev loads some unwanted module + Udev загружает какой-то нежелательный модуль - Either don't build the module, or blacklist it in a - /etc/modprobe.d/blacklist.conf file as done with the - forte module in the example below: + Либо не создавайте модуль, либо занесите его в черный список в файле + /etc/modprobe.d/blacklist.conf, как это сделано с + модулем forte в примере ниже: blacklist forte - Blacklisted modules can still be loaded manually with the - explicit modprobe command. + Модули, занесенные в черный список, можно загрузить вручную с помощью явной команды + modprobe. - Udev creates a device incorrectly, or makes a wrong symlink + Udev неправильно создает устройство или делает неправильную символическую ссылку - This usually happens if a rule unexpectedly matches a device. For - example, a poorly-written rule can match both a SCSI disk (as desired) - and the corresponding SCSI generic device (incorrectly) by vendor. - Find the offending rule and make it more specific, with the help of the - udevadm info command. + Это обычно происходит, если правило неожиданно совпадает с другим устройством. + Например, плохо написанное правило может соответствовать как диску SCSI + (искомое устройство), так и универсальному устройству SCSI (неправильно) + указанному поставщиком. Найдите ошибочное правило и исправьте его с помощью + команды udevadm info. - Udev rule works unreliably + Правило Udev работает ненадежно - This may be another manifestation of the previous problem. If not, - and your rule uses sysfs - attributes, it may be a kernel timing issue, to be fixed in later kernels. - For now, you can work around it by creating a rule that waits for the used - sysfs attribute and appending - it to the /etc/udev/rules.d/10-wait_for_sysfs.rules - file (create this file if it does not exist). Please notify the LFS - Development list if you do so and it helps. + Это может быть проявлением предыдущей проблемы. В ином случае, если + правило использует атрибуты файловой системы + sysfs, то это может быть + проблемой синхронизации ядра, которая будет исправлена в более поздних + версиях ядра. Но вы можете обойти проблему, создав правило, которое + ожидает используемый атрибут sysfs + и добавляет его к файлу правил /etc/udev/rules.d/10-wait_for_sysfs.rules + (создайте его, если файл не существует). Пожалуйста, сообщите в списке + рассылки разработчиков LFS, если это решение вам поможет. - Udev does not create a device + Udev не создаёт устройство - Further text assumes that the driver is built statically into the - kernel or already loaded as a module, and that you have already checked - that udev doesn't create a misnamed device. + Дальнейший текст предполагает, что драйвер статически встроен в ядро или уже загружен + как модуль, и что вы уже проверили, что Udev не создает устройство с неправильным именем. - Udev has no information needed to create a device node if a kernel - driver does not export its data to - sysfs. This is most common - with third party drivers from outside the kernel tree. Create a static - device node in /usr/lib/udev/devices with the - appropriate major/minor numbers (see the file - devices.txt inside the kernel documentation or the - documentation provided by the third party driver vendor). The static - device node will be copied to /dev - by udev. + Udev не обладает информацией, необходимой для создания узла устройства, + если драйвер ядра не экспортирует свои данные в + sysfs. Как правило, такое происходит + с внешними драйверами, которых нет в дереве исходного кода ядра. Создайте + статический узел в каталоге /usr/lib/udev/devices с + соответствующими первичными и второстепенными номерами (смотрите файл devices.txt + в документации по ядру или документации, предоставленной сторонним поставщиком + драйвера). Статический узел будет скопирован в + /dev с помощью udev. - Device naming order changes randomly after rebooting + Порядок присвоения имен устройствам меняется случайным образом после перезагрузки - This is due to the fact that udev, by design, handles uevents and - loads modules in parallel, and thus in an unpredictable order. This will - never be fixed. You should not rely upon the kernel device - names being stable. Instead, create your own rules that make symlinks with - stable names based on some stable attributes of the device, such as a - serial number or the output of various *_id utilities installed by udev. - See and - for examples. + Это связано с тем, что udev обрабатывает события uevents и загружает модули + параллельно, а значит в непредсказуемом порядке. Это никогда не будет исправлено. + Вы не должны полагаться на то что имена устройств ядра стабильны. Вместо этого создайте + свои собственные правила, которые делают символические ссылки со стабильными именами на + основе некоторых неизменяемых атрибутов устройства, таких как серийный номер или вывод + различных утилит *_id, установленных Udev. Смотрите и + для примера. - Useful Reading + Полезная информация - Additional helpful documentation is available at the following - sites: + Дополнительную документацию можно получить на следующих сайтах: - A Userspace Implementation of devfs + Реализация пользовательского пространства в devfs - The sysfs Filesystem + Файловая система sysfs