Igorka Лекция #30 - Подсистемата udev
Малко за всичко и всичко за малко, или практическият опит на системен администратор.
февр | април » | |||||
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | единадесет | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
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.