Kako koristiti Udev za otkrivanje i upravljanje uređajima u Linuxu


Udev (korisnički prostor /dev) je Linux podsustav za dinamičko otkrivanje i upravljanje uređajima, od verzije kernela 2.6. To je zamjena za devfs i hotplug.

Dinamički stvara ili uklanja čvorove uređaja (sučelje za upravljački program uređaja koji se pojavljuje u datotečnom sustavu kao da je obična datoteka, pohranjena u direktoriju /dev) tijekom pokretanja ili ako dodate uređaj u sustav ili uklanjanje uređaja iz sustava. Zatim širi informacije o uređaju ili mijenja njegovo stanje u korisnički prostor.

Njegova funkcija je 1) snabdijevanje aplikacija sustava događajima uređaja, 2) upravljanje dopuštenjima čvorova uređaja i 3) stvaranje korisnih simboličkih veza u /dev direktoriju za pristup uređajima ili čak preimenovanje mrežnih sučelja .

Jedna od prednosti udev-a je ta da može koristiti postojana imena uređaja kako bi zajamčila dosljedno imenovanje uređaja tijekom ponovnog pokretanja, unatoč njihovom redoslijedu otkrivanja. Ova značajka je korisna jer kernel jednostavno dodjeljuje nepredvidiva imena uređaja na temelju redoslijeda otkrivanja.

U ovom ćemo članku naučiti kako koristiti Udev za otkrivanje i upravljanje uređajima na Linux sustavima. Imajte na umu da većina, ako ne i sve mainstream moderne Linux distribucije dolaze s Udev kao dijelom zadane instalacije.

Naučite osnove Udeva u Linuxu

Demon udev, systemd-udevd (ili systemd-udevd.service) komunicira s kernelom i prima uevents uređaja > izravno iz njega svaki put kada dodate ili uklonite uređaj iz sustava, ili kada uređaj promijeni svoje stanje.

Udev temelji se na pravilima – njegova su pravila fleksibilna i vrlo moćna. Svaki primljeni događaj uređaja uspoređuje se sa skupom pravila pročitanih iz datoteka koje se nalaze u /lib/udev/rules.d i /run/udev/rules.d.

Datoteke prilagođenih pravila možete pisati u /etc/udev/rules.d/ direktorij (datoteke bi trebale završavati ekstenzijom .rules) za obradu uređaja. Imajte na umu da datoteke s pravilima u ovom direktoriju imaju najveći prioritet.

Da bi stvorio datoteku čvora uređaja, udev treba identificirati uređaj pomoću određenih atributa kao što su oznaka, serijski broj, njegov glavni i pomoćni broj koji se koristi, broj uređaja sabirnice itd. mnogo više. Ove informacije izvozi datotečni sustav sysfs.

Kad god povežete uređaj sa sustavom, kernel ga detektira i inicijalizira, a direktorij s nazivom uređaja stvara se pod /sys/ direktorijom koji pohranjuje atribute uređaja.

Glavna konfiguracijska datoteka za udev je /etc/udev/udev.conf, a za kontrolu ponašanja udev demona u vremenu izvođenja, možete koristiti uslužni program udevadm.

Za prikaz primljenih događaja jezgre (uevents) i udev događaja (koje udev šalje nakon obrade pravila), pokrenite udevadm s naredbom monitor. Zatim spojite uređaj na svoj sustav i s terminala gledajte kako se rukuje događajem uređaja.

Sljedeća snimka zaslona prikazuje izvadak događaja ADD nakon spajanja USB flash diska na testni sustav:

udevadm monitor 

Da biste pronašli naziv dodijeljen vašem USB disku, upotrijebite uslužni program lsblk koji čita datotečni sustav sysfs i udev db za prikupljanje informacija o obrađenim uređajima.

 
lsblk

Iz izlaza prethodne naredbe, USB disk je nazvan sdb1 (apsolutna staza bi trebala biti /dev/sdb1). Za upit o atributima uređaja iz baze podataka udev upotrijebite naredbu info.

udevadm info /dev/sdb1

Kako raditi s Udev pravilima u Linuxu

U ovom ćemo odjeljku ukratko raspravljati o tome kako napisati udevpravila. Pravilo se sastoji od popisa jednog ili više parova ključ-vrijednost odvojenih zarezima. Pravila vam omogućuju preimenovanje čvora uređaja prema zadanom nazivu, izmjenu dopuštenja i vlasništva nad čvorom uređaja, pokretanje izvršavanja programa ili skripte kada se čvor uređaja stvori ili izbriše, između ostalog.

Napisat ćemo jednostavno pravilo za pokretanje skripte kada se USB uređaj doda i kada se ukloni iz pokrenutog sustava.

Započnimo stvaranjem dvije skripte:

sudo vim /bin/device_added.sh

Dodajte sljedeće retke u skriptu device_added.sh.

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

Otvorite drugu skriptu.

sudo vim /bin/device_removed.sh

Zatim dodajte sljedeće retke u skriptu device_removed.sh.

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

Spremite datoteke, zatvorite i učinite obje skripte izvršnima.

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

Zatim, stvorimo pravilo za pokretanje izvršavanja gornjih skripti, pod nazivom /etc/udev/rules.d/80-test.rules.

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

Dodajte ova dva sljedeća pravila u to.

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"

gdje :

  • "==": je operator za usporedbu radi jednakosti.
  • "+=": je operator za dodavanje vrijednosti ključu koji sadrži popis unosa.
  • PODSUSTAV: odgovara podsustavu uređaja događaja.
  • ACTION: odgovara nazivu radnje događaja.
  • ENV{DEVTYPE}: odgovara vrijednosti svojstva uređaja, vrsti uređaja u ovom slučaju.
  • POKRENI: navodi program ili skriptu za izvršavanje kao dio rukovanja događajem.

Spremite datoteku i zatvorite je. Zatim kao root, recite systemd-udevd da ponovno učita datoteke pravila (ovo također ponovno učitava druge baze podataka kao što je indeks kernel modula), pokretanjem.

sudo udevadm control --reload

Sada spojite USB pogon na svoj stroj i provjerite je li skripta device_added.sh izvršena. Prije svega treba kreirati datoteku scripts.log pod /tmp.

ls -l /tmp/scripts.log

Tada bi datoteka trebala sadržavati unos kao što je “USB uređaj uklonjen u date_time”, kao što je prikazano na snimci zaslona.

cat /tmp/scripts.log

Za više informacija o tome kako napisati udev pravila i upravljati udev-om, pogledajte ručne unose udev i udevadm tako što ćete pokrenuti:

man udev
man udevadm
Sažetak

Udev je izvanredan upravitelj uređaja koji pruža dinamičan način postavljanja čvorova uređaja u direktoriju /dev. Osigurava da su uređaji konfigurirani čim se priključe i otkriju. Širi informacije o obrađenom uređaju ili promjenama njegovog stanja u korisnički prostor.

Ako imate pitanja ili razmišljanja o ovoj temi, upotrijebite obrazac za povratne informacije.