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


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

On dinamički kreira ili uklanja čvorove uređaja (sučelje za upravljački program uređaja koji se pojavljuje u sistemu datoteka kao da je obična datoteka, pohranjena u /dev direktoriju) prilikom pokretanja ili ako dodate uređaj na ili ukloniti uređaj iz sistema. Zatim širi informacije o uređaju ili mijenja njegovo stanje u korisnički prostor.

Njegova funkcija je da 1) snabdijeva sistemske aplikacije događajima uređaja, 2) upravlja dozvolama čvorova uređaja i 3) može kreirati korisne simbolične veze u /dev direktoriju za pristup uređajima, ili čak preimenovati mrežna sučelja .

Jedna od prednosti udeva je to što može koristiti trajna imena uređaja kako bi garantirao dosljedno imenovanje uređaja nakon ponovnog pokretanja, uprkos njihovom redoslijedu otkrivanja. Ova funkcija je korisna jer kernel jednostavno dodeljuje nepredvidljiva imena uređaja na osnovu redosleda otkrivanja.

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

Naučite osnove Udeva u Linuxu

udev daemon, systemd-udevd (ili systemd-udevd.service) komunicira sa kernelom i prima u događaje uređaja > direktno iz njega svaki put kada dodate ili uklonite uređaj iz sistema, ili kada uređaj promijeni svoje stanje.

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

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

Da kreira datoteku čvora uređaja, udev treba identificirati uređaj koristeći određene atribute kao što su oznaka, serijski broj, njegov glavni i manji broj koji se koristi, broj uređaja sabirnice i tako mnogo više. Ove informacije izvozi sysfs sistem datoteka.

Kad god povežete uređaj sa sistemom, kernel ga detektuje i inicijalizira, a direktorij s imenom uređaja se kreira u /sys/ direktoriju koji pohranjuje atribute uređaja.

Glavna konfiguraciona datoteka za udev je /etc/udev/udev.conf, a da kontrolišete ponašanje udev demona u toku izvršavanja, možete koristiti uslužni program udevadm.

Za prikaz primljenih događaja (uevents) i udev događaja (koje udev šalje nakon obrade pravila), pokrenite udevadm > pomoću naredbe monitor. Zatim povežite uređaj sa svojim sistemom i gledajte sa terminala kako se obrađuje događaj uređaja.

Sljedeći snimak ekrana prikazuje izvod ADD događaja nakon povezivanja USB fleš diska na sistem za testiranje:

udevadm monitor 

Da biste pronašli naziv koji je dodijeljen vašem USB disku, koristite uslužni program lsblk koji čita sysfs sistem datoteka i udev db da prikupi informacije o obrađenim uređajima.

 
lsblk

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

udevadm info /dev/sdb1

Kako raditi s Udev pravilima u Linuxu

U ovom dijelu ćemo ukratko razgovarati o tome kako napisati udev pravila. Pravilo se sastoji od liste razdvojenih zarezima od jednog ili više parova ključ/vrijednost. Pravila vam omogućavaju da preimenujete čvor uređaja iz zadanog imena, izmijenite dozvole i vlasništvo nad čvorom uređaja, pokrenete izvršavanje programa ili skripte kada se čvor uređaja kreira ili izbriše, između ostalog.

Napisaćemo jednostavno pravilo za pokretanje skripte kada se doda USB uređaj i kada se ukloni iz sistema koji radi.

Počnimo kreiranjem dvije skripte:

sudo vim /bin/device_added.sh

Dodajte sljedeće redove 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 redove u skriptu device_removed.sh.

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

Sačuvajte datoteke, zatvorite i učinite obje skripte izvršnim.

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

Zatim kreirajmo pravilo koje pokreće izvršavanje 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 poređenje radi jednakosti.
  • "+=": je operator za dodavanje vrijednosti ključu koji sadrži listu unosa.
  • SUBSYSTEM: odgovara podsistemu uređaja za događaje.
  • AKCIJA: odgovara nazivu radnje događaja.
  • ENV{DEVTYPE}: podudara se s vrijednošću svojstva uređaja, tipom uređaja u ovom slučaju.
  • RUN: specificira program ili skriptu za izvršavanje kao dio rukovanja događajima.

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

sudo udevadm control --reload

Sada povežite USB disk na vašu mašinu i provjerite da li je skripta device_added.sh izvršena. Prije svega, fajl scripts.log bi trebao biti kreiran pod /tmp.

ls -l /tmp/scripts.log

Tada bi datoteka trebala imati unos kao što je “USB uređaj uklonjen u date_time”, kao što je prikazano na snimku ekrana.

cat /tmp/scripts.log

Za više informacija o tome kako pisati udev pravila i upravljati udevom, 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 /dev direktoriju. Osigurava da se uređaji konfiguriraju čim se uključe i otkriju. On širi informacije o obrađenom uređaju ili mijenja njegovo stanje, u korisnički prostor.

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