udev - udev

udev
Dezvoltatori Greg Kroah-Hartman și Kay Sievers
Eliberarea inițială Noiembrie 2003 ; Acum 17 ani ( 2003-11 )
Versiune stabila 249 (7 iulie 2021 ; acum 3 luni ) [±] ( 07.07.2021 )
Repertoriu
Scris in C
Sistem de operare Kernel Linux
Tip Nodul dispozitivului
Licență GPLv2
Site-ul web Site oficial

udev (userpace / dev) este un manager de dispozitiv pentru kernel-ul Linux . Ca succesor al devfsd și hotplug, udev gestionează în primul rând nodurile dispozitivelor din directorul / dev . În același timp, udev gestionează, de asemenea, toate evenimentele din spațiul utilizatorului generate atunci când dispozitivele hardware sunt adăugate în sistem sau eliminate din acesta, inclusiv încărcarea firmware-ului, după cum este cerut de anumite dispozitive.

Justificare

Este un sistem de operare e nucleu , care este responsabil pentru furnizarea unei interfețe abstracte a hardware - ului pentru restul software - ului. Fiind un nucleu monolitic , nucleul Linux face exact asta, iar driverele de dispozitiv fac parte din nucleul Linux, care reprezintă mai mult de jumătate din codul său sursă. Hardware-ul poate fi accesat prin apeluri de sistem sau prin nodurile dispozitivului .

Pentru a fi în măsură să se ocupe de dispozitive periferice care sunt hotplug -capable într - un mod ușor de utilizat, o parte de manipulare toate aceste dispozitive hardware-hotplug capabil sa predat de kernel la un daemon care rulează în spațiul utilizator. Rularea în spațiul utilizatorului servește scopuri de securitate și stabilitate.

Proiecta

Driverele de dispozitiv fac parte din kernel-ul Linux, în care funcțiile lor principale includ descoperirea dispozitivelor, detectarea modificărilor de stare ale dispozitivelor și funcții hardware similare la nivel scăzut. După încărcarea unui driver de dispozitiv în memorie de la kernel, evenimentele detectate sunt trimise la demonul de spațiu utilizator udevd. Managerul de dispozitive, udevd , este cel care surprinde toate aceste evenimente și apoi decide ce se va întâmpla în continuare. Pentru aceasta, udevd are un set foarte cuprinzător de fișiere de configurare, care pot fi ajustate de administratorul computerului, în funcție de nevoile lor.

  • În cazul în care un nou dispozitiv de stocare este conectat prin USB, udevd este notificat de kernel și el însuși notifică udisksd-daemon. Acest demon ar putea monta apoi sistemele de fișiere.
  • În cazul în care un nou cablu Ethernet este conectat la NIC Ethernet, udevd este notificat de kernel și el însuși notifică daemonul NetworkManager. Daemon-ul NetworkManager ar putea porni dhclient pentru NIC-ul respectiv sau se poate configura conform unor configurații manuale.

Complexitatea acestui lucru îi obligă pe autorii aplicației să reimplementeze logica de suport hardware. Unele dispozitive hardware necesită, de asemenea, programe de asistență privilegiate pentru a le pregăti pentru utilizare. Acestea trebuie deseori invocate în moduri care pot fi dificil de exprimat cu modelul de permisiuni Unix (de exemplu, permițând utilizatorilor să se alăture rețelelor fără fir numai dacă sunt conectați la consola video). Autorii aplicației recurg la utilizarea de binare setuid sau pentru a rula demonii de servicii pentru a oferi propriul control al accesului și separarea privilegiilor, introducând potențial găuri de securitate de fiecare dată.

HAL a fost creat pentru a face față acestui lucru, dar este acum depreciat în majoritatea distribuțiilor Linux.

Prezentare generală

