Giunsa Paggamit ang Udev alang sa Pagsusi ug Pagdumala sa Device sa Linux


Ang Udev (userspace/dev) usa ka Linux sub-system para sa dynamic nga device detection ug management, sukad sa kernel version 2.6. Kini usa ka kapuli sa devfs ug hotplug.

Kini dinamikong nagmugna o nagtangtang sa mga node sa aparato (usa ka interface sa usa ka driver sa aparato nga makita sa usa ka sistema sa file ingon nga kini usa ka ordinaryo nga file, gitipigan sa ilawom sa direktoryo sa/dev) sa oras sa pag-boot o kung magdugang ka usa ka aparato sa o magtangtang sa usa ka aparato gikan sa ang sistema. Dayon kini magpakaylap sa impormasyon mahitungod sa usa ka device o mga kausaban sa kahimtang niini ngadto sa user space.

Ang katuyoan niini mao ang 1) paghatag sa mga aplikasyon sa sistema sa mga panghitabo sa aparato, 2) pagdumala sa mga pagtugot sa mga node sa aparato, ug 3) mahimo’g maghimo mapuslanon nga mga symlink sa direktoryo sa/dev alang sa pag-access sa mga aparato, o bisan ang pag-ilis sa ngalan sa mga interface sa network.

Usa sa mga bentaha sa udev mao nga kini makagamit sa makanunayon nga mga ngalan sa aparato aron magarantiya ang makanunayon nga pagngalan sa mga aparato sa mga pag-reboot, bisan pa sa ilang pagkasunud sa pagkadiskobre. Kini nga bahin mapuslanon tungod kay ang kernel nag-assign lamang sa dili matag-an nga mga ngalan sa aparato base sa han-ay sa pagkadiskobre.

Niini nga artikulo, mahibal-an naton kung giunsa ang paggamit sa Udev alang sa pag-detect ug pagdumala sa aparato sa mga sistema sa Linux. Timan-i nga kadaghanan kung dili ang tanan nga mainstream nga modernong mga distribusyon sa Linux kauban ang Udev isip bahin sa default nga pag-install.

Pagkat-on Mga sukaranan sa Udev sa Linux

Ang udev daemon, systemd-udevd (o systemd-udevd.service) nakigkomunikar sa kernel ug makadawat ug device uevents direkta gikan niini sa matag higayon nga imong idugang o tangtangon ang usa ka device gikan sa system, o ang device mag-usab sa iyang kahimtang.

Ang Udev gibase sa mga lagda - kini nga mga lagda flexible ug gamhanan kaayo. Ang matag nadawat nga panghitabo sa aparato gipares sa hugpong sa mga lagda nga gibasa gikan sa mga file nga nahimutang sa /lib/udev/rules.d ug /run/udev/rules.d.

Mahimo nimong isulat ang custom rules files sa /etc/udev/rules.d/ directory (ang mga file kinahanglang tapuson sa .rules extension) aron maproseso ang device. Timan-i nga ang mga file sa lagda sa kini nga direktoryo adunay labing taas nga prayoridad.

Aron makamugna og device node file, kinahanglan nga mailhan sa udev ang usa ka device gamit ang pipila ka mga attribute sama sa label, serial number, mayor ug minor nga numero nga gigamit, bus device number ug daghan pa. Kini nga impormasyon gi-eksport sa sysfs file system.

Sa matag higayon nga imong ikonektar ang usa ka device ngadto sa sistema, ang kernel makamatikod ug magsugod niini, ug usa ka direktoryo nga adunay ngalan sa device gihimo ubos sa/sys/direktoryo nga nagtipig sa mga hiyas sa device.

Ang nag-unang configuration file alang sa udev mao ang /etc/udev/udev.conf, ug aron makontrol ang runtime nga kinaiya ang udev daemon, mahimo nimong gamiton ang udevadm utility.

Aron ipakita ang nadawat nga mga panghitabo sa kernel (uevents) ug udev nga mga panghitabo (nga gipadala sa udev pagkahuman sa pagproseso sa lagda), pagdagan ang udevadm gamit ang mando sa monitor. Unya ikonektar ang usa ka aparato sa imong sistema ug tan-awa, gikan sa terminal, kung giunsa pagdumala ang kalihokan sa aparato.

Ang mosunod nga screenshot nagpakita sa usa ka kinutlo sa usa ka ADD nga panghitabo human sa pagkonektar sa usa ka USB flash disk ngadto sa sistema sa pagsulay:

