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