udev
Тип | Device node |
---|---|
Розробники | Greg Kroah-Hartman та Kay Sievers |
Перший випуск | листопада 2003 |
Стабільний випуск | 204 (9 травня 2013 ) |
Операційна система | ядро Linux |
Мова програмування | С |
Ліцензія | GPL v2 |
Репозиторій | github.com/systemd/systemd |
Вебсайт | 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] Всі функції обслуговування пристроїв у теці/dev
та обробка операцій підключення і відключення зовнішніх пристроїв, які раніше виконувала підсистема 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 відзначають такі переваги свого рішення[3]:
- 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, архів оригіналу за 8 липня 2012, процитовано 25 травня 2012
- ↑ Принято решение о слиянии проектов udev и systemd [Архівовано 3 травня 2012 у Wayback Machine.](рос.)
- ↑ Архівована копія. Архів оригіналу за 9 липня 2011. Процитовано 4 червня 2012.
{{cite web}}
: Обслуговування CS1: Сторінки з текстом «archived copy» як значення параметру title (посилання)
- udev sources code [Архівовано 12 листопада 2020 у Wayback Machine.]
- Discussion of udev rules [Архівовано 16 січня 2022 у Wayback Machine.]
- udev — A Userspace Implementation of devfs by Greg Kroah-Hartman [Архівовано 17 травня 2012 у Wayback Machine.]
- PySDM (Storage Device Manager and udev rule writer) [Архівовано 19 травня 2012 у Wayback Machine.]
- Introduction to device management
- LWN article about devtmpfs [Архівовано 4 травня 2012 у Wayback Machine.]