Kā lietot Udev ierīces noteikšanai un pārvaldībai Linux


Udev (userspace/dev) ir Linux apakšsistēma ierīču dinamiskai noteikšanai un pārvaldībai kopš kodola versijas 2.6. Tas ir devfs un hotplug aizstājējs.

Tas dinamiski izveido vai noņem ierīces mezglus (ierīces draivera saskarni, kas failu sistēmā parādās tā, it kā tas būtu parasts fails, kas saglabāts direktorijā/dev) palaišanas laikā vai ja ierīci pievienojat vai noņemat no tās sistēma. Pēc tam tā izplata informāciju par ierīci vai maina tās stāvokli lietotāja telpā.

Tās funkcija ir 1) piegādāt sistēmas lietojumprogrammām ierīces notikumus, 2) pārvaldīt ierīču mezglu atļaujas un 3) direktorijā/dev var izveidot noderīgas saites, lai piekļūtu ierīcēm, vai pat pārdēvēt tīkla saskarnes.

Viens no udev plusi ir tas, ka tas var izmantot pastāvīgus ierīču nosaukumus, lai garantētu konsekventu ierīču nosaukšanu atkārtotā palaišanā, neskatoties uz to secību. Šī funkcija ir noderīga, jo kodols vienkārši piešķir neparedzamus ierīču nosaukumus, pamatojoties uz atklāšanas kārtību.

Šajā rakstā mēs uzzināsim, kā izmantot Udev ierīces noteikšanai un pārvaldībai Linux sistēmās. Ņemiet vērā, ka lielākā daļa, ja ne visi mūsdienu Linux izplatījumi tiek piegādāti ar Udev kā noklusējuma instalācijas daļu.

Uzziniet Udev pamatus Linux

UDEV dēmons, systemd-udevd (vai systemd-udevd.service) sazinās ar kodolu un saņem ierīces uevents tieši no tā katru reizi, kad ierīci pievienojat vai noņemat no tās, vai ierīce maina savu stāvokli.

Udev pamatā ir likumi - tie ir elastīgi un ļoti spēcīgi. Katrs saņemtais ierīces notikums tiek salīdzināts ar noteikumu kopumu, kas nolasīts no failiem, kas atrodas mapēs /lib/udev/rules.d un /run/udev/rules.d.

Ierīces apstrādei mapē /etc/udev/rules.d/ varat ierakstīt pielāgotu noteikumu failus (failiem jābeidzas ar paplašinājumu .rules ). Ņemiet vērā, ka kārtulu failiem šajā direktorijā ir visaugstākā prioritāte.

Lai izveidotu ierīces mezgla failu, udev ir jāidentificē ierīce, izmantojot noteiktus atribūtus, piemēram, etiķeti, sērijas numuru, tā izmantoto galveno un mazo numuru, kopnes ierīces numuru un daudz ko citu. Šo informāciju eksportē sysfs failu sistēma.

Ikreiz, kad ierīci pievienojat sistēmai, kodols to atklāj un inicializē, un mapē/sys/directory tiek izveidots direktorijs ar ierīces nosaukumu, kurā tiek saglabāti ierīces atribūti.

Galvenais udev konfigurācijas fails ir /etc/udev/udev.conf, un, lai kontrolētu udev dēmona izpildlaika uzvedību, varat izmantot utilītu udevadm.

Lai parādītu saņemtos kodola notikumus (uevents) un udev notikumus (kurus udev izsūta pēc noteikumu apstrādes), palaidiet udevadm ar monitora komandu. Pēc tam pievienojiet ierīci savai sistēmai un no termināļa skatieties, kā notiek ierīces notikums.

Šajā ekrānuzņēmumā ir parādīts ADD notikuma fragments pēc USB zibatmiņas diska pievienošanas testa sistēmai:

$ udevadm monitor 

Lai atrastu USB diskam piešķirto nosaukumu, izmantojiet utilītu lsblk, kas nolasa sysfs failu sistēmu un udev db, lai apkopotu informāciju par apstrādātām ierīcēm.

 
$ lsblk

No iepriekšējās komandas izvades USB diska nosaukums ir sdb1 (absolūtajam ceļam jābūt /dev/sdb1 ). Lai vaicātu ierīces atribūtus no udev datu bāzes, izmantojiet komandu info.

$ udevadm info /dev/sdb1

Kā strādāt ar Udev noteikumiem Linux

Šajā sadaļā mēs īsi apspriedīsim, kā rakstīt udev noteikumus. Noteikums sastāv no komatiem atdalīta viena vai vairāku atslēgu vērtību pāru saraksta. Noteikumi ļauj pārsaukt ierīces mezglu no noklusējuma nosaukuma, mainīt ierīces mezgla atļaujas un īpašumtiesības, aktivizēt programmas vai skripta izpildi, kad tiek izveidots vai izdzēsts ierīces mezgls.

Mēs uzrakstīsim vienkāršu kārtulu, kā palaist skriptu, kad tiek pievienota USB ierīce un kad tā tiek noņemta no darbojošās sistēmas.

Sāksim ar divu skriptu izveidi:

$ sudo vim /bin/device_added.sh

Pievienojiet šīs rindiņas skriptā device_added.sh .

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

Atveriet otro skriptu.

$ sudo vim /bin/device_removed.sh

Pēc tam pievienojiet šīs rindiņas skriptam device_removed.sh .

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

Saglabājiet failus, aizveriet un padariet abus skriptus izpildāmus.

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

Pēc tam izveidosim kārtulu, lai aktivizētu iepriekš minēto skriptu izpildi, ko sauc par /etc/udev/rules.d/80-test.rules.

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

Pievienojiet tajā šos divus šādus noteikumus.

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"

kur:

  • "==" : ir operators, kas salīdzina vienlīdzību.
  • "+ =" : operators, kurš pievieno vērtību atslēgai, kurai ir ierakstu saraksts.
  • APAKŠSISTĒMA: atbilst notikuma ierīces apakšsistēmai.
  • ACTION: atbilst pasākuma darbības nosaukumam.
  • ENV {DEVTYPE}: atbilst ierīces rekvizīta vērtībai, šajā gadījumā ierīces tipam.
  • RUN: norāda programmu vai skriptu, kas jāizpilda kā daļa no notikumu apstrādes.

Saglabājiet failu un aizveriet to. Pēc tam kā sakne sakiet systemd-udevd, lai pārlādētu kārtulas failus (tas arī pārlādē citas datu bāzes, piemēram, kodola moduļa indeksu), palaižot.

$ sudo udevadm control --reload

Tagad pievienojiet USB disku savai mašīnai un pārbaudiet, vai ir izpildīts skripts device_added.sh . Vispirms fails scripts.log jāizveido zem/tmp.

$ ls -l /tmp/scripts.log

Tad failā jābūt ierakstam, piemēram, “USB ierīce ir noņemta datumā_laiks”, kā parādīts ekrānuzņēmumā.

$ cat /tmp/scripts.log

Lai iegūtu papildinformāciju par udev kārtulu rakstīšanu un udev pārvaldīšanu, skatiet udev un udevadm manuālos ierakstus, palaižot:

$ man udev
$ man udevadm

Udev ir ievērojams ierīču pārvaldnieks, kas nodrošina dinamisku ierīču mezglu iestatīšanas direktorijā /dev . Tas nodrošina, ka ierīces tiek konfigurētas, tiklīdz tās tiek pievienotas un atklātas. Tas izplata informāciju par apstrādāto ierīci vai maina tās stāvokli lietotāja telpā.

Ja jums ir kādi jautājumi vai domas, ko dalīties par šo tēmu, izmantojiet atsauksmju veidlapu.