Лекция # 30 - Подсистема udev - Информационна бележка
Лекция # 30 - Подсистемата udev
В предишни лекции понякога споменавахме подсистемата udev. Вече трябва да разберете най-общо какво е udev и защо е необходимо. Най-лесният начин да се обясни предназначението на подсистемата udev базирани на автобус USB и устройства, свързани към него. Когато е свързан към компютър USB устройство, ядро на обслужващия слой на шината USB, улавя събитието на свързване на ново устройство. Списъкът с такива събития може да се види чрез стартиране на командата dmesg. Ето пример за събитията, които ядрото регистрира, когато е свързано флаш устройство:
Преди появата udev беше необходимо ръчно да се намерят свързаните устройства и да се конфигурира работата им в системата. Сега той поема тази работа udev. Когато включите флаш устройство в компютър с модерен Linux-разпределителен комплект, тогава цялата конфигурация и монтиране на файловата система се извършва автоматично.
Много тясно с udev файловата система е свързана sysfs, който е монтиран в директорията / sys. Каталог / sysпоказва и осигурява достъп до хардуерната конфигурация на компютъра. С други думи / sys Е дисплей на хардуерната конфигурация на компютъра. Съдържание на директорията / sys динамично се променя при промяна на хардуерната конфигурация.
Ако спреш демона udev, след това, когато е свързано флаш устройство, ядрото ще регистрира събития, директорията / sys ще се промени, но файловата система на флаш устройството няма да бъде монтирана. Освен това в каталога / разработчици няма да видите и новото устройство, тъй като точно udev създава там блоково устройство, което е флаш устройство.
И така, нека обобщим малко. Задачата на ядрото е да открива промени в хардуерната конфигурация на системата, да регистрира тези промени и да прави промени в директорията / sys. Задача на подсистемата udev извършете допълнителна интеграция и конфигуриране на устройството в системата (покажете го в каталога / разработчици) и предоставете на потребителя готово за употреба устройство.
Подсистема udev конфигурира устройствата съгласно посочените правила. Правилата се съдържат в каталожните файлове /etc/udev/rules.d/. Също така в директорията могат да се съдържат файлове с правила / и т.н./udev /. Всички файлове с правила се сканират по азбучен ред.
Нека да разгледаме ред с правило от файл с правила и да се запознаем с основните принципи на изграждане на правила:
В реда виждаме 4 двойки изрази, разделени със запетаи. Първите две двойки са така наречените филтри, които ви позволяват да идентифицирате устройството. В примера ПОДСИСТЕМИ == "scsi" показва, че устройството трябва да е SCSI устройство, а двойката KERNEL == "sr [0-9] *" идентифицира устройство по името, което то (устройство) е получило от системното ядро. Тоест това правило ще се прилага за SCSI устройство с име sr0 или sr1 и т.н.
Следват двойките действия, които ще бъдат извършени с устройства, които съответстват на филтъра.ИМЕ = "scd% n" - този запис казва, че ще бъде създаден файл на устройството за устройството в директорията / разработчици С име scd0 или scd1 и т.н. Номерът ще зависи от номера в името на устройството. Вместо % н и число от името ще бъде заменено. Ако името на устройството е sr0, тогава scd% n преобразуван в scd0. Заместването също се използва много често % k. % k Е пълното име на устройството. Тоест вместо % k ще бъде замененsr0. Ако едно име на файл на устройството (/ dev/scd0) не е достатъчно, тогава можете да създадете символни връзки -SYMLINK + = "sr% n". Този израз ще се създаде в директорията / разработчици символна връзка с име sr0 на файлово устройство / dev/scd0. Имайте предвид, че се използва операторът +=.
За всяко свързано устройство ядрото създава съответни записи в директорията / sys. Устройството, освен че принадлежи към която и да е подсистема и име, има и много атрибути, като име, модел, сериен номер и други. Можете също да идентифицирате устройства по имена на атрибути. За целта използвайте израза ATTRIB == стойност на атрибута.
Нека направим следната практическа задача. Нека напишем правило, което ще създаде в директорията / разработчици символична връзка към приставката флаш устройство. Флаш устройството се идентифицира със серийния му номер. Свързваме флаш устройството и използваме командата dmesg вижте името, присвоено от ядрото за това устройство:
Ние се интересуваме от първия ред, който съдържа пътя до останалата информация за устройството, записана в директорията / sys. За да получите тази информация, трябва да изпълните командата udevinfo -a -p път. За да не пишете толкова дълъг път, можете да напишете следната команда:
В резултат на това получаваме дълъг списък от атрибути и стойности, готови за използване в правилата.udev. По-долу е малък фрагмент от резултатите:
Сега можете да създадете правило. Например по този начин:
Това правило ще се прилага за всички устройства в подсистемата. USB чийто сериен номер еST1A9BFE. В резултат на това в директорията трябва да се създаде символна връзка към такова устройство / разработчици.
Създайте файл /etc/udev/rules.d/10-myudev.rules, ние вмъкваме нашето правило в него. Изключете флаш устройството, претоварете демона udev и свържете отново флаш устройството. Нека изпълним командата ls -l/dev | grep MyFlash:
Виждаме, че подсистемата udev изпълни нашето правило и създаде символична връзка към файловото устройство sde.