Jinsi ya kutumia Udev kwa Utambuzi na Usimamizi wa Kifaa katika Linux


Udev (userspace /dev) ni mfumo mdogo wa Linux wa ugunduzi na usimamizi wa kifaa chenye nguvu, tangu toleo la kernel 2.6. Ni uingizwaji wa devfs na hotplug.

Inaunda au kuondoa nodi za kifaa (kiolesura cha kiendeshi cha kifaa kinachoonekana kwenye mfumo wa faili kana kwamba ni faili ya kawaida, iliyohifadhiwa chini ya saraka ya /dev) wakati wa kuwasha au ukiongeza kifaa au kuondoa kifaa kutoka. mfumo. Kisha hueneza maelezo kuhusu kifaa au kubadilisha hali yake hadi nafasi ya mtumiaji.

Kazi yake ni 1) kusambaza programu za mfumo na matukio ya kifaa, 2) kudhibiti ruhusa za nodi za kifaa, na 3) inaweza kuunda ulinganifu muhimu katika saraka ya /dev ya kufikia vifaa, au hata kubadilisha jina la violesura vya mtandao.

Mojawapo ya faida za udev ni kwamba inaweza kutumia majina ya vifaa mara kwa mara ili kuhakikisha majina ya vifaa vinavyobadilika katika kuwashwa upya, licha ya utaratibu wao wa ugunduzi. Kipengele hiki ni muhimu kwa sababu kernel inapeana tu majina ya kifaa yasiyotabirika kulingana na mpangilio wa ugunduzi.

Katika makala hii, tutajifunza jinsi ya kutumia Udev kwa ugunduzi na usimamizi wa kifaa kwenye mifumo ya Linux. Kumbuka kuwa usambazaji mwingi wa Linux wa kisasa ikiwa sio wote wa kawaida huja na Udev kama sehemu ya usakinishaji chaguo-msingi.

Jifunze Misingi ya Udev kwenye Linux

Udev daemon, systemd-udevd (au systemd-udevd.service) huwasiliana na kernel na hupokea matukio ya kifaa moja kwa moja kutoka kwayo kila wakati unapoongeza au kuondoa kifaa kutoka kwa mfumo, au kifaa kubadilisha hali yake.

Udev inategemea sheria - sheria zake ni rahisi na zina nguvu sana. Kila tukio la kifaa kilichopokelewa linalinganishwa na seti ya sheria zilizosomwa kutoka kwa faili zilizo katika /lib/udev/rules.d na /run/udev/rules.d.

Unaweza kuandika faili za sheria maalum katika saraka /etc/udev/rules.d/ (faili zinapaswa kuishia na kiendelezi cha .rules) ili kuchakata kifaa. Kumbuka kuwa faili za sheria katika saraka hii zina kipaumbele cha juu zaidi.

Ili kuunda faili ya nodi ya kifaa, udev inahitaji kutambua kifaa kinachotumia sifa fulani kama vile lebo, nambari ya ufuatiliaji, nambari yake kuu na ndogo iliyotumika, nambari ya kifaa cha basi na mengine mengi. Taarifa hii inasafirishwa na mfumo wa faili wa sysfs.

Wakati wowote unapounganisha kifaa kwenye mfumo, kernel huitambua na kuianzisha, na saraka yenye jina la kifaa huundwa chini ya /sys/ saraka ambayo huhifadhi sifa za kifaa.

Faili kuu ya usanidi ya udev ni /etc/udev/udev.conf, na kudhibiti tabia ya wakati wa utekelezaji udev daemon, unaweza kutumia matumizi ya udevadm.

Ili kuonyesha matukio ya kernel yaliyopokelewa (matukio) na matukio ya udev (ambayo udev hutuma baada ya usindikaji wa sheria), endesha udevadm na amri ya kufuatilia. Kisha unganisha kifaa kwenye mfumo wako na utazame, kutoka kwenye terminal, jinsi tukio la kifaa linashughulikiwa.

Picha ya skrini ifuatayo inaonyesha dondoo ya tukio la ADD baada ya kuunganisha diski ya USB flash kwenye mfumo wa majaribio:

$ udevadm monitor 

