Otu esi eji Udev maka nchọpụta na njikwa ngwaọrụ na Linux


Udev (userspace/dev) bụ sistemụ Linux maka nchọpụta na njikwa ngwaọrụ siri ike, ebe ụdị kernel 2.6. Ọ bụ ngbanwe nke devfs na hotplug.

Ọ na-emepụta ma ọ bụ na-ewepụ ọnụ ngwaọrụ (ihe interface na onye ọkwọ ụgbọ ala nke na-egosi na sistemụ faịlụ dị ka a ga-asị na ọ bụ faịlụ nkịtị, echekwara n'okpuru ndekọ/dev) n'oge buut ma ọ bụ ọ bụrụ na ị gbakwunye ngwaọrụ na ma ọ bụ wepụ ngwaọrụ na ya. usoro. Ọ na-agbasa ozi gbasara ngwaọrụ ma ọ bụ gbanwee na steeti ya na oghere onye ọrụ.

Ọrụ ya bụ 1) ịnye ngwa sistemụ na mmemme ngwaọrụ, 2) jikwaa ikike nke ọnụ ngwaọrụ, yana 3) nwere ike mepụta symlinks bara uru na ndekọ/dev maka ịnweta ngwaọrụ, ma ọ bụ nyegharịa oghere netwọkụ.

Otu n'ime uru nke udev bụ na ọ nwere ike iji aha ngwaọrụ na-adịgide adịgide na-ekwe nkwa ịkpọ aha ngwaọrụ n'ofe reboots, n'agbanyeghị usoro nchọpụta ha. Njirimara a bara uru n'ihi na kernel na-ekenye aha ngwaọrụ a na-atụghị anya ya dabere na usoro nchọpụta.

N'isiokwu a, anyị ga-amụta otu esi eji Udev maka nchọpụta ngwaọrụ na njikwa na sistemụ Linux. Rịba ama na ọtụtụ ma ọ bụrụ na ọ bụghị ihe niile nkesa Linux ọgbara ọhụrụ na-abịa na Udev dịka akụkụ nke nrụnye ndabara.

Mụta ihe ndabere nke Udev na Linux

The udev daemon, systemd-udevd (ma ọ bụ systemd-udevd.service) na-ekwurịta okwu na kernel na-enweta ngwaọrụ uevents ozugbo site na ya mgbe ọ bụla i tinye ma ọ bụ wepụ a ngwaọrụ na sisitemu, ma ọ bụ ngwaọrụ na-agbanwe ọnọdụ ya.

Udev dabeere na iwu - ọ bụ iwu na-agbanwe agbanwe ma dị ike. Mmemme ngwaọrụ ọ bụla enwetara dabara na usoro iwu ndị a na-agụ na faịlụ dị na /lib/udev/rules.d na /run/udev/rules.d.

Ị nwere ike dee faịlụ iwu omenala na /etc/udev/rules.d/ directory (faịlụ ga-ejedebe na .rules ndọtị) iji hazie ngwaọrụ. Rịba ama na faịlụ iwu dị na ndekọ a nwere ihe kacha mkpa.

Iji mepụta faịlụ ọnụ ngwaọrụ, udev kwesịrị ịchọpụta ngwaọrụ na-eji ụfọdụ njiri mara dị ka akara, akara akara, nọmba isi na obere nke ejiri, nọmba ngwaọrụ ụgbọ ala na ọtụtụ ndị ọzọ. Sistemu faịlụ sysfs na-ebupụ ozi a.

Mgbe ọ bụla jikọọ ngwaọrụ na sistemụ, kernel na-achọpụta ma malite ya, na-emepụta ndekọ aha ngwaọrụ n'okpuru/sys/ ndekọ nke na-echekwa njirimara ngwaọrụ.

Faịlụ nhazi bụ isi maka udev bụ /etc/udev/udev.conf, na ijikwa oge ịgba ọsọ omume udev daemon, ị nwere ike iji udevadm utility.

Iji gosi mmemme kernel enwetara (uevents) na mmemme udev (nke udev na-eziga mgbe nhazi usoro iwu gasịrị), jiri iwu nyochaa mee udevadm. Mgbe ahụ jikọọ ngwaọrụ na sistemụ gị wee lelee, site na ọnụ ọnụ, ka esi edozi mmemme ngwaọrụ ahụ.

nseta ihuenyo na-esonụ na-egosi akụkụ nke mmemme ADD mgbe ejikọtara diski flash USB na sistemụ nnwale:

$ udevadm monitor 

