Bii o ṣe le Lo Udev fun wiwa Ẹrọ ati Itọsọna ni Lainos


Udev (userpace/dev) jẹ eto-iha-Linux kan fun wiwa ẹrọ ati iṣakoso ẹrọ ti o ni agbara, nitori ẹya ekuro 2.6. O jẹ rirọpo ti awọn devfs ati hotplug.

O ṣẹda daadaa tabi yọ awọn apa ẹrọ kuro (wiwo si awakọ ẹrọ ti o han ninu eto faili bi ẹni pe o jẹ faili lasan, ti o fipamọ labẹ itọsọna/dev) ni akoko bata tabi ti o ba ṣafikun ẹrọ kan si tabi yọ ẹrọ kan kuro lati awọn eto. Lẹhinna o tan alaye nipa ẹrọ kan tabi awọn ayipada si ipo rẹ si aaye olumulo.

O jẹ iṣẹ ni lati 1) pese awọn ohun elo eto pẹlu awọn iṣẹlẹ ẹrọ, 2) ṣakoso awọn igbanilaaye ti awọn apa ẹrọ, ati 3) le ṣẹda awọn isomọ to wulo ninu itọsọna/dev fun awọn ẹrọ iwifun, tabi paapaa tun fun awọn atọkun nẹtiwọki lorukọmii.

Ọkan ninu awọn Aleebu ti udev ni pe o le lo awọn orukọ ẹrọ itẹramọṣẹ lati ṣe iṣeduro siso loruko ti awọn ẹrọ kọja awọn atunbere, botilẹjẹpe aṣẹ ti iṣawari wọn. Ẹya yii wulo nitori ekuro n sọtọ awọn orukọ ẹrọ ti a ko le sọ tẹlẹ ti o da lori aṣẹ ti iṣawari.

Ninu nkan yii, a yoo kọ bi a ṣe le lo Udev fun wiwa ẹrọ ati iṣakoso lori awọn ọna ṣiṣe Linux. Akiyesi pe pupọ julọ ti kii ba ṣe gbogbo awọn pinpin kaakiri Lainos ode oni wa pẹlu Udev gẹgẹ bi apakan ti fifi sori ẹrọ aiyipada.

Kọ Awọn ipilẹ ti Udev ni Lainos

Udev daemon, systemd-udevd (tabi systemd-udevd.service) n ṣalaye pẹlu ekuro ati gba awọn uevents ẹrọ taara lati ọdọ rẹ nigbakugba ti o ba ṣafikun tabi yọ ẹrọ kan kuro ninu eto, tabi ẹrọ kan yipada ipo rẹ.

Udev da lori awọn ofin - o jẹ awọn ofin ti o rọ ati agbara pupọ. Gbogbo iṣẹlẹ ẹrọ ti a gba wọle ti baamu si ṣeto awọn ofin ti a ka lati awọn faili ti o wa ni /lib/udev/rules.d ati /run/udev/rules.d.

O le kọ awọn faili aṣa aṣa ninu itọsọna /etc/udev/rules.d/ (awọn faili yẹ ki o pari pẹlu .rules itẹsiwaju) lati ṣe ilana ẹrọ kan. Akiyesi pe awọn faili ofin ninu itọsọna yii ni ayo ti o ga julọ.

Lati ṣẹda faili node ẹrọ kan, udev nilo lati ṣe idanimọ ẹrọ kan nipa lilo awọn abuda kan gẹgẹbi aami, nọmba ni tẹlentẹle, nomba akọkọ ati kekere ti o lo, nọmba ẹrọ akero ati pupọ diẹ sii. Alaye yii ni okeere nipasẹ eto faili sysfs.

Nigbakugba ti o ba sopọ mọ ẹrọ kan si eto naa, ekuro naa ṣe iwari ati bẹrẹ rẹ, ati pe a ṣẹda itọsọna kan pẹlu orukọ ẹrọ labẹ/sys/itọsọna eyiti o tọju awọn eroja ẹrọ naa.

Faili iṣeto akọkọ fun udev ni /etc/udev/udev.conf, ati lati ṣakoso ihuwasi asiko asiko naa udev daemon, o le lo ohun elo udevadm.

Lati ṣe afihan awọn iṣẹlẹ ekuro ti a gba (awọn uevents) ati awọn iṣẹlẹ udev (eyiti udev firanṣẹ lẹhin ṣiṣe ofin), ṣiṣe udevadm pẹlu aṣẹ atẹle. Lẹhinna so ẹrọ kan pọ si eto rẹ ki o wo, lati ebute, bawo ni a ṣe ṣakoso iṣẹlẹ ẹrọ naa.

Sikirinifoto atẹle yii fihan iyasọtọ ti iṣẹlẹ ADD lẹhin sisopọ disiki filasi USB si eto idanwo:

$ udevadm monitor 