Ili kupata jina lililopewa diski yako ya USB, tumia matumizi ya lsblk ambayo husoma mfumo wa faili wa sysfs na udev db kukusanya taarifa kuhusu vifaa vilivyochakatwa.

 
$ lsblk

Kutoka kwa matokeo ya amri iliyotangulia, diski ya USB inaitwa sdb1 (njia kamili inapaswa kuwa /dev/sdb1). Ili kuuliza sifa za kifaa kutoka kwa hifadhidata ya udev, tumia amri ya habari.

$ udevadm info /dev/sdb1

Jinsi ya kufanya kazi na Sheria za Udev kwenye Linux

Katika sehemu hii, tutajadili kwa ufupi jinsi ya kuandika sheria za udev. Sheria inajumuisha orodha iliyotenganishwa kwa koma ya jozi moja au zaidi za thamani-msingi. Sheria hukuruhusu kubadilisha jina la nodi ya kifaa kutoka kwa jina chaguo-msingi, kurekebisha ruhusa na umiliki wa nodi ya kifaa, kuanzisha utekelezaji wa programu au hati wakati nodi ya kifaa inapoundwa au kufutwa, miongoni mwa mengine.

Tutaandika sheria rahisi ya kuzindua hati wakati kifaa cha USB kinaongezwa na kinapoondolewa kwenye mfumo unaoendesha.

Wacha tuanze kwa kuunda maandishi haya mawili:

$ sudo vim /bin/device_added.sh

Ongeza mistari ifuatayo katika hati ya device_added.sh.

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

Fungua hati ya pili.

$ sudo vim /bin/device_removed.sh

Kisha ongeza mistari ifuatayo kwenye hati ya device_removed.sh.

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

Hifadhi faili, funga na ufanye hati zote mbili zitekelezwe.

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

Ifuatayo, hebu tuunde sheria ili kuanzisha utekelezaji wa hati zilizo hapo juu, zinazoitwa /etc/udev/rules.d/80-test.rules.

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

Ongeza sheria hizi mbili zifuatazo ndani yake.

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"

wapi:

  • ==\: ni opereta wa kulinganisha kwa usawa.
  • \+=\: ni opereta wa kuongeza thamani kwenye ufunguo unaohifadhi orodha ya maingizo.
  • SUBSYSTEM: inalingana na mfumo mdogo wa kifaa cha tukio.
  • ACTION: inalingana na jina la kitendo cha tukio.
  • ENV{DEVTYPE}: inalingana dhidi ya thamani ya sifa ya kifaa, aina ya kifaa katika kesi hii.
  • RUN: inabainisha programu au hati ya kutekeleza kama sehemu ya kushughulikia tukio.

Hifadhi faili na uifunge. Kisha kama mzizi, mwambie systemd-udevd kupakia tena faili za sheria (hii pia hupakia hifadhidata zingine kama faharisi ya moduli ya kernel), kwa kukimbia.

$ sudo udevadm control --reload

Sasa unganisha hifadhi ya USB kwenye mashine yako na uangalie ikiwa hati ya device_added.sh ilitekelezwa. Kwanza kabisa faili scripts.log inapaswa kuundwa chini ya /tmp.

$ ls -l /tmp/scripts.log

Kisha faili inapaswa kuwa na ingizo kama vile \kifaa cha USB kimeondolewa at date_time, kama inavyoonyeshwa kwenye picha ya skrini.

$ cat /tmp/scripts.log

Kwa habari zaidi juu ya jinsi ya kuandika sheria za udev na kudhibiti udev, wasiliana na maingizo ya mwongozo ya udev na udevadm mtawaliwa, kwa kuendesha:

$ man udev
$ man udevadm

Udev ni kidhibiti cha kifaa cha ajabu ambacho hutoa njia thabiti ya kusanidi nodi za kifaa katika saraka ya /dev. Inahakikisha kuwa vifaa vinasanidiwa mara tu vinapochomekwa na kugunduliwa. Hueneza taarifa kuhusu kifaa kilichochakatwa au mabadiliko ya hali yake, kwa nafasi ya mtumiaji.

Ikiwa una maswali au mawazo ya kushiriki kuhusu mada hii, tumia fomu ya maoni.