Kif tuża Udev għal Sejbien u Ġestjoni tal-Apparat fil-Linux


Udev (userspace /dev) hija sottosistema Linux għall-iskoperta u l-ġestjoni ta 'apparat dinamiku, mill-verżjoni tal-kernel 2.6. Huwa sostituzzjoni ta 'devfs u hotplug.

Din toħloq jew tneħħi b'mod dinamiku nodi tal-apparat (interface għal sewwieq tal-apparat li jidher f'sistema ta' fajls bħallikieku kien fajl ordinarju, maħżun taħt id-direttorju /dev) fil-ħin tal-boot jew jekk iżżid apparat ma' jew tneħħi apparat minn is-sistema. Imbagħad jippropaga informazzjoni dwar apparat jew jibdel l-istat tiegħu fl-ispazju tal-utent.

Il-funzjoni tagħha hija li 1) tforni l-applikazzjonijiet tas-sistema b'avvenimenti tal-apparat, 2) timmaniġġja l-permessi tan-nodi tal-apparat, u 3) tista 'toħloq symlinks utli fid-direttorju/dev għall-aċċess tal-apparati, jew saħansitra tibdel l-isem tal-interfaces tan-netwerk.

Wieħed mill-vantaġġi ta 'udev huwa li jista' juża ismijiet ta 'apparat persistenti biex jiggarantixxi ismijiet konsistenti ta' apparati matul reboots, minkejja l-ordni ta 'skoperta tagħhom. Din il-karatteristika hija utli għaliex il-qalba sempliċement tassenja ismijiet ta 'apparat imprevedibbli bbażati fuq l-ordni ta' skoperta.

F'dan l-artikolu, se nitgħallmu kif nużaw Udev għall-iskoperta u l-ġestjoni tal-apparat fuq sistemi Linux. Innota li l-biċċa l-kbira jekk mhux id-distribuzzjonijiet moderni tal-Linux mainstream kollha jiġu ma 'Udev bħala parti mill-installazzjoni awtomatika.

Tgħallem il-Basics ta 'Udev fil-Linux

Id-demon udev, systemd-udevd (jew systemd-udevd.service) jikkomunika mal-kernel u jirċievi uevents tal-apparat direttament minnu kull darba li żżid jew tneħħi apparat mis-sistema, jew apparat jibdel l-istat tiegħu.

Udev huwa bbażat fuq regoli - ir-regoli huma flessibbli u qawwija ħafna. Kull avveniment ta' apparat riċevut jitqabbel mas-sett ta' regoli li jinqraw minn fajls li jinsabu f'/lib/udev/rules.d u /run/udev/rules.d.

Tista' tikteb fajls tar-regoli tad-dwana fid-direttorju /etc/udev/rules.d/ (il-fajls għandhom jispiċċaw bl-estensjoni .rules) biex tipproċessa apparat. Innota li l-fajls tar-regoli f'dan id-direttorju għandhom l-ogħla prijorità.

Biex toħloq fajl tan-node tal-apparat, udev jeħtieġ li jidentifika apparat billi juża ċerti attributi bħat-tikketta, in-numru tas-serje, in-numru maġġuri u minuri tiegħu użat, in-numru tal-apparat tax-xarabank u ħafna aktar. Din l-informazzjoni hija esportata mis-sistema tal-fajls sysfs.

Kull meta tqabbad apparat mas-sistema, il-kernel jiskoprih u jinizjalizzah, u jinħoloq direttorju bl-isem tal-apparat taħt id-direttorju /sys/ li jaħżen l-attributi tal-apparat.

Il-fajl tal-konfigurazzjoni prinċipali għal udev huwa /etc/udev/udev.conf, u biex tikkontrolla l-imġieba tar-runtime id-demon udev, tista' tuża l-utilità udevadm.

Biex turi avvenimenti tal-kernel riċevuti (uevents) u avvenimenti udev (li udev jibgħat wara l-ipproċessar tar-regoli), ħaddem udevadm bil-kmand tal-monitor. Imbagħad qabbad apparat mas-sistema tiegħek u ara, mit-terminal, kif l-avveniment tat-tagħmir jiġi mmaniġġjat.

Il-screenshot li ġejja turi silta ta' avveniment ADD wara li tqabbad USB flash disk mas-sistema tat-test:

