udev
| Розробник(и) | Greg Kroah-Hartman та Kay Sievers |
|---|---|
| Перший випуск | листопада 2003 |
| Стабільний випуск | 184 (30 травня 2012) |
| Написано на | С |
| Операційна система | ядро Linux |
| Тип | Device node |
| Ліцензія | GPL v2 |
| Сайт | www.freedesktop.org/software/systemd/libudev/ |
udev — менеджер пристроїв для нових версій ядра Linux, що є наступником devfs і hotplug. Його основне завдання — обслуговування файлів пристроїв (англ. device nodes) у теці /dev і обробка всіх дій, які виконуються в просторі користувача при додаванні/відключенні зовнішніх пристроїв, включаючи завантаження firmware.
Зміст |
Історія [ред.]
udev з'явився у ядрі Linux 2.5.
Ядро Linux версії 2.6.13 увело або оновило нову версію інтерфейсу uevent. Системи, що використовували нову версію udev, не завантажувалися з ядрами, старішими за 2.6.13 без заборони udev і з використанням традиційної теки /dev для доступу до пристроїв.
У кавтні 2012 сирцеве дерево udev було об'єднано з systemd.[1][2] Всі функції обслуговування пристроїв у теці [3] та обробка операцій підключення і відключення зовнішніх пристроїв, які раніше виконувала підсистема udev, відтепер будуть безпосередньо інтегровані в системний менеджер systemd.
Для дистрибутивів, які не бажають використовувати systemd, буде забезпечена можливість використання і складання udev, незалежно від інших частин systemd. Можливість відокремленого використання udev заявлена як офіційно підтримувана функція. Побоювання того, що в майбутньому udev неможливо буде використовувати без systemd, необгрунтовані, оскільки відокремлений udev необхідний для формування образів initrd, не містять компонентів systemd. Цілісність libudev API і сумісність udev зі складу systemd з іншими системами ініціалізації буде збережена протягом тривалого часу.
Таким чином, інтеграція udev і systemd в основному призведе до спрощення процесу розробки обох проектів, які багато в чому взаємозалежні і розвиваються по суті однією командою розробників. Злиття дозволить уникнути дублювання коду і скоротить число залежностей при збірці. Для дистрибутивів всі зміни зведуться до того, що для складання udev доведеться використовувати архів з кодом systemd, а не окремий архів udev. Після злиття systemd продовжить нумерацію версій udev, тобто після 45 випуску відразу буде представлена версія 184.
Опис [ред.]
Завдяки udev, в каталозі /dev містяться файли тільки тих пристроїв, які зараз підключені до системи. Кожен пристрій має свій відповідний файл. Якщо пристрій відключається від системи, то його файл вилучається. Вміст каталогу /dev зберігається на віртуальній файловій системі і всі файли, що перебувають в ньому, створюються при кожному запуску системи. Модифіковані або створені вручну файли не зберігаються після перезавантаження. Файли і теки, які необхідно зберегти або які завжди повинні бути присутніми в каталозі /dev, незалежно від стану пристрою, необхідно поміщати в каталог /lib/udev/devices. При запуску системи вміст цього каталогу копіюється в /dev як є (з тими ж правами доступу).
Таким чином, на відміну від традиційної для Unix схеми управління каталогом /dev, де його вміст був статичним набором файлів, udev забезпечує динамічне управління пристроями, котрі дійсно перебувають у системі. Хоча раніше подібна функціональність забезпечувалася devfs, прихильники udev відзначають такі переваги свого рішення[4]:
- udev підтримує незмінне іменування пристроїв, не залежне, наприклад, від порядку включення пристроїв в систему. Конфігурація за замовчуванням забезпечує незмінне іменування для накопичувачів: тверді диски ідентифікуються за унікальним ідентифікатором файлової системи, іменем диска і розташуванням пристрою, до якого підключений диск.
- udev працює цілком у просторі користувача. Це призводить, зокрема, до того, що udev може виконувати довільні програми для укладання назви пристрою або його ініціалізації.
Принцип роботи [ред.]
udev запускається як демон і приймає через сокет netlink події uevents від ядра, які генеруються при ініціалізації або вилученні пристрою з системи. Запрограмованих користувачем (системою) правила звіряються з властивостями події та відповідного пристрою, і правило, що збіглося, (яких може бути кілька) може назвати і створити відповідний файл пристроїв, а також виконати інші програми для ініціалізації і конфігурації пристрою. Наприклад, таким чином можна реалізувати автоматичне монтування зовнішніх накопичувачів при їхньому підключенні.
Правила можуть звірятися з таким властивостям, як конкретна ядерна підсистема, ім'я пристрою в ядрі, фізичне розташування пристрою, або за серійним номером пристрою. Правила також можуть запитувати інформацію за допомогою інших програм або вказати, що ім'я пристрою завжди буде одним і тим же, незалежно від порядку виявлення пристроїв системою.
Типовий спосіб використання udev на Linux-системі — дозволити посилати події HAL або DeviceKit, щоб вони виробили подальші залежні від пристроїв дії. Наприклад, HAL/DeviceKit може повідомити інші програми про новий пристрій за допомогою широкомовного повідомлення в D-Bus. Таким чином, робочі середовища типу GNOME або KDE можуть автоматично змонтувати USB-накопичувач і відкрити файловий менеджер для перегляду його вмісту.
Архітектура [ред.]
udev розділений на три частини:
- Бібліотека libudev, що дозволяє отримувати доступ до інформації про пристрої
- Демон udevd, що працює у просторі користувача та керує вмістом /dev
- Програма udevadm для налагодження та діагностики.
udev отримує події від ядра через netlink-сокет. Ранні версії використовували hotplug, додаючи в /etc/hotplug.d/default.
Виноски [ред.]
- ↑ Sievers, Kay, «Commit importing udev into systemd», systemd, http://cgit.freedesktop.org/systemd/systemd/commit/?id=19c5f19d69bb5f520fa7213239490c55de06d99d, процитовано 25 May 2012
- ↑ Принято решение о слиянии проектов udev и systemd
- ↑ /dev
- ↑ http://kernel.org/pub/linux/utils/kernel/hotplug/udev_vs_devfs
Посилання [ред.]
- udev sources code
- Discussion of udev rules
- udev – A Userspace Implementation of devfs by Greg Kroah-Hartman
- PySDM (Storage Device Manager and udev rule writer)
- Introduction to device management
- LWN article about devtmpfs
Джерела [ред.]
- Використано матеріали зі статті в [udev російській Вікіпедії].
- Використано матеріали зі статті в [udev англійській Вікіпедії].

