Linux-da enjamy kesgitlemek we dolandyrmak üçin Udev-i nädip ulanmaly


Udev (userspace/dev), ýadro 2.6 wersiýasyndan bäri dinamiki enjamy tapmak we dolandyrmak üçin Linux kiçi ulgamy. Bu devfleriň we hotplugyň çalyşmagy.

Başlangyç wagtynda enjam düwünlerini (faýl ulgamynda adaty faýl ýaly görünýän,/dev bukjasynyň aşagynda saklanýan enjam draýwerine interfeýs) dinamiki döredýär ýa-da aýyrýar ýa-da bir enjam goşsaňyz ýa-da aýyrsaňyz; ulgamy. Soňra enjam hakda maglumat ýaýradýar ýa-da ýagdaýyna ulanyjy giňişligine üýtgeýär.

Onuň wezipesi: 1) ulgam programmalaryny enjam hadysalary bilen üpjün etmek, 2) enjam düwünleriniň rugsatlaryny dolandyrmak we 3) enjamlara girmek üçin/dev katalogynda peýdaly baglanyşyklary döredip biler ýa-da tor interfeýsleriniň adyny üýtgedip biler.

Udewiň oňaýly taraplarynyň biri, enjamlaryň açyş tertibine garamazdan, täzeden açylýan ýerlerde yzygiderli at goýulmagyny kepillendirmek üçin yzygiderli enjam atlaryny ulanyp biler. Bu aýratynlyk peýdaly, sebäbi ýadro diňe açyş tertibine görä öňünden aýdyp bolmajak enjam atlaryny belleýär.

Bu makalada Linux ulgamlarynda enjam tapmak we dolandyrmak üçin Udev-i nädip ulanmalydygyny öwreneris. Üns beriň, häzirki zaman Linux paýlanyşlarynyň köpüsi adaty gurnama bölegi hökmünde Udev bilen gelýär.

Linux-da Udewiň esaslaryny öwreniň

Udev daemon, systemd-udevd (ýa-da systemd-udevd.service) ýadro bilen aragatnaşyk saklaýar we her gezek ulgamdan bir enjam goşanyňyzda ýa-da aýyranyňyzda ýa-da enjamyň ýagdaýyny üýtgedeninde gönüden-göni enjam enjamlaryny alýar.

Udew düzgünlere esaslanýar - düzgünleri çeýe we gaty güýçli. Alnan her bir enjam hadysasy /lib/udev/rules.d we /run/udev/rules.d faýllarynda okalýan düzgünler toplumyna gabat gelýär.

Enjamy gaýtadan işlemek üçin /etc/udev/rules.d/ katalogyna (faýllar .rules giňeltmesi bilen gutarmaly) ýörite düzgün faýllaryny ýazyp bilersiňiz. Bu bukjadaky düzgün faýllarynyň iň ýokary ähmiýete eýedigine üns beriň.

Enjam düwün faýly döretmek üçin udev, bellik, seriýa belgisi, ulanylýan esasy we kiçi belgisi, awtobus enjamynyň belgisi we ş.m. ýaly käbir atributlary ulanýan enjamy kesgitlemeli. Bu maglumatlar sysfs faýl ulgamy tarapyndan eksport edilýär.

Haçan-da bir enjamy sistema birikdireniňizde, ýadro ony tapýar we işe girizýär we enjamyň atributlaryny saklaýan/sys/katalogyň aşagynda enjamyň ady bolan bir katalog döredilýär.

Udev üçin esasy konfigurasiýa faýly /etc/udev/udev.conf, we udev daemonynyň iş wagtyna gözegçilik etmek üçin udevadm programmasyny ulanyp bilersiňiz.

Alnan ýadro hadysalaryny (uevents) we udev wakalaryny görkezmek üçin (udew düzgüni gaýtadan işlenenden soň iberýär), monitor buýrugy bilen udevadm işlediň. Soňra enjamy ulgamyňyza birikdiriň we terminaldan, enjam hadysasynyň nähili işleýändigini görüň.

Aşakdaky skrinshot, USB fleş diskini synag ulgamyna birikdirenden soň ADD hadysasynyň bir bölegini görkezýär:

$ udevadm monitor 