$ udevadm monitor 

Biex issib l-isem assenjat lid-diska USB tiegħek, uża l-utilità lsblk li taqra s-sistema tal-fajls sysfs u l-udev db biex tiġbor informazzjoni dwar tagħmir ipproċessat.

 
$ lsblk

Mill-output tal-kmand preċedenti, id-diska USB hija msemmija sdb1 (passaġġ assolut għandu jkun /dev/sdb1). Biex tistaqsi l-attributi tat-tagħmir mid-database udev, uża l-kmand info.

$ udevadm info /dev/sdb1

Kif taħdem mar-Regoli Udev fil-Linux

F'din it-taqsima, ser niddiskutu fil-qosor kif tikteb ir-regoli udev. Regola tinkludi lista separata b'virgola ta' par ta' valur-ċavetta wieħed jew aktar. Ir-regoli jippermettulek li tibdel l-isem ta 'node ta' apparat mill-isem default, timmodifika l-permessi u s-sjieda ta 'node ta' apparat, tixpruna l-eżekuzzjoni ta 'programm jew skript meta node ta' apparat jinħoloq jew jitħassar, fost oħrajn.

Aħna se niktbu regola sempliċi biex iniedu script meta jiżdied apparat USB u meta jitneħħa mis-sistema li taħdem.

Nibdew billi noħolqu ż-żewġ skripts:

$ sudo vim /bin/device_added.sh

Żid il-linji li ġejjin fl-iskrittura device_added.sh.

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

Iftaħ it-tieni skript.

$ sudo vim /bin/device_removed.sh

Imbagħad żid il-linji li ġejjin fl-iskrittura device_removed.sh.

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

Issejvja l-fajls, agħlaq u agħmel iż-żewġ skripts eżekutibbli.

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

Sussegwentement, ejja noħolqu regola biex tixpruna l-eżekuzzjoni tal-iskripts ta 'hawn fuq, imsejħa /etc/udev/rules.d/80-test.rules.

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

Żid dawn iż-żewġ regoli li ġejjin fiha.

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"

fejn:

  • ==\: huwa operatur li għandu jqabbel għall-ugwaljanza.
  • \+=\: huwa operatur li jżid il-valur ma' ċavetta li żżomm lista ta' entrati.
  • SUBSISTEMA: taqbel mas-subsistema tal-apparat tal-avveniment.
  • AZZJONI: taqbel mal-isem tal-azzjoni tal-avveniment.
  • ENV{DEVTYPE}: taqbel ma' valur ta' proprjetà ta' apparat, tip ta' apparat f'dan il-każ.
  • RUN: jispeċifika programm jew skript li għandu jiġi eżegwit bħala parti mill-immaniġġjar tal-avveniment.

Issejvja l-fajl u agħlaqha. Imbagħad bħala għerq, għid lil systemd-udevd biex jerġa' jgħabbi l-fajls tar-regoli (dan jerġa' jgħabbi wkoll databases oħra bħall-indiċi tal-modulu tal-kernel), billi taħdem.

$ sudo udevadm control --reload

Issa qabbad USB drive fil-magna tiegħek u iċċekkja jekk l-iskript device_added.sh kienx esegwit. L-ewwelnett il-fajl scripts.log għandu jinħoloq taħt /tmp.

$ ls -l /tmp/scripts.log

Imbagħad il-fajl għandu jkollu dħul bħal \apparat USB mneħħi f'date_time, kif muri fil-screenshot.

$ cat /tmp/scripts.log

Għal aktar informazzjoni dwar kif tikteb ir-regoli udev u timmaniġġja udev, ikkonsulta l-entrati manwali udev u udevadm rispettivament, billi tħaddem:

$ man udev
$ man udevadm

Udev huwa maniġer tal-apparat notevoli li jipprovdi mod dinamiku ta' kif jiġu stabbiliti nodi tal-apparat fid-direttorju /dev. Jiżgura li l-apparati jiġu kkonfigurati hekk kif jiġu pplaggjati u skoperti. Tippropaga informazzjoni dwar apparat ipproċessat jew bidliet fl-istat tiegħu, fl-ispazju tal-utent.

Jekk għandek xi mistoqsijiet jew ħsibijiet x'taqsam dwar dan is-suġġett, uża l-formola ta' feedback.