Spre deosebire de sistemele tradiționale Unix , unde nodurile dispozitivelor din directorul / dev au fost un set static de fișiere, managerul de dispozitive Linux udev furnizează dinamic doar nodurile pentru dispozitivele prezente efectiv pe un sistem. Deși devfs obișnuiau să ofere funcționalități similare, Greg Kroah-Hartman a citat o serie de motive pentru care preferă udev în locul devfs:

  • udev acceptă denumirea persistentă a dispozitivelor, care nu depinde, de exemplu, de ordinea în care dispozitivele sunt conectate la sistem. Setarea implicită udev oferă nume persistente pentru dispozitivele de stocare. Orice hard disk este recunoscut prin ID-ul său unic de sistem de fișiere, numele discului și locația fizică a hardware-ului la care este conectat.
  • udev se execută în întregime în spațiul utilizatorului , spre deosebire de spațiul kernel-ului devfs . O consecință este că udev a mutat politica de denumire din nucleu și poate rula programe arbitrare pentru a compune un nume pentru dispozitiv din proprietățile dispozitivului, înainte de crearea nodului; acolo, întregul proces este, de asemenea, întrerupibil și rulează cu o prioritate mai mică.

Udev, în ansamblu, este împărțit în trei părți:

  • Biblioteca libudev care permite accesul la informațiile dispozitivului; a fost încorporat în pachetul de software systemd 183.
  • Daemon spațiu utilizator udevd care administrează virtualul / dev .
  • Utilitar administrativ linie de comandă udevadm pentru diagnosticare.

Sistemul primește apeluri de la kernel prin socket netlink . Versiunile anterioare foloseau hotplug , adăugând un link către ele în /etc/hotplug.d/default în acest scop.

Operațiune

Image
udev a fost încorporat în systemd 183

udev este un manager de dispozitiv generic care rulează ca un demon pe un sistem Linux și ascultă (printr-o priză de netlink ) evenimentele pe care nucleul le trimite dacă un dispozitiv nou este inițializat sau un dispozitiv este eliminat din sistem. Pachetul udev vine cu un set extins de reguli care se potrivesc cu valorile exportate ale evenimentului și cu proprietățile dispozitivului descoperit. O regulă de potrivire va denumi și crea un nod de dispozitiv și va rula programe configurate pentru a configura și configura dispozitivul.

regulile udev se pot potrivi cu proprietăți precum subsistemul kernel, numele dispozitivului kernel, locația fizică a dispozitivului sau proprietăți precum numărul de serie al dispozitivului. De asemenea, regulile pot solicita informații de la programe externe pentru a denumi un dispozitiv sau pot specifica un nume personalizat care va fi întotdeauna același, indiferent de ordinea în care dispozitivele sunt descoperite de sistem.

În trecut, o modalitate obișnuită de a utiliza udev pe sistemele Linux a fost aceea de a-i permite să trimită evenimente printr-un socket către HAL , care ar efectua alte acțiuni specifice dispozitivului. De exemplu, HAL va notifica alte programe care rulează pe sistem că noul hardware a sosit prin emiterea unui mesaj de difuzare pe sistemul D-Bus IPC tuturor proceselor interesate . În acest fel, desktop-uri precum GNOME sau K Desktop Environment 3 ar putea porni browserul de fișiere pentru a răsfoi sistemele de fișiere ale unităților flash USB și cardurilor SD nou atașate .

Până la mijlocul anului 2011, HAL a fost depreciat de majoritatea distribuțiilor Linux, precum și de mediile desktop KDE, GNOME și Xfce , printre altele. Funcționalitatea încorporată anterior în HAL a fost integrată în udev în sine sau mutată în software separat, cum ar fi udisks și upower .

  • udev oferă acces la nivel scăzut la arborele dispozitivului Linux. Permite programelor să enumere dispozitivele și proprietățile acestora și să primească notificări când dispozitivele vin și pleacă.
  • dbus este un cadru care permite programelor să comunice între ele, în siguranță, în mod fiabil și cu o interfață de programare orientată obiect la nivel înalt.
  • udisks (cunoscut anterior ca DeviceKit-disks) este un daemon care se află deasupra interfețelor libudev și a altor nuclee și oferă o interfață la nivel înalt pentru dispozitivele de stocare și este accesibilă prin dbus pentru aplicații.
  • upower (cunoscut anterior ca DeviceKit-power) este un daemon care se află deasupra interfețelor libudev și a altor nuclee și oferă o interfață la nivel înalt pentru gestionarea energiei și este accesibil prin dbus la aplicații.
  • NetworkManager este un daemon care se află deasupra interfețelor libudev și a altor nuclee (și câteva alte demonii) și oferă o interfață la nivel înalt pentru configurarea și configurarea rețelei și este accesibilă prin dbus către aplicații.

