Igorka Лекція №30 - Підсистема udev
Дещо про все і все про небагато, або практичний досвід системного адміністратора.

| «Лютий | квітень » | |||||
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
| 29 | 30 | 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 all -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/ru-us/usb-OCZ_RALLY2_ST1A9BFE-0:0
Нас цікавить перший рядок який містить шлях до іншої інформації про пристрій записаної в каталозі/sys. Щоб отримати цю інформацію, потрібно виконати командуudevinfo -a -p шлях. Щоб не набирати такого довгого шляху можна записати таку команду:
В результаті отримаємо довгий перелік атрибутів та значень у вигляді готовому для використання в правилах udev 15. Нижче невеликий фрагмент результатів:
Тепер можна скласти правило. Наприклад, так:
Це правило буде застосовано до всіх пристроїв підсистемиUSB, у яких серійний номер дорівнюєST1A9BFE. В результаті повинен бути створений символічний лінк на такий пристрій у каталозі/dev.
Створюємо файл/etc/udev/rules.d/10-myudev.rules, вставляємо в нього наше правило. Відключаємо флеш-накопичувач, перевантажуємо демонudev і знову підключаємо флеш-накопичувач. Виконаємо командуls -l /dev grep MyFlash :
Бачимо, що підсистемаudev виконала наше правило і створила символічний лінк на файл-пристрійsde.