Weboldal keresés

Az Udev használata az eszközészleléshez és -kezeléshez Linux alatt


Az Udev (felhasználói terület /dev) egy Linux-alrendszer a dinamikus eszközök észlelésére és kezelésére, a kernel 2.6 verziója óta. Ez a devfs és a hotplug helyettesítője.

Dinamikusan létrehozza vagy eltávolítja az eszközcsomópontokat (egy interfész az eszközillesztőhöz, amely úgy jelenik meg a fájlrendszerben, mintha egy közönséges fájl lenne, a /dev könyvtárban tárolva) rendszerindításkor vagy ha hozzáad egy vagy távolítson el egy eszközt a rendszerből. Ezután információt terjeszt egy eszközről vagy megváltoztatja annak állapotát a felhasználói térbe.

Feladata, hogy 1) ellássa a rendszeralkalmazásokat eszközeseményekkel, 2) kezelje az eszközcsomópontok engedélyeit, és 3) hasznos szimbolikus hivatkozásokat hozhat létre a /dev könyvtárban az eszközök eléréséhez, vagy akár átnevezheti a hálózati interfészeket. .

Az udev egyik előnye, hogy állandó eszközneveket használva garantálja az eszközök következetes elnevezését az újraindítások során, a felfedezés sorrendje ellenére. Ez a szolgáltatás azért hasznos, mert a kernel egyszerűen kiszámíthatatlan eszközneveket rendel hozzá a felfedezés sorrendje alapján.

Ebből a cikkből megtudjuk, hogyan használható az Udev eszközfelismerésre és -kezelésre Linux rendszereken. Vegye figyelembe, hogy a legtöbb, ha nem az összes mainstream modern Linux disztribúció az alapértelmezett telepítés részeként az Udev elemmel érkezik.

Tanulja meg az Udev alapjait Linuxon

Az udev démon, a systemd-udevd (vagy a systemd-udevd.service) kommunikál a kernellel, és fogadja az eszköz ueventjeit > közvetlenül onnan minden alkalommal, amikor egy eszközt ad hozzá vagy eltávolít a rendszerből, vagy egy eszköz megváltoztatja állapotát.

Az Udev szabályokon alapul – a szabályok rugalmasak és nagyon hatékonyak. Minden fogadott eszközesemény megfelel a /lib/udev/rules.d és /run/udev/rules.d fájlokból kiolvasott szabálykészletnek.

Egyéni szabályfájlokat írhat az /etc/udev/rules.d/ könyvtárba (a fájlok .rules kiterjesztéssel végződjenek) az eszköz feldolgozásához. Vegye figyelembe, hogy ebben a könyvtárban a szabályfájlok rendelkeznek a legmagasabb prioritással.

Eszközcsomópont-fájl létrehozásához az udevnek azonosítania kell az eszközt bizonyos attribútumok, például a címke, a sorozatszám, a használt fő- és mellékszám, a busz eszközszáma és így tovább sokkal több. Ezeket az információkat a sysfs fájlrendszer exportálja.

Amikor egy eszközt csatlakoztat a rendszerhez, a kernel észleli és inicializálja azt, és a /sys/ könyvtárban létrejön egy, az eszköz attribútumait tároló könyvtár az eszköz nevével.

Az udev fő konfigurációs fájlja az /etc/udev/udev.conf, és az udev démon futásidejű viselkedésének szabályozásához használhatja az udevadm segédprogramot.

A kapott kernel események (uevents) és udev események (amelyeket az udev a szabályfeldolgozás után küld ki) megjelenítéséhez futtassa az udevadm parancsot. > a monitor paranccsal. Ezután csatlakoztasson egy eszközt a rendszeréhez, és a terminálról figyelje meg, hogyan kezelik az eszközeseményt.

A következő képernyőképen egy ADD esemény részlete látható, miután USB flash lemezt csatlakoztatott a tesztrendszerhez:

