udev - udev
| Utvikler (er) | Greg Kroah-Hartman og Kay Sievers |
|---|---|
| Første utgivelse | November 2003 |
| Stabil utgivelse | 249 (7. juli 2021 ) [±] |
| Oppbevaringssted | |
| Skrevet inn | C |
| Operativsystem | Linux -kjerne |
| Type | Enhetsnode |
| Tillatelse | GPLv2 |
| Nettsted | Offesiell nettside |
udev (userspace /dev) er en enhetsbehandling for Linux -kjernen . Som etterfølger av devfsd og hotplug, klarer udev primært enhetsnoder i / dev katalogen. På samme tid håndterer udev også alle brukerplasshendelser som oppstår når maskinvareenheter legges til i systemet eller fjernes fra det, inkludert fastvareinnlasting som kreves av visse enheter.
Begrunnelse
Det er et operativsystem er kjernen som er ansvarlig for å gi en abstrakt grensesnitt av maskinvaren til resten av programvaren. Som en monolitisk kjerne , gjør Linux -kjernen akkurat det, og enhetsdrivere er en del av Linux -kjernen, som utgjør mer enn halvparten av kildekoden. Maskinvare kan nås via systemanrop eller over enhetens noder .
For å kunne håndtere eksterne enheter som er hotplug -kapable på en brukervennlig måte, ble en del av håndteringen av alle disse hotplug-kompatible maskinvareenhetene overlevert fra kjernen til en demon som kjører i brukerplass . Å løpe i brukerplass tjener sikkerhet og stabilitet.
Design
Enhetsdrivere er en del av Linux-kjernen, der deres primære funksjoner inkluderer enhetsoppdagelse, detektering av endringer i enhetsstatus og lignende maskinvarefunksjoner på lavt nivå. Etter at en enhetsdriver er lastet inn i minnet fra kjernen, blir detekterte hendelser sendt ut til userpace daemon udevd. Det er enhetsbehandling, udevd , som fanger alle disse hendelsene og deretter bestemmer hva som skal skje videre. For dette har udevd et veldig omfattende sett med konfigurasjonsfiler, som alle kan justeres av datamaskinadministratoren, i henhold til deres behov.
- Hvis en ny lagringsenhet er koblet til via USB, blir udevd varslet av kjernen og varsler selv udisksd-demonen. Den demonen kan deretter montere filsystemene.
- Hvis en ny Ethernet-kabel er koblet til Ethernet NIC, blir udevd varslet av kjernen og varsler NetworkManager-daemon selv. NetworkManager-daemon kan starte dhclient for denne NIC, eller konfigurere i henhold til noen manuell konfigurasjon.
Kompleksiteten i å gjøre det tvinger applikasjonsforfattere til å implementere logikk for maskinvarestøtte på nytt. Noen maskinvareenheter krever også privilegerte hjelperprogrammer for å forberede dem til bruk. Disse må ofte påberopes på måter som kan være vanskelig å uttrykke med Unix -tillatelsesmodellen (for eksempel tillate brukere å bli med i trådløse nettverk bare hvis de er logget på videokonsollen). Søknad forfattere ty til hjelp setuid binærfiler eller kjøre tjenesteleverandører daemons å gi sin egen adgangskontroll og privilegiet separasjon, potensielt innføre sikkerhetshull hver gang.
HAL ble opprettet for å håndtere dette, men er nå avskrevet i de fleste Linux -distribusjoner.
Oversikt
I motsetning til tradisjonelle Unix -systemer, der enhetsnodene i /dev -katalogen har vært et statisk sett med filer, gir Linux udev enhetsbehandling dynamisk bare noder for enhetene som faktisk finnes på et system. Selv om devfs pleide å tilby lignende funksjonalitet, nevnte Greg Kroah-Hartman en rekke grunner til at han foretrakk udev fremfor devfs:
- udev støtter vedvarende enhetsnavn, som for eksempel ikke er avhengig av rekkefølgen enhetene er koblet til systemet. Standard udev -oppsett gir vedvarende navn for lagringsenheter. Enhver harddisk gjenkjennes av sin unike filsystem -ID, navnet på disken og den fysiske plasseringen på maskinvaren den er koblet til.
- udev kjører helt i user space , i motsetning til devfs sin kjernenivå . En konsekvens er at udev flyttet navnepolicyen ut av kjernen og kan kjøre vilkårlige programmer for å komponere et navn for enheten fra enhetens egenskaper, før noden opprettes; der er hele prosessen også avbrytbar, og den kjører med lavere prioritet.
Udev, som helhet, er delt inn i tre deler:
- Libudev bibliotek som gir tilgang til enhetsinformasjon; den ble innlemmet i systemd 183 programvarepakken.
- User space daemon udevd som administrerer virtual /dev .
- Administrativ kommandolinje- verktøyet udevadm for diagnostikk.
Systemet mottar anrop fra kjernen via netlink socket. Tidligere versjoner brukte hotplug , og la til en lenke til seg selv i /etc/hotplug.d/default med dette formålet.
Operasjon
udev er en generisk enhetsbehandling som kjører som en demon på et Linux -system og lytter (via en netlink -kontakt) til hendelser som kjernen sender ut hvis en ny enhet blir initialisert eller en enhet blir fjernet fra systemet. Udev -pakken kommer med et omfattende sett med regler som samsvarer med eksporterte verdier for hendelsen og egenskapene til den oppdagede enheten. En matchende regel vil muligens navngi og opprette en enhetsnode og kjøre konfigurerte programmer for å sette opp og konfigurere enheten.
udev -regler kan matche på egenskaper som delsystemet for kjernen, navnet på kjernenheten, enhetens fysiske plassering eller egenskaper som enhetens serienummer. Regler kan også be om informasjon fra eksterne programmer for å navngi en enhet eller angi et egendefinert navn som alltid vil være det samme, uavhengig av rekkefølgen enheter blir oppdaget av systemet.
Tidligere var en vanlig måte å bruke udev på Linux-systemer å la den sende hendelser gjennom en stikkontakt til HAL , noe som ville utføre ytterligere enhetsspesifikke handlinger. For eksempel vil HAL varsle annen programvare som kjører på systemet om at den nye maskinvaren hadde kommet ved å sende en kringkastingsmelding på D-Bus IPC- systemet til alle interesserte prosesser . På denne måten kan stasjonære datamaskiner som GNOME eller K Desktop Environment 3 starte filleseren for å bla gjennom filsystemene til nylig tilkoblede USB -flash -stasjoner og SD -kort .
I midten av 2011 hadde HAL blitt avskrevet av de fleste Linux -distribusjoner så vel som av KDE, GNOME og Xfce skrivebordsmiljøer, blant andre. Funksjonaliteten som tidligere er nedfelt i HAL, har blitt integrert i udev selv, eller flyttet til separat programvare som udisks og upower .
- udev gir tilgang på lavt nivå til Linux-enhetstreet. Lar programmer oppregne enheter og deres egenskaper og få varsler når enheter kommer og går.
- dbus er et rammeverk for å la programmer kommunisere med hverandre, sikkert, pålitelig og med et objektorientert programmeringsgrensesnitt på høyt nivå.
- udisks (tidligere kjent som DeviceKit-disks) er en demon som sitter på toppen av libudev og andre kjernegrensesnitt og gir et grensesnitt på høyt nivå til lagringsenheter og er tilgjengelig via dbus til applikasjoner.
- upower (tidligere kjent som DeviceKit-power) er en demon som sitter på toppen av libudev og andre kjernegrensesnitt og gir et grensesnitt på høyt nivå til strømstyring og er tilgjengelig via dbus til applikasjoner.
- NetworkManager er en demon som sitter på toppen av libudev og andre kjernegrensesnitt (og et par andre demoner) og gir et grensesnitt på høyt nivå til nettverkskonfigurasjon og oppsett og er tilgjengelig via dbus til apper.
udev mottar meldinger fra kjernen, og sender dem videre til delsystemdemoner som for eksempel Network Manager. Applikasjoner snakker med Network Manager via D-Bus.
HAL er foreldet og brukes bare av eldre kode. Ubuntu 10.04 leveres uten HAL. Opprinnelig var en ny daemon DeviceKit planlagt å erstatte visse aspekter av HAL, men i mars 2009 ble DeviceKit avskrevet til fordel for å legge den samme koden til udev som en pakke: udev-statister, og noen funksjoner har nå flyttet til udev proper.
Historie
udev ble introdusert i Linux 2.5 . Linux -kjernen versjon 2.6.13 introduserte eller oppdaterte en ny versjon av uevent -grensesnittet. Et system som bruker en ny versjon av udev vil ikke starte opp med kjerner eldre enn 2.6.13 med mindre udev er deaktivert og en tradisjonell /dev -katalog brukes for enhetstilgang.
I april 2012 ble udevs kodebase slått sammen til systemd -kildetreet , noe som gjorde systemd 183 til den første versjonen som inkluderte udev. I oktober 2012 kritiserte Linus Torvalds Kay Sievers tilnærming til vedlikehold av udev og feilrettinger knyttet til fastvarelasting , og uttalte:
Ja, å gjøre det i kjernen er "mer robust". Men ikke spill spill, og stopp løgnen. Det er mer robust fordi vi har vedlikeholdere som bryr seg, og fordi vi vet at regresjoner ikke er noe vi kan spille raskt og løst med. Hvis noe går i stykker, og vi ikke vet hva som er riktig løsning for bruddet, tilbakestiller vi det som gikk i stykker. Så ja, vi har det klart bedre å gjøre det i kjernen. Ikke fordi fastvareinnlasting ikke kan utføres i brukerområdet. Men rett og slett fordi udev -vedlikehold siden Greg ga det opp har gått nedoverbakke.
I 2012 opprettet Gentoo Linux -prosjektet en gaffel med systemds udev -kodebase for å unngå avhengighet av systemd -arkitekturen. Den resulterende gaffelen kalles eudev, og den gjør udev -funksjonalitet tilgjengelig uten systemd. Et uttalt mål med prosjektet er å holde eudev uavhengig av Linux -distribusjon eller init -system. Gentoo -prosjektet beskriver eudev slik:
eudev er en gaffel av systemd-udev med målet om å oppnå bedre kompatibilitet med eksisterende programvare som OpenRC og Upstart , eldre kjerner, forskjellige verktøykjeder og alt annet som kreves av brukere og forskjellige distribusjoner.
29. mai 2014 ble støtte for fastvarelasting via udev droppet fra systemd, ettersom det er besluttet at det er kjernens oppgave å laste fastvare. To dager senere foreslo Lennart Poettering at denne lappen ble utsatt til kdbus begynner å bli brukt av udev; på det tidspunktet var planen å bytte udev til å bruke kdbus som det underliggende meldingssystemet, og å bli kvitt userpace-to-userspace netlink-basert transport.
Forfattere
udev ble utviklet av Greg Kroah-Hartman og Kay Sievers , med mye hjelp fra blant andre Dan Stekloff .