Iji chọta aha e kenyere na diski USB gị, jiri lsblk utility nke na-agụ sysfs filesystem na udev db iji nweta ozi gbasara ngwaọrụ edoziri.

 
$ lsblk

Site na mmepụta nke iwu gara aga, a na-akpọ diski USB sdb1 (ụzọ zuru oke kwesịrị ịbụ /dev/sdb1). Iji jụọ njirimara ngwaọrụ site na nchekwa data udev, jiri iwu ozi.

$ udevadm info /dev/sdb1

Otu esi arụ ọrụ na iwu Udev na Linux

Na ngalaba a, anyị ga-atụle nkenke ka esi ede iwu udev. Iwu nwere ndepụta nkewapụrụ rikoma nke otu ụzọ ma ọ bụ karịa uru igodo. Iwu na-enye gị ohere ịnyegharị ọnụ ngwaọrụ site na aha ndabara, gbanwee ikike na ikike nke ọnụ ngwaọrụ, kpalite ogbugbu nke mmemme ma ọ bụ edemede mgbe emepụtara ma ọ bụ ehichapụ ọnụ ngwaọrụ, n'etiti ndị ọzọ.

Anyị ga-ede iwu dị mfe iji malite edemede mgbe agbakwunyere ngwaọrụ USB na mgbe ewepụrụ ya na sistemụ ịgba ọsọ.

Ka anyị malite site na ịmepụta edemede abụọ:

$ sudo vim /bin/device_added.sh

Tinye ahịrị ndị a na edemede ngwaọrụ_added.sh.

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

Mepee edemede nke abụọ.

$ sudo vim /bin/device_removed.sh

Wee tinye ahịrị ndị a na device_removed.sh edemede.

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

Chekwaa faịlụ ndị ahụ, mechie ma mee ka script abụọ ahụ nwee ike ịme ya.

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

Ọzọ, ka anyị mepụta iwu iji kpalite ogbugbu nke edemede ndị dị n'elu, nke a na-akpọ /etc/udev/rules.d/80-test.rules.

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

Tinye iwu abụọ a n'ime ya.

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"

ebe:

  • ==\ : bụ onye na-arụ ọrụ iji tụnyere nhata.
  • \+=\ : bụ onye na-arụ ọrụ iji tinye uru na igodo nwere ndepụta ndenye.
  • SUBSYSTEM: dakọtara na subsystem nke ngwaọrụ mmemme.
  • ACTION: dakọtara aha mmemme mmemme.
  • ENV{DEVTYPE}: dabara na uru akụrụngwa akụrụngwa, ụdị ngwaọrụ na nke a.
  • RUN: ezipụta mmemme ma ọ bụ edemede a ga-eme dịka akụkụ nke njikwa mmemme.

Chekwaa faịlụ ma mechie ya. Mgbe ahụ dị ka mgbọrọgwụ, gwa systemd-udevd ka ọ bugharịa faịlụ iwu (nke a na-ebughachikwa ọdụ data ndị ọzọ dị ka kernel module index), site na-agba ọsọ.

$ sudo udevadm control --reload

Ugbu a jikọọ draịvụ USB n'ime igwe gị wee lelee ma ngwaọrụ_added.sh edemedere. Mbụ niile faịlụ scripts.log kwesịrị ịmepụta n'okpuru /tmp.

$ ls -l /tmp/scripts.log

Mgbe ahụ, faịlụ kwesịrị inwe ntinye dị ka USB ngwaọrụ wepụrụ na date_time, dị ka egosiri na nseta ihuenyo.

$ cat /tmp/scripts.log

Maka ozi ndị ọzọ gbasara otu esi ede iwu udev na jikwaa udev, gaa na ntinye akwụkwọ ntuziaka udev na udevadm n'otu n'otu, site na ịgba ọsọ:

$ man udev
$ man udevadm

Udev bụ onye njikwa ngwaọrụ dị ịrịba ama nke na-enye ụzọ siri ike isi guzobe ọnụ ngwaọrụ na ndekọ /dev. Ọ na-ahụ na a na-ahazi ngwaọrụ ozugbo etinyere ya wee chọpụta ya. Ọ na-agbasa ozi gbasara ngwaọrụ ahaziri ma ọ bụ mgbanwe na steeti ya, gaa na oghere onye ọrụ.

Ọ bụrụ na ị nwere ajụjụ ọ bụla ma ọ bụ echiche ị ga-ekekọrịta na isiokwu a, jiri akwụkwọ nzaghachi.