Udev

From Gentoo Wiki
Jump to:navigation Jump to:search
This page is a translated version of the page Udev and the translation is 100% complete.


Not to be confused with the deprecated eudev package/hu.


Az udev (user /dev) a systemd eszközkezelője a Linux kernel számára. Ez kezeli az eszközcsomópontokat a /dev könyvtárban, és minden felhasználói térbeli műveletet ellát az eszközök hozzáadásakor vagy az eltávolításukkor.

A udev a sys-apps/systemd-utils szoftvercsomagból alapértelmezett eszközkezelőként van használva a Gentoo operációs rendszerekben, amelyek a OpenRC init rendszert alkalmazzák, függetlenül a systemd init rendszertől.

Mi az udev?

A /dev könyvtár

A legtöbb Linux-felhasználó megérti, hogy a /dev/sda1 csak egy gyors módja annak, hogy a kernel által talált első lemez első partíciójára hivatkozzon. Ez elég könnyű, igaz?

De vegyük figyelembe az üzem közben cserélhető eszközöket, mint az USB, IEEE 1394, üzem közben cserélhető PCI stb. Ezek közül melyik az első eszköz, és meddig az? Mi lesz a többi készülék neve, ha az első eltűnik? Milyen hatással lesz ez a folyamatban lévő tranzakciókra? Nem lenne mókás, ha egy nyomtatási feladat hirtelen átkerülne egy csúcskategóriás lézernyomtatóból egy majdnem halott mátrixnyomtatóba, csak azért, mert valaki úgy döntött, hogy kihúzza a lézernyomtatót (ami véletlenül az első nyomtató volt)?

Lépjen be az eszközkezelőbe. Egy modern eszközkezelőnek:

  • Felhasználói térben fut.
  • Dinamikusan hoz létre és távolít el eszközfájlokat.
  • Konzisztens eszközelnevezést biztosít.
  • Felhasználói térben szolgáltat alkalmazásprogramozási felületet (API-t).

Minden alkalommal, amikor változás történik az eszközstruktúrán belül, a kernel egy uevent-et bocsát ki, amelyet az eszközkezelő veszi fel. az eszközkezelő ezután követi az /etc/udev/rules.d, /run/udev/rules.d és /lib/udev/rules.d könyvtárakat. Az uevent-ben található információk alapján megkeresi a kiváltáshoz szükséges szabályt vagy szabályokat, és végrehajtja a szükséges műveleteket. Ezek a műveletek magukban foglalhatják eszközfájlok létrehozását vagy törlését, és bizonyos firmware-fájlok kernelmemóriába való betöltését is kiválthatják.


Telepítés

Important
A udev frissítésekor ellenőrizze az udev frissítési útmutatót az olyan információkért, amelyek megelőzhetik az operációs rendszer bootolhatatlanságát.

Kernel

A udev a következő kernelopciókat igényli:

KERNEL
General setup  --->
    [*] Configure standard kernel features (expert users)  --->
        [ ] Enable deprecated sysfs features to support old userspace tools
        [*] Enable signalfd() system call
Enable the block layer  --->
    [*] Block layer SG support v4
Networking support  --->
    Networking options  --->
        <*> Unix domain sockets
Device Drivers  --->
    Generic Driver Options  --->
        ()  path to uevent helper
        [*] Maintain a devtmpfs filesystem to mount at /dev
    < > ATA/ATAPI/MFM/RLL support (DEPRECATED)  --->
File systems  --->
    [*] Inotify support for userspace
    Pseudo filesystems --->
        [*] /proc file system support
        [*] sysfs file system support

USE jelölőzászlók

A Portage szoftvercsomag-kezelő ismeri a udev USE jelölőzászlót, amely lehetővé teszi az udev támogatását más szoftvercsomagokban. Ennek a USE jelölőzászló értéknek a USE jelölőzászló listához való hozzáadása (alapértelmezett minden Linux profilban) automatikusan behúzza a virtual/udev szoftvercsomagot.

FILE /etc/portage/make.conf
USE="udev"

USE flags for sys-apps/systemd-utils Utilities split out from systemd for OpenRC users