USB diskiňize bellenen ady tapmak üçin, gaýtadan işlenen enjamlar hakda maglumat ýygnamak üçin sysfs faýl ulgamyny we udev db okaýan lsblk kömekçi programmasyny ulanyň.

 
$ lsblk

Öňki buýrugyň çykyşyndan USB diskine sdb1 diýilýär (mutlak ýol /dev/sdb1 bolmaly). Udev maglumatlar bazasyndan enjam atributlaryny soramak üçin maglumat buýrugyny ulanyň.

$ udevadm info /dev/sdb1

Linux-da Udev düzgünleri bilen nädip işlemeli

Bu bölümde udev düzgünlerini nädip ýazmalydygyny gysgaça ara alyp maslahatlaşarys. Düzgün bir ýa-da birnäçe açar bahaly jübütleriň vergul bilen bölünen sanawyndan durýar. Düzgünler enjam düwünini deslapky adyndan üýtgetmäge, enjam düwüniniň rugsatlaryny we eýeçiligini üýtgetmäge, enjam düwünleri döredilende ýa-da ýok edilende programmanyň ýa-da skriptiň ýerine ýetirilmegine itergi berýär.

USB enjamy goşulanda we işleýän ulgamdan aýrylanda skript açmak üçin ýönekeý bir düzgün ýazarys.

Iki skript döretmekden başlalyň:

$ sudo vim /bin/device_added.sh

device_added.sh skriptine aşakdaky setirleri goşuň.

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

Ikinji skripti açyň.

$ sudo vim /bin/device_removed.sh

Soňra device_removed.sh skriptine aşakdaky setirleri goşuň.

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

Faýllary ýazdyryň, iki skripti ýapyň we ýerine ýetiriň.

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

Indiki, /etc/udev/rules.d/80-test.rules atly ýokardaky skriptleriň ýerine ýetirilmegine itergi berýän düzgün döredeliň.

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

Oňa şu iki düzgüni goşuň.

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"

nirede:

  • \==\: deňlik üçin deňeşdirmek üçin operator.
  • \+ =\: ýazgylaryň sanawyny saklaýan açara baha goşmak üçin operator.
  • SUBSYSTEM: waka enjamynyň kiçi ulgamyna gabat gelýär.
  • Hereket: wakanyň hereketiniň adyna gabat gelýär.
  • ENV {DEVTYPE}: enjamyň emläk bahasyna, bu ýagdaýda enjamyň görnüşine gabat gelýär.
  • RUN: hadysany dolandyrmagyň bir bölegi hökmünde ýerine ýetirmek üçin programma ýa-da skript kesgitleýär.

Faýly ýazdyryň we ýapyň. Soňra kök hökmünde systemd-udevd-e işledip, düzgün faýllaryny täzeden ýüklemegi aýdyň (bu ýadro moduly indeksi ýaly beýleki maglumat bazalaryny hem ýükleýär).

$ sudo udevadm control --reload

Indi USB diskiňizi enjamyňyza birikdiriň we device_added.sh skriptiniň ýerine ýetirilendigini barlaň. Ilki bilen scripts.log faýly/tmp astynda döredilmeli.

$ ls -l /tmp/scripts.log

Soňra faýlda, skrinshotda görkezilişi ýaly\USB enjamy date_time aýyryldy ýaly ýazgy bolmaly.

$ cat /tmp/scripts.log

Udev düzgünlerini nädip ýazmalydygy we udev-i nädip dolandyrmalydygy barada has giňişleýin maglumat üçin degişlilikde udev we udevadm gollanma ýazgylaryna ýüz tutuň:

$ man udev
$ man udevadm

Udev, /dev katalogynda enjam düwünlerini gurmagyň dinamiki usulyny üpjün edýän ajaýyp enjam dolandyryjysydyr. Enjamlaryň dakylmagy we tapylmagy bilen konfigurasiýa edilmegini üpjün edýär. Gaýtadan işlenen enjam ýa-da ýagdaýyna, ulanyjy giňişligine üýtgeşmeler hakda maglumat ýaýradýar.

Bu mowzukda paýlaşjak soraglaryňyz ýa-da pikirleriňiz bar bolsa, jogap görnüşini ulanyň.