Igorka Лекция #30 - Подсистемата udev

Малко за всичко и всичко за малко, или практическият опит на системен администратор.

лекция

март 2010 г.Пон Вт Ср Чет Пет Сб Нед
февраприл »
1234567
8910единадесет121314
15161718192021
22232425262728
29тридесет31

лекция

Лекция #30 - Подсистемата udev

В предишни лекции понякога споменахме подсистематаudev. Вече трябва да разберете в общи линии какво еudev и защо е необходимо. Най-лесният начин да се обясни предназначението на подсистематаudev е базирано на шинатаUSB и устройствата, свързани към нея. КогатоUSB устройство е свързано към компютъра, ядрото на нивото на обслужване на шинаUSB улавя събитието за ново прикачено устройство. Списъкът с такива събития може да се види чрез изпълнение на командатаdmesg. Ето пример за събитията, които ядрото регистрира, когато е свързано флаш устройство:

Преди появата наudev беше необходимо ръчно да се намерят свързани устройства и да се конфигурират да работят в системата. Сегаudev поема тази работа. Когато свържете флаш устройство към компютър, работещ с модерна дистрибуцияLinux, всички настройки и монтиране на файловата система се извършват автоматично.

Тясно свързана сudev е файловата системаsysfs, която е монтирана в директорията/sys. Директорията/sys показва и осигурява достъп до хардуерната конфигурация на компютъра. С други думи/sys е показване на хардуерната конфигурация на компютъра. Съдържанието на директорията/sys се променя динамично с промяната на хардуерната конфигурация.

Ако спрете демонаudev, тогава, когато е свързано флаш устройство, ядрото ще регистрира събития, директорията/sys ще се промени, но файловата система на флаш устройството няма да бъде монтирана. Освен това в директорията/dev също няма да видите ново устройство, тъй като именноudev създава там блоково устройство, което е флаш устройство.

И така, нека обобщим малко. Задачата на ядрото е да открива промени в хардуерната конфигурация на системата, да регистрира тези промени и да прави промени в директорията/sys. Задачата на подсистематаudev е допълнително да интегрира и конфигурира устройството в системата (да го покаже в директорията/dev ) и да предостави на потребителя готово за използване устройство.

Подсистематаudev конфигурира устройства според посочените правила. Правилата се съдържат във файловете в директорията/etc/udev/rules.d/. Файловете с правила могат да бъдат намерени и в директорията/etc/udev/. Всички файлове с правила се разглеждат по азбучен ред.

Нека да разгледаме ред с правило от файл с правила и да се запознаем с основните принципи на изграждане на правила:

В реда виждаме 4 двойки изрази, разделени със запетая. Първите две двойки са така наречените филтри, които ви позволяват да идентифицирате устройството. В примераSUBSYSTEMS==”scsi” показва, че устройството трябва да е SCSI устройство, а двойкатаKERNEL==”sr[0-9]*” идентифицира устройството по името, което то (устройството) е получило от системното ядро. Това означава, че това правило ще се прилага за SCSI устройство с имеsr0 илиsr1 и т.н.

Следват двойките действия, които ще бъдат извършени на устройства, които отговарят на филтъра.NAME=”scd%n” - този запис показва, че ще бъде създаден файл на устройството за устройството в директорията/dev с имеscd0 илиscd1 и т.н. Броят ще зависи от числото в името на устройството. Вместо%n ще бъде заменено числото от името. Ако името на устройството еsr0, тогаваscd%n се преобразува вscd0. Заместването%k също се използва много често.%k е пълното име на устройството. Тоест, вместо%k,sr0 ще бъде заменено. Ако едно име на файл на устройството (/dev/scd0 ) не е достатъчно, тогава можете да създадете символни връзки -SYMLINK+=”sr%n”. Този израз ще създаде символна връзка в директорията/dev с имеsr0 към файловото устройство/dev/scd0. Имайте предвид, че се използва операторът+=.

За всяко свързано устройство ядрото създава съответни записи в директорията/sys. Устройството, освен принадлежност към която и да е подсистема и име, има и много атрибути, като име, модел, сериен номер и други. Устройствата могат да бъдат идентифицирани и чрез имена на атрибути. За това се използва изразътATTRIB==стойност на атрибута.

Нека направим следната практика. Нека напишем правило, което ще създаде символна връзка към свързаното флаш устройство в директорията/dev. Флаш устройството се идентифицира по неговия сериен номер. Свързваме флаш устройството и използвайки командатаdmesg разглеждаме името, което е присвоено от ядрото за това устройство:

udevinfo -q всички -n sde

P: /devices/pci0000:00/0000:00:13.2/usb2/2-2/2-2:1.0/host8/target8:0:0/8:0:0:0/block/sde N: sde W: 85 S:block/8:64 S: disk/by-id/usb-OCZ_RALLY2_ST1A9BFE-0:0 . . E: DKD_PARTITION_TABLE_SCHEME=mbr E: DKD_PRESENTATION_NOPOLICY=0 E: DEVLINKS=/dev/block/8:64 /dev/disk/by-id/usb-OCZ_RALLY2_ST1A9BFE-0:0

Интересуваме се от първия ред, който съдържа пътя до останалата информация за устройството, записана в директорията/sys. За да получите тази информация, трябва да изпълните командатаudevinfo -a -p път. За да избегнете въвеждането на толкова дълъг път, можете да напишете следната команда:

Резултатът е дълъг списък от атрибути и стойности, готови за използване в правилаudev. По-долу е малък фрагмент от резултатите:

Сега можете да направите правило. Например така:

Това правило ще бъде приложено към всичкиUSB подсистемни устройства със сериен номер, равен наST1A9BFE. Това трябва да създаде символна връзка към такова устройство в директорията/dev.

Създайте файл/etc/udev/rules.d/10-myudev.rules и поставете нашето правило в него. Изключете флаш устройството, рестартирайте демонаudev и свържете отново флаш устройството. Изпълнете командатаls -l /dev grep MyFlash :

Виждаме, че подсистематаudev изпълни нашето правило и създаде символна връзка към файла на устройствотоsde.