Kako uporabljati Udev za odkrivanje in upravljanje naprav v Linuxu


Udev (uporabniški prostor /dev) je podsistem Linux za dinamično odkrivanje in upravljanje naprav, od različice jedra 2.6. To je zamenjava devfs in hotplug.

Dinamično ustvarja ali odstranjuje vozlišča naprave (vmesnik do gonilnika naprave, ki se v datotečnem sistemu prikaže kot navadna datoteka, shranjena v imeniku /dev) ob zagonu ali če napravo dodate ali odstranite iz sistem. Nato razširi informacije o napravi ali spremeni stanje v uporabniški prostor.

Njegova funkcija je, da 1) oskrbi sistemske aplikacije z dogodki v napravi, 2) upravlja dovoljenja vozlišč naprav in 3) lahko ustvari uporabne simbolne povezave v imeniku /dev za dostop do naprav ali celo preimenuje omrežne vmesnike.

Ena od prednosti udev je, da lahko uporablja trajna imena naprav, da zagotovi dosledno poimenovanje naprav pri ponovnem zagonu, kljub vrstnemu redu odkrivanja. Ta funkcija je uporabna, ker jedro preprosto dodeli nepredvidljiva imena naprav glede na vrstni red odkrivanja.

V tem članku se bomo naučili, kako uporabljati Udev za odkrivanje in upravljanje naprav v sistemih Linux. Upoštevajte, da večina, če ne vse glavne distribucije sodobnega Linuxa, prihajajo z Udevom kot del privzete namestitve.

Naučite se osnov Udeva v Linuxu

Demon udev, systemd-udevd (ali systemd-udevd.service) komunicira z jedrom in sprejema dogodke naprave neposredno od njega vsakič, ko napravo dodate ali odstranite iz sistema, ali pa naprava spremeni stanje.

Udev temelji na pravilih - njegova pravila so prilagodljiva in zelo močna. Vsak prejeti dogodek naprave se ujema z nizom pravil, prebranih iz datotek v /lib/udev/rules.d in /run/udev/rules.d.

Datoteke s pravili po meri lahko napišete v imenik /etc/udev/rules.d/ (datoteke se morajo končati z razširitvijo .rules ) za obdelavo naprave. Upoštevajte, da imajo datoteke pravil v tem imeniku najvišjo prednost.

Za ustvarjanje datoteke vozlišča naprave mora udev identificirati napravo z uporabo določenih atributov, kot so oznaka, serijska številka, njena glavna in manjša uporabljena številka, številka naprave vodila in še veliko več. Te podatke izvozi datotečni sistem sysfs.

Kadar koli napravo povežete s sistemom, jo jedro zazna in inicializira, v imeniku/sys/pa se ustvari imenik z imenom naprave, v katerem so shranjeni atributi naprave.

Glavna konfiguracijska datoteka za udev je /etc/udev/udev.conf, za nadzor vedenja med izvajanjem pa demon udev, lahko uporabite pripomoček udevadm.

Za prikaz prejetih dogodkov jedra (uevents) in udev (ki jih udev pošlje po obdelavi pravila), zaženite udevadm z ukazom monitor. Nato priključite napravo v sistem in s terminala opazujte, kako se obravnava dogodek v napravi.

Naslednji posnetek zaslona prikazuje odlomek dogodka ADD po priključitvi bliskovnega pogona USB na preskusni sistem:

$ udevadm monitor 

Če želite poiskati ime, dodeljeno vašemu disku USB, uporabite pripomoček lsblk, ki bere datotečni sistem sysfs in udev db za zbiranje podatkov o obdelanih napravah.

 
$ lsblk

Glede na izhod prejšnjega ukaza se disk USB imenuje sdb1 (absolutna pot mora biti /dev/sdb1 ). Če želite poizvedovati o atributih naprave iz baze udev, uporabite ukaz info.

$ udevadm info /dev/sdb1

Kako delati s pravili Udev v Linuxu

V tem razdelku bomo na kratko razpravljali o tem, kako napisati pravila udev. Pravilo obsega seznam enega ali več parov ključ-vrednost, ločenih z vejicami. Pravila vam omogočajo, da preimenujete vozlišče naprave iz privzetega imena, spremenite dovoljenja in lastništvo vozlišča naprave, sprožite izvajanje programa ali skripta, ko med drugim ustvarite ali izbrišete vozlišče naprave.

Napisali bomo preprosto pravilo za zagon skripta ob dodajanju naprave USB in odstranitvi iz delujočega sistema.

Začnimo z ustvarjanjem dveh skriptov:

$ sudo vim /bin/device_added.sh

V skript device_added.sh dodajte naslednje vrstice.

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

Odprite drugi skript.

$ sudo vim /bin/device_removed.sh

Nato v skript device_removed.sh dodajte naslednje vrstice.

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

Shranite datoteke, zaprite in nastavite oba skripta.

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

Nato ustvarimo pravilo za sprožitev zgornjih skriptov, imenovano /etc/udev/rules.d/80-test.rules.

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

Vanj dodajte ta dva naslednja pravila.

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"

kje:

  • \"== \" : je operater za primerjavo za enakost.
  • \"+= \" : je operater za dodajanje vrednosti ključu, ki vsebuje seznam vnosov.
  • SUBSISTEM: se ujema s podsistemom naprave za dogodke.
  • ACTION: se ujema z imenom dejanja dogodka.
  • ENV {DEVTYPE}: se ujema z vrednostjo lastnosti naprave, v tem primeru z vrsto naprave.
  • RUN: podaja program ali skript za izvajanje kot del obravnave dogodkov.

Shranite datoteko in jo zaprite. Nato kot root povejte systemd-udevd, naj znova naloži datoteke pravil (to naloži tudi druge baze podatkov, na primer indeks modula jedra), tako da zaženete.

$ sudo udevadm control --reload

Zdaj v napravo priključite pogon USB in preverite, ali je bil izveden skript device_added.sh . Najprej je treba datoteko scripts.log ustvariti pod /tmp.

$ ls -l /tmp/scripts.log

Nato mora imeti datoteka vnos, kot je\"Naprava USB odstranjena ob date_time", kot je prikazano na posnetku zaslona.

$ cat /tmp/scripts.log

Za več informacij o tem, kako napisati pravila udev in upravljati udev, si oglejte ročne vnose udev in udevadm tako, da zaženete:

$ man udev
$ man udevadm

Udev je izjemen upravitelj naprav, ki ponuja dinamičen način nastavitve vozlišč naprav v imeniku /dev . Zagotavlja, da so naprave konfigurirane takoj, ko so priključene in odkrite. Razširi informacije o obdelani napravi ali spremeni njeno stanje v uporabniški prostor.

Če imate kakršna koli vprašanja ali razmišljanja o tej temi, uporabite obrazec za povratne informacije.