Lati wa orukọ ti a sọ si disiki USB rẹ, lo iwulo lsblk eyiti o ka eto faili faili sysfs ati udev db lati ṣajọ alaye nipa awọn ẹrọ ṣiṣe.

 
$ lsblk

Lati inu iṣẹ aṣẹ ti tẹlẹ, a pe disiki USB ni sdb1 (ọna pipe yẹ ki o jẹ /dev/sdb1 ). Lati beere awọn eroja ẹrọ lati ibi ipamọ data udev, lo pipaṣẹ alaye.

$ udevadm info /dev/sdb1

Bii o ṣe le Ṣiṣẹ pẹlu Awọn ofin Udev ni Lainos

Ni apakan yii, a yoo jiroro ni ṣoki bi o ṣe le kọ awọn ofin udev. Ofin kan ni atokọ ipin iyasọtọ ti ọkan tabi diẹ ẹ sii awọn iye iye bọtini. Awọn ofin gba ọ laye lati fun lorukọ mii ẹrọ kan lati orukọ aiyipada, yipada awọn igbanilaaye ati nini ti oju ipade ẹrọ kan, ṣiṣe ipaniyan ti eto kan tabi iwe afọwọkọ nigbati a ṣẹda tabi paarẹ ẹrọ kan, laarin awọn miiran.

A yoo kọ ofin ti o rọrun lati ṣe ifilọlẹ iwe afọwọkọ kan nigbati a ba fi ẹrọ USB kun ati nigbati o ba yọ kuro ninu eto ṣiṣe.

Jẹ ki a bẹrẹ nipa ṣiṣẹda awọn iwe afọwọkọ meji:

$ sudo vim /bin/device_added.sh

Ṣafikun awọn ila wọnyi ni ẹrọ_added.sh akosile.

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

Ṣii iwe afọwọkọ keji.

$ sudo vim /bin/device_removed.sh

Lẹhinna ṣafikun awọn ila wọnyi si ẹrọ_removed.sh akosile.

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

Fipamọ awọn faili naa, sunmọ ki o jẹ ki awọn iwe afọwọkọ mejeeji ṣiṣẹ.

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

Nigbamii ti, jẹ ki a ṣẹda ofin lati fa ipaniyan ti awọn iwe afọwọkọ ti o wa loke, ti a pe /etc/udev/rules.d/80-test.rules.

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

Ṣafikun awọn ofin atẹle meji wọnyi ninu rẹ.

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"

ibo:

  • \"== \" : jẹ oniṣẹ lati ṣe afiwe fun dọgba.
  • \"+ = \" : jẹ oluṣe lati ṣafikun iye si bọtini kan ti o mu atokọ awọn titẹ sii dani.
  • SUBSYSTEM: baamu eto-iṣẹ ti ẹrọ iṣẹlẹ.
  • Iṣe: baamu orukọ iṣe iṣe.
  • ENV {DEVTYPE}: Awọn ere-kere si iye ohun-ini ohun-elo kan, iru ẹrọ ninu ọran yii.
  • RUN: ṣe afihan eto kan tabi iwe afọwọkọ lati ṣe gẹgẹ bi apakan ti mimu iṣẹlẹ naa.

Fipamọ faili naa ki o pa. Lẹhinna bi gbongbo, sọ fun systemd-udevd lati tun gbe awọn faili ofin pada (eyi tun tun tun gbe awọn apoti isura data miiran bii atọka module ekuro), nipa ṣiṣe.

$ sudo udevadm control --reload

Bayi so okun USB pọ si ẹrọ rẹ ki o ṣayẹwo ti o ba ti ṣiṣẹ iwe afọwọkọ device_added.sh . Ni akọkọ gbogbo faili scripts.log yẹ ki o ṣẹda labẹ/tmp.

$ ls -l /tmp/scripts.log

Lẹhinna faili yẹ ki o ni titẹ sii bii\"Ẹrọ USB ti yọ kuro ni ọjọ-ọjọ", bi o ṣe han ninu sikirinifoto.

$ cat /tmp/scripts.log

Fun alaye diẹ sii lori bii o ṣe le kọ awọn ofin udev ati ṣakoso udev, kan si udev ati awọn titẹ sii itọnisọna udevadm lẹsẹsẹ, nipa ṣiṣiṣẹ:

$ man udev
$ man udevadm

Udev jẹ oluṣakoso ẹrọ iyalẹnu ti o pese ọna ti o ni agbara ti siseto awọn apa ẹrọ ninu ilana /dev . O ṣe idaniloju pe awọn ẹrọ ti wa ni tunto ni kete ti wọn ti ṣafọ sinu ti wọn si ṣe awari. O ntan alaye nipa ẹrọ ti a ṣiṣẹ tabi awọn ayipada si ipo rẹ, si aaye olumulo.

Ti o ba ni ibeere eyikeyi tabi awọn ero lati pin lori koko yii, lo fọọmu esi.