udev primește mesaje de la kernel și le transmite către demonii subsistemului, cum ar fi Network Manager. Aplicațiile vorbesc cu Network Manager prin D-Bus.

HAL este învechit și este utilizat doar de codul vechi. Ubuntu 10.04 a fost livrat fără HAL. Inițial, un nou demon DeviceKit a fost planificat pentru a înlocui anumite aspecte ale HAL, dar în martie 2009, DeviceKit a fost depreciat în favoarea adăugării aceluiași cod la udev ca pachet: udev-extras, iar unele funcții s-au mutat acum la udev propriu-zis.

Istorie

udev a fost introdus în Linux 2.5 . Versiunea kernel-ului Linux 2.6.13 a introdus sau actualizat o nouă versiune a interfeței uevent . Un sistem care utilizează o nouă versiune de udev nu va porni cu nuclee mai vechi de 2.6.13 decât dacă udev este dezactivat și un director tradițional / dev este utilizat pentru accesul dispozitivului.

În aprilie 2012, baza de cod a udev a fost fuzionată în arborele sursă systemd , făcând din systemd 183 prima versiune care a inclus udev. În octombrie 2012, Linus Torvalds a criticat abordarea lui Kay Sievers în ceea ce privește întreținerea udev și remedierea erorilor legate de încărcarea firmware-ului , afirmând:

Da, a face acest lucru în kernel este „mai robust”. Dar nu juca jocuri și oprește minciuna. Este mai robust, deoarece avem întreținători care le pasă și pentru că știm că regresiile nu sunt ceva cu care să ne jucăm rapid și ușor. Dacă se sparge ceva și nu știm care este soluția corectă pentru acea ruptură, revenim la ceea ce s-a rupt. Deci da, clar este mai bine să o facem în nucleu. Nu pentru că încărcarea firmware-ului nu se poate face în spațiul utilizatorului. Dar pur și simplu pentru că întreținerea udev de când Greg a renunțat la ea a coborât.

În 2012, proiectul Gentoo Linux a creat o furcă a bazei de cod udev a systemd pentru a evita dependența de arhitectura systemd. Furca rezultată se numește eudev și face funcționalitatea udev disponibilă fără systemd. Un obiectiv declarat al proiectului este de a păstra eudev independent de orice distribuție Linux sau de inițializare a sistemului. Proiectul Gentoo descrie eudev după cum urmează:

eudev este o furculiță de systemd-udev cu scopul de a obține o mai bună compatibilitate cu software - ul existent , cum ar fi OpenRC și Upstart , nuclee mai vechi, diverse toolchains și orice altceva cerute de către utilizatori și diferite distribuții.

Pe 29 mai 2014, suportul pentru încărcarea firmware-ului prin udev a fost abandonat din systemd, deoarece s-a decis că sarcina nucleului este încărcarea firmware-ului. Două zile mai târziu, Lennart Poettering a sugerat ca acest patch să fie amânat până când kdbus începe să fie utilizat de udev; în acel moment, planul a fost de a comuta udev pentru a utiliza kdbus ca sistem de mesagerie subiacent și pentru a scăpa de transportul bazat pe netlink din spațiul utilizatorilor către utilizatori.

Autori

udev a fost dezvoltat de Greg Kroah-Hartman și Kay Sievers , cu mult ajutor de la Dan Stekloff , printre alții.

Referințe

linkuri externe