Udevin käyttäminen laitteen havaitsemiseen ja hallintaan Linuxissa


Udev (käyttäjätila /dev) on Linux-alijärjestelmä dynaamiseen laitteiden havaitsemiseen ja hallintaan ytimen versiosta 2.6 lähtien. Se korvaa devfs:n ja hotplugin.

Se luo tai poistaa dynaamisesti laitesolmuja (liitäntä laiteohjaimeen, joka näkyy tiedostojärjestelmässä ikään kuin se olisi tavallinen tiedosto, joka on tallennettu /dev-hakemistoon) käynnistyksen yhteydessä tai jos lisäät laitteesta tai poista laite järjestelmästä. Sitten se levittää tietoa laitteesta tai muuttaa sen tilaa käyttäjätilaan.

Sen tehtävänä on 1) toimittaa järjestelmäsovelluksille laitetapahtumia, 2) hallita laitesolmujen käyttöoikeuksia ja 3) luoda hyödyllisiä symbolilinkkejä /dev-hakemistoon laitteisiin pääsyä varten tai jopa nimetä verkkoliitäntöjä uudelleen. .

Yksi udevin eduista on, että se voi käyttää pysyviä laitenimiä takaamaan laitteiden johdonmukaisen nimeämisen uudelleenkäynnistyksen aikana niiden löytämisjärjestyksestä huolimatta. Tämä ominaisuus on hyödyllinen, koska ydin yksinkertaisesti määrittää arvaamattomia laitenimiä hakujärjestyksen perusteella.

Tässä artikkelissa opimme käyttämään Udevia laitteiden tunnistamiseen ja hallintaan Linux-järjestelmissä. Huomaa, että useimmat, ellei kaikki valtavirran nykyaikaiset Linux-jakelut sisältävät Udevin osana oletusasennusta.

Opi Udevin perusteet Linuxissa

udev-daemon, systemd-udevd (tai systemd-udevd.service) kommunikoi ytimen kanssa ja vastaanottaa laitteen uevents > suoraan siitä aina, kun lisäät tai poistat laitteen järjestelmään tai laite muuttaa tilaansa.

Udev perustuu sääntöihin – sen säännöt ovat joustavia ja erittäin tehokkaita. Jokainen vastaanotettu laitetapahtuma vertaillaan sääntöjoukkoa, joka luetaan tiedostoista /lib/udev/rules.d ja /run/udev/rules.d.

Voit kirjoittaa mukautettuja sääntötiedostoja /etc/udev/rules.d/-hakemistoon (tiedostojen lopussa tulee olla .rules) laitteen käsittelemiseksi. Huomaa, että tämän hakemiston sääntötiedostoilla on korkein prioriteetti.

Luodakseen laitesolmutiedoston udevin on tunnistettava laite käyttämällä tiettyjä attribuutteja, kuten etiketti, sarjanumero, käytetty pää- ja sivunumero, väylälaitteen numero ja niin edelleen. paljon enemmän. sysfs-tiedostojärjestelmä vie nämä tiedot.

Aina kun yhdistät laitteen järjestelmään, ydin havaitsee ja alustaa sen, ja laitteen attribuutit tallentavaan hakemistoon /sys/ luodaan hakemisto laitteen nimellä.

Udevin pääasetustiedosto on /etc/udev/udev.conf, ja voit hallita udev-daemonin ajonaikaista toimintaa udevadm-apuohjelmalla.

Näytä vastaanotetut ytimen tapahtumat (uevents) ja udev-tapahtumat (jotka udev lähettää säännön käsittelyn jälkeen) suorittamalla udevadm > monitorikomennolla. Liitä sitten laite järjestelmääsi ja katso päätteestä, kuinka laitetapahtuma käsitellään.

Seuraavassa kuvakaappauksessa näkyy ote LISÄÄ-tapahtumasta sen jälkeen, kun USB-flash-levy on liitetty testijärjestelmään:

udevadm monitor 

Löytääksesi USB-levyllesi määritetyn nimen, käytä lsblk-apuohjelmaa, joka lukee sysfs-tiedostojärjestelmän ja udev db kerätäkseen tietoja käsitellyistä laitteista.

 
lsblk