+acl Add support for Access Control Lists
+kmod Enable kernel module loading via sys-apps/kmod
+tmpfiles Enable systemd-tmpfiles
+udev Enable systemd-udev (userspace device manager)
boot Enable systemd-boot (UEFI boot manager)
kernel-install Enable kernel-install
secureboot Automatically sign efi executables using user specified key
selinux !!internal use only!! Security Enhanced Linux support, this must be set by the selinux profile or breakage will occur
split-usr Enable behavior to support maintaining /bin, /lib*, /sbin and /usr/sbin separately from /usr/bin and /usr/lib*
sysusers Enable systemd-sysusers
test Enable dependencies and/or preparations necessary to run tests (usually controlled by FEATURES=test but can be toggled independently)
ukify Enable systemd-ukify

Emerge

A USE jelölőzászlók beállítása után frissítse az operációs rendszert annak érdekében, hogy a változtatások érvénybe lépjenek:

root #emerge --ask --changed-use --deep @world

Beállítás

Szolgáltatás

Az udev bootoláskor történő indítás érdekében adja hozzá a sysinit futási szinthez. Ez a következő parancs kiadásával hajtható végre root jogosultságokkal:

root #rc-update add udev sysinit

Fejlett beállítás

Szabályok

Az udev egy szabálykészletet biztosít, amely az uesemények (a kernel által küldött események) exportált értékeivel és a felfedezett eszköz tulajdonságaival egyezik. Egy megfelelő szabály esetleg elnevez és létrehoz egy eszközcsomópontot, valamint beállított programokat futtat az eszköz beállításához.

A szabálydefiníciók két helyen vannak tárolva:

  1. /lib/udev/rules.d/ – Ebben a könyvtárban található szabályokat bizonyos szoftvercsomagok telepítik, és általában a felhasználóknak nem kell módosítaniuk őket;
  2. /etc/udev/rules.d/ – Ez a könyvtár a végfelhasználó által meghatározott szabályok számára van fenntartva. Minden új szabályt ebben a könyvtárban kell hozzáadni;

Ezekben a könyvtárakban több szabályfájl (a .rules utótaggal) alfanumerikus sorrendben kerül bejárásra. A szabályfájlokban a udev olyan kifejezéseket talál, amelyek megfelelhetnek egy ueseménynek, valamint az állapotnak, amelyhez illeszkedik (az uesemény egy eszköz hozzáadása vagy eltávolítása miatt történik), és a végrehajtandó parancsnak.

Az eseményillesztés olyan információkon alapul, mint például:

  • Az uesemény SUBSYSTEM-je (milyen típusú eszközre lett az uesemény kiváltva);
  • Az elvégzett ACTION (hozzáadás, módosítás vagy eltávolítás);
  • Egy vagy több attribútum (ATTR vagy ATTRS segítségével), például az eszköz osztálya, gyártója vagy egyéb eszközinformációk;
  • A kernel által biztosított név (KERNEL segítségével), például sd* (SCSI/SATA lemezekhez) vagy input* (bejövő eszközökhöz, mint egerek és billentyűzetek);
  • Egy vagy több környezeti beállítás (ENV segítségével), amelyet az információ továbbítására használnak több szabály között.

A fent említett információk alapján a szabály meghatározhatja, hogy:

  1. Bizonyos információkat későbbi eseményekkel kell megosztani (környezeti változókon keresztül).
  2. Linkeket kell létrehozni a /dev könyvtárban.
  3. Parancsokat kell végrehajtani.

A udev minden megfelelő szabályra végrehajtja a műveletet (nem áll meg az első egyezés után), hogy rugalmas eszközkezelési megközelítést biztosítson.

Állandó eszköznevek

A kernel aszinkron módon észleli az eszközöket, az udev tükrözi a kernel sysfs fájlrendszerét, így az eszközök az észlelési sorrendben kerülnek elnevezésre és számozásra. Alapértelmezés szerint az udev nem biztosít tartós eszközneveket. Azonban egyes eszközosztályok számára léteznek mechanizmusok ezek biztosítására:

  • Az udev az adathordozókhoz további szimbolikus linkeket hoz létre az adathordozó azonosítója, címke, UUID és útvonala alapján. Tekintse meg a /dev/disk/by-* könyvtárat. Tehát a /dev/sda eszközfájl helyett használja a /dev/disk/by-label/SOME_LABEL fájlt.
  • Ugyanez érvényes a beviteli eszközökre a /dev/input könyvtárban.
  • Egyedi szabályok használatával a felhasználók saját eszközfájlokat hozhatnak létre.