udevadm monitor 

Az USB-lemezhez rendelt név megkereséséhez használja az lsblk segédprogramot, amely beolvassa a sysfs fájlrendszert és az udev db fájlt, hogy információkat gyűjtsön a feldolgozott eszközökről.

 
lsblk

Az előző parancs kimenetéből az USB-lemez neve sdb1 (az abszolút elérési út a /dev/sdb1 legyen). Az eszközattribútumok udev adatbázisból való lekérdezéséhez használja az info parancsot.

udevadm info /dev/sdb1

Az Udev-szabályok használata Linuxban

Ebben a részben röviden megvitatjuk az udev szabályok megírását. A szabály egy vagy több kulcs-érték pár vesszővel elválasztott listájából áll. A szabályok többek között lehetővé teszik egy eszközcsomópont átnevezését az alapértelmezett név alapján, az eszközcsomópont engedélyeinek és tulajdonjogának módosítását, egy program vagy parancsfájl végrehajtását, amikor egy eszközcsomópontot létrehoznak vagy törölnek.

Egy egyszerű szabályt fogunk írni a szkript elindítására, amikor USB-eszközt adunk hozzá, és amikor eltávolítjuk a futó rendszerből.

Kezdjük a két szkript létrehozásával:

sudo vim /bin/device_added.sh

Adja hozzá a következő sorokat a device_added.sh parancsfájlhoz.

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

Nyissa meg a második szkriptet.

sudo vim /bin/device_removed.sh

Ezután adja hozzá a következő sorokat a device_removed.sh szkripthez.

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

Mentse el a fájlokat, zárja be és tegye futtathatóvá mindkét szkriptet.

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

Ezután hozzunk létre egy szabályt, amely elindítja a fenti szkriptek végrehajtását, az úgynevezett /etc/udev/rules.d/80-test.rules.

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

Adja hozzá ezt a két következő szabályt.

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"

ahol :

  • "==": egy operátor az egyenlőség összehasonlításához.
  • "+=": egy operátor, amely hozzáadja az értéket a bejegyzések listáját tároló kulcshoz.
  • ALRENDSZER: megfelel az eseményeszköz alrendszerének.
  • ACTION: megegyezik az eseményművelet nevével.
  • ENV{DEVTYPE}: megegyezik az eszköztulajdonság értékével, ebben az esetben az eszköz típusával.
  • RUN: az eseménykezelés részeként végrehajtandó programot vagy szkriptet határoz meg.

Mentse el a fájlt és zárja be. Ezután rootként mondja meg a systemd-udevd-nek, hogy töltse be újra a szabályfájlokat (ez más adatbázisokat is betölt, például a kernelmodul indexét).

sudo udevadm control --reload

Most csatlakoztasson egy USB-meghajtót a gépéhez, és ellenőrizze, hogy a device_added.sh parancsfájl végrehajtódott-e. Először is létre kell hozni a scripts.log fájlt a /tmp alatt.

ls -l /tmp/scripts.log

Ezután a fájlban szerepelnie kell egy bejegyzésnek, például „USB-eszköz eltávolítása dátum_időpontban”, amint az a képernyőképen látható.

cat /tmp/scripts.log

Az udev-szabályok írásával és az udev kezelésével kapcsolatos további információkért tekintse meg az udev és az udevadm kézi bejegyzéseket a következő futtatásával:

man udev
man udevadm
Összegzés

Az Udev egy figyelemre méltó eszközkezelő, amely dinamikus módot biztosít az eszközcsomópontok beállítására a /dev könyvtárban. Gondoskodik arról, hogy az eszközök konfigurálása azonnal megtörténjen, amint csatlakoztatják őket és felfedezik őket. Információkat terjeszt egy feldolgozott eszközről vagy annak állapotának változásáról, a felhasználói térbe.

Ha bármilyen kérdése vagy gondolata van a témával kapcsolatban, használja a visszajelzési űrlapot.