Edellisen komennon tulosteesta USB-levyn nimi on sdb1 (absoluuttisen polun tulee olla /dev/sdb1). Voit kysyä laitemääritteitä udev-tietokannasta info-komennolla.

udevadm info /dev/sdb1

Kuinka työskennellä Udev-sääntöjen kanssa Linuxissa

Tässä osiossa keskustelemme lyhyesti udev-sääntöjen kirjoittamisesta. Sääntö koostuu yhden tai useamman avainarvoparin pilkuilla erotetusta luettelosta. Säännöillä voit muun muassa nimetä laitesolmun uudelleen oletusnimestä, muokata laitesolmun käyttöoikeuksia ja omistajuutta, käynnistää ohjelman tai komentosarjan suorittamisen, kun laitesolmu luodaan tai poistetaan.

Kirjoitamme yksinkertaisen säännön skriptin käynnistämiseksi, kun USB-laite lisätään ja kun se poistetaan käynnissä olevasta järjestelmästä.

Aloitetaan luomalla kaksi skriptiä:

sudo vim /bin/device_added.sh

Lisää seuraavat rivit device_added.sh-skriptiin.

#!/bin/bash
echo "USB device added at $(date)" >>/tmp/scripts.log

Avaa toinen skripti.

sudo vim /bin/device_removed.sh

Lisää sitten seuraavat rivit device_removed.sh-skriptiin.

#!/bin/bash
echo "USB device removed  at $(date)" >>/tmp/scripts.log

Tallenna tiedostot, sulje ja tee molemmat skriptit suoritettaviksi.

sudo chmod +x /bin/device_added.sh
sudo chmod +x /bin/device_removed.sh

Luodaan seuraavaksi sääntö, joka käynnistää yllä olevien komentosarjojen suorittamisen, nimeltä /etc/udev/rules.d/80-test.rules.

vim /etc/udev/rules.d/80-test.rules

Lisää siihen nämä kaksi seuraavaa sääntöä.

SUBSYSTEM=="usb", ACTION=="add", ENV{DEVTYPE}=="usb_device",  RUN+="/bin/device_added.sh"
SUBSYSTEM=="usb", ACTION=="remove", ENV{DEVTYPE}=="usb_device", RUN+="/bin/device_removed.sh"

missä :

  • "==": on operaattori, jota voidaan verrata tasa-arvoon.
  • "+=": on operaattori, joka lisää arvon avaimeen, joka sisältää merkintäluettelon.
  • ALAJÄRJESTELMÄ: vastaa tapahtumalaitteen alijärjestelmää.
  • TOIMINTO: vastaa tapahtuman toiminnon nimeä.
  • ENV{DEVTYPE}: vastaa laitteen ominaisuuden arvoa, tässä tapauksessa laitetyyppiä.
  • SUORITA: määrittää ohjelman tai komentosarjan, joka suoritetaan osana tapahtumankäsittelyä.

Tallenna tiedosto ja sulje se. Pyydä sitten pääkäyttäjänä systemd-udevd lataamaan sääntötiedostot uudelleen (tämä lataa myös muut tietokannat, kuten ydinmoduulihakemiston) suorittamalla.

sudo udevadm control --reload

Liitä nyt USB-asema tietokoneeseesi ja tarkista, suoritettiinko komentosarja device_added.sh. Ensinnäkin tiedosto scripts.log tulee luoda kohtaan /tmp.

ls -l /tmp/scripts.log

Sitten tiedostossa pitäisi olla merkintä, kuten "USB-laite poistettu päivämäärän_aikana", kuten kuvakaappauksessa näkyy.

cat /tmp/scripts.log

Lisätietoja udev-sääntöjen kirjoittamisesta ja udev:n hallinnasta saat käsikirjasta udev ja udevadm suorittamalla:

man udev
man udevadm
Yhteenveto

Udev on merkittävä laitehallinta, joka tarjoaa dynaamisen tavan määrittää laitesolmut /dev-hakemistoon. Se varmistaa, että laitteet määritetään heti, kun ne on kytketty ja löydetty. Se levittää tietoa käsitellystä laitteesta tai sen tilan muutoksista käyttäjätilaan.

Jos sinulla on kysyttävää tai ajatuksia tästä aiheesta, käytä palautelomaketta.