Megjósolható hálózati interfész elnevezés

Az új hálózati interfész elnevezési konvenció eltérő. Ezért a szimbolikus linkeket, amelyeket a netifrc használ, újra kell kapcsolni. Használja a /etc/init.d/net.lo fájlt link célpontként azokhoz az interfésznevekhez, amelyeket hozzá kell adni. Ügyeljen arra, hogy a lentebb található parancsokban az <interface_name> helyére az aktuálisan a rendszeren lévő Ethernet interfésznevek kerüljenek. Az interfészek felfedezéséhez futtassa az ip link parancsot.

user $ip link

Hozzon létre egy szimbolikus linket a meglévő interfészekhez a /etc/init.d/ könyvtárban:

root #ln -s /etc/init.d/net.lo /etc/init.d/net.<interface_name>

Szerkessze a /etc/conf.d/net fájlt az összes interfészhez szükséges beállítással.

Adja hozzá a szkripteket az alapértelmezett futási szinthez, hogy az interfészek automatikusan elinduljanak:

root #rc-update add net.<interface_name> default

Opcionális: A megjósolható hálózati interfész elnevezés letiltása vagy felülbírálása

A kernel által biztosított hálózati eszköznevek, például eth0 vagy wlan0, rendszerindításkor általában megváltoznak (lásd dmesg) a /lib/udev/rules.d/80-net-setup-link.rules udev szabály és a /lib/systemd/network/99-default.link fájlban található NamePolicy szerint.

Ez a viselkedés többféleképpen tiltható le:

  1. Szimbolikus link létrehozása a /etc/systemd/network/99-default.link fájlhoz, amely a /dev/null könyvtárba mutat: ln -s /dev/null /etc/systemd/network/99-default.link.
  2. Egy alacsonyabb számozású .link fájl létrehozása a /etc/systemd/network könyvtárban, amely más nevet rendel az interfészhez.
  3. Az net.ifnames=0 paraméter megadása a kernel parancssorban.

Hivatkozás: https://systemd.io/PREDICTABLE_INTERFACE_NAMES/

Billentyűk és billentyűgombok újbóli elrendezése

A udev lehetőséget biztosít a billentyűk és billentyűgombok újbóli kiosztására a hwdb segítségével:

FILE /etc/udev/hwdb.d/keyboard-example.hwdb
evdev:name:AT Translated Set 2 keyboard:*
 KEYBOARD_KEY_db=58 # <scancode in HEX>=<keycode in DEC or keycode in HEX prefixed with 0x>

Az eszköz neve megtalálható a app-misc/evtest szoftvercsomag segítségével:

root #evtest
/dev/input/event3:	AT Translated Set 2 keyboard

Miután kiválasztotta az eszközt (az evtest egy interaktív eszköz) és megnyomott egy billentyűgombot, az evtest információkat jelenít meg a billentyűgombról. Ebben a példában a lenyomott billentyűgomb szkenkódja 0xDB, és az 58 billentyűgomb kódját utánozza:

Event: time 1708679751.175244, type 4 (EV_MSC), code 4 (MSC_SCAN), value db
Event: time 1708679751.175244, type 1 (EV_KEY), code 58 (KEY_CAPSLOCK), value 1

A teljes billentyűgombok listája elérhető a Linux forráskódban. Például a #define KEY_CAPSLOCK 58 átalakul 58 értékre.

Másik eszközök billentyűkódjai is engedélyezettek (például a bal egérgomb 0x110).

A módosítások végrehajtásához a hardveradatbázist, azaz a /etc/udev/hwdb.bin fájlt frissíteni kell (ez OpenRC esetén is megfelelő).

root #systemd-hwdb update

Az új beállítás az újraindítás után lép életbe.

Használat

Néhány hasznos parancs:

  • Az összes udev tevékenység figyelése:
root #udevadm monitor
  • Az összes üzenet megjelenítése egy adott eszközfájlról:
root #udevadm info --query=all --name=/dev/DEVICE_FILE
  • Az adott sys path eszközfájlról szóló udev információ megjelenítése (ez beszerezhető az udevadm monitor segítségével):
root #udevadm info --attribute-walk --path=/devices/DEVICE_FILE
  • Udev szabályfájl példa – állandó név hozzárendelése egy Ethernet eszközhöz:
FILE /etc/udev/rules.d/50-ethernet.rules
SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="01:23:45:67:89:ab", NAME="ethernet0"
  • Miután módosította a szabályfájlt a /etc/udev/rules.d/ könyvtárban, vagy indítsa újra az operációs rendszert, vagy töltse be újra az udev szabályokat az alábbi paranccsal:
root #udevadm control --reload-rules
  • A már hozzáadott eszközök esetén (például csatlakoztatott USB) az újratöltött szabályok akkor lépnek életbe, ha az eszközt megváltoztatják (például újracsatlakoztatják az USB-t), vagy ha az udev ismét kernel eseményeket kér a udevadm trigger paranccsal. Különböző eseményakciók aktiválhatók. Alapértelmezetten a change eseményakció kerül aktiválásra.
root #udevadm trigger

További információért tekintse meg a udevadm(8) man page oldalt.

Hibaelhárítás

Naplófigyelő üzenetek

Az összes üzenet naplózásához, amikor az udevadm monitor fut, módosítsa a következő beállításfájlt:

FILE /etc/conf.d/udev
udev_monitor="YES"

Ez létrehozza az új naplófájlt a következő helyen: /run/udev/udevmonitor.log.

Hibakeresési mód

A hibakeresési mód engedélyezése több naplóüzenetet generál:

FILE /etc/conf.d/udev
udev_debug="YES"

Állítsa be a naplózási prioritást:

FILE /etc/udev/udev.conf
udev_log="debug"

A /run/udev/debug.log naplófájl létrejön, de nem kerülnek bele üzenetek. Az udev legújabb verziói minden üzenetet a dmesg naplóba írnak.

Hiányzó /dev/null és /dev/console eszközfájlok

Néhány udev verzió megfelelő működéséhez szüksége van a /dev/null és /dev/console fájlokra, de ezeket önállóan nem tudja létrehozni. Az alábbi parancsokkal root jogosultsággal manuálisan hozhatja létre ezeket az eszközfájlokat:

root #mkdir test
root #mount --bind / test
root #cd test/dev
root #mknod -m 660 console c 5 1
root #mknod -m 660 null c 1 3
root #cd ../..
root #umount test
root #rmdir test

Hálózati kártya (a NIC) az eth0 interfészhez lett hozzárendelve, de áthelyeződött az eth1 interfészre

Azon felhasználóknak akiknek az alaplapjukon kettő hálózati kártyájuk (NIC) van, találkozhatnak olyan helyzettel, amikor a ip link nem mutat eth0 vagy eth1 interfészt. A dmesg kimenetben a hálózati kártya először eth0 néven azonosítható, majd később áthelyeződik az eth1 interfész nevére. A ip link parancs futtatása szintén az eth1 interfészként jeleníti meg a hálózati kártyát. Ennek oka az, hogy alapértelmezés szerint a kernel által kiosztott neveket használják. A felhasználóknak egyedi szabályokat kell írniuk, például a következő fájlban: /etc/udev/rules.d/70-my-network.rules, hogy szabadon választható neveket, például lan0 vagy wireless0 használjanak, vagy alkalmazzák az előre meghatározott interfészneveket, amelyek az udev 197-es verziójától kezdve alapértelmezés szerint engedélyezve vannak.

Ne feledje, hogy el kell távolítani a régi fájlokat a korábbi udev verziókból is.

root #rm /etc/udev/rules.d/70-persistent-net.rules /etc/udev/rules.d/80-net-setup-link.rules /etc/udev/rules.d/80-net-name-slot.rules /etc/systemd/network/99-default.link

Ügyeljen arra, hogy ne adja meg a net.ifnames=0 beállítást a kernel parancssorában. Ez a beállítás teljesen letiltaná az udev előre meghatározott interfésznév funkcióját.

További olvasnivaló a témában

Külső források