$ udevadm monitor 

Aron makit-an ang ngalan nga gi-assign sa imong USB disk, gamita ang lsblk utility nga nagbasa sa sysfs filesystem ug udev db para magtigom og impormasyon bahin sa mga naprosesong device.

 
$ lsblk

Gikan sa output sa miaging command, ang USB disk ginganlan og sdb1 (absolute path kinahanglan /dev/sdb1). Aron mangutana sa mga hiyas sa device gikan sa udev database, gamita ang info command.

$ udevadm info /dev/sdb1

Giunsa ang Pagtrabaho sa Udev Rules sa Linux

Niini nga seksyon, atong hisgotan sa makadiyot kung giunsa pagsulat ang mga lagda sa udev. Ang usa ka lagda gilangkuban sa usa ka lista nga gibulag sa koma sa usa o daghan pa nga mga parisan sa yawe nga kantidad. Gitugotan ka sa mga lagda sa pag-usab sa ngalan sa usa ka node sa aparato gikan sa default nga ngalan, pag-usab sa mga pagtugot ug pagpanag-iya sa usa ka node sa aparato, pag-trigger sa pagpatuman sa usa ka programa o script kung ang usa ka node sa aparato gihimo o gitangtang, ug uban pa.

Magsulat kami og usa ka yano nga lagda sa paglansad sa usa ka script kung ang usa ka USB device idugang ug kung kini gikuha gikan sa nagdagan nga sistema.

Magsugod kita pinaagi sa paghimo sa duha ka mga script:

$ sudo vim /bin/device_added.sh

Idugang ang mosunod nga mga linya sa device_added.sh script.

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

Ablihi ang ikaduhang script.

$ sudo vim /bin/device_removed.sh

Dayon idugang ang mosunod nga mga linya sa device_removed.sh script.

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

I-save ang mga file, isara ug himoa nga ma-executable ang duha ka script.

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

Sunod, maghimo kita og usa ka lagda aron ma-trigger ang pagpatuman sa mga script sa ibabaw, nga gitawag /etc/udev/rules.d/80-test.rules.

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

Idugang kining duha ka mosunod nga mga lagda niini.

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"

diin:

  • ==\: usa ka operator nga ikumpara para sa pagkaparehas.
  • \+=\: maoy usa ka operator aron idugang ang bili sa usa ka yawe nga adunay lista sa mga entri.
  • SUBSYSTEM: motakdo sa subsystem sa event device.
  • AKSYON: motakdo sa ngalan sa kalihokan nga aksyon.
  • ENV{DEVTYPE}: mga pareha batok sa bili sa kabtangan sa device, tipo sa device niining kasoha.
  • RUN: nagtakda ug programa o script nga ipatuman isip kabahin sa pagdumala sa panghitabo.

I-save ang file ug isira kini. Dayon ingon nga gamut, sultihi ang systemd-udevd nga i-reload ang mga file sa mga lagda (kini usab mag-reload sa ubang mga database sama sa kernel module index), pinaagi sa pagdagan.

$ sudo udevadm control --reload

Karon ikonektar ang usa ka USB drive sa imong makina ug susiha kung ang device_added.sh nga script gipatuman. Una sa tanan ang file scripts.log kinahanglang himoon ubos sa /tmp.

$ ls -l /tmp/scripts.log

Unya ang file kinahanglan adunay usa ka entry sama sa \USB device nga gikuha sa date_time, ingon sa gipakita sa screenshot.

$ cat /tmp/scripts.log

Para sa dugang nga impormasyon kon unsaon pagsulat ang udev nga mga lagda ug pagdumala sa udev, konsultaha ang udev ug udevadm manual entries matag usa, pinaagi sa pagpadagan:

$ man udev
$ man udevadm

Ang Udev usa ka talagsaong device manager nga naghatag ug dinamikong paagi sa pag-set up sa device nodes sa /dev directory. Gisiguro niini nga ang mga aparato ma-configure sa diha nga kini ma-plug ug madiskobrehan. Gipakaylap niini ang kasayuran bahin sa usa ka giproseso nga aparato o mga pagbag-o sa kahimtang niini, sa wanang sa tiggamit.

Kon duna kay mga pangutana o hunahuna nga ipaambit niini nga hilisgutan, gamita ang feedback form.