Vyhledávání na webu

Jak používat Udev pro detekci a správu zařízení v Linuxu


Udev (uživatelský prostor /dev) je linuxový subsystém pro dynamickou detekci a správu zařízení od verze jádra 2.6. Jedná se o náhradu devfs a hotplug.

Dynamicky vytváří nebo odebírá uzly zařízení (rozhraní k ovladači zařízení, které se v systému souborů zobrazuje jako běžný soubor uložený v adresáři /dev) při spouštění nebo pokud přidáte zařízení do systému nebo zařízení ze systému odebrat. Poté šíří informace o zařízení nebo změnách jeho stavu do uživatelského prostoru.

Jeho funkcí je 1) dodávat systémovým aplikacím události zařízení, 2) spravovat oprávnění uzlů zařízení a 3) může vytvářet užitečné symbolické odkazy v adresáři /dev pro přístup k zařízením nebo dokonce přejmenovávat síťová rozhraní. .

Jednou z výhod udev je, že může používat trvalé názvy zařízení, aby bylo zaručeno konzistentní pojmenování zařízení po restartování, a to bez ohledu na pořadí jejich zjišťování. Tato funkce je užitečná, protože jádro jednoduše přiřadí nepředvídatelná jména zařízení na základě pořadí zjišťování.

V tomto článku se naučíme, jak používat Udev pro detekci a správu zařízení v systémech Linux. Všimněte si, že většina, ne-li všechny běžné moderní distribuce Linuxu, přichází s Udev jako součást výchozí instalace.

Naučte se základy Udev v Linuxu

Démon udev, systemd-udevd (nebo systemd-udevd.service) komunikuje s jádrem a přijímá ueventy zařízení > přímo z něj pokaždé, když přidáte nebo odeberete zařízení ze systému nebo zařízení změní svůj stav.

Udev je založen na pravidlech – jeho pravidla jsou flexibilní a velmi výkonná. Každá přijatá událost zařízení je porovnána se sadou pravidel načtených ze souborů umístěných v /lib/udev/rules.d a /run/udev/rules.d.

Soubory vlastních pravidel můžete zapsat do adresáře /etc/udev/rules.d/ (soubory by měly končit příponou .rules) pro zpracování zařízení. Všimněte si, že soubory pravidel v tomto adresáři mají nejvyšší prioritu.

Chcete-li vytvořit soubor uzlu zařízení, udev potřebuje identifikovat zařízení pomocí určitých atributů, jako je štítek, sériové číslo, použité hlavní a vedlejší číslo, číslo zařízení sběrnice atd. mnohem více. Tyto informace jsou exportovány systémem souborů sysfs.

Kdykoli připojíte zařízení k systému, jádro jej detekuje a inicializuje a v adresáři /sys/ se vytvoří adresář s názvem zařízení, ve kterém jsou uloženy atributy zařízení.

Hlavním konfiguračním souborem pro udev je /etc/udev/udev.conf ak ovládání běhového chování démona udev můžete použít nástroj udevadm.

Chcete-li zobrazit přijaté události jádra (uevents) a události udev (které udev odesílá po zpracování pravidla), spusťte udevadm pomocí příkazu monitor. Poté připojte zařízení k vašemu systému a sledujte z terminálu, jak je zpracována událost zařízení.

Následující snímek obrazovky ukazuje výňatek z události ADD po připojení USB flash disku k testovacímu systému:

udevadm monitor 

Chcete-li zjistit název přiřazený vašemu USB disku, použijte nástroj lsblk, který načte souborový systém sysfs a udev db a shromáždí informace o zpracovávaných zařízeních.

 
lsblk

Z výstupu předchozího příkazu je USB disk pojmenován sdb1 (absolutní cesta by měla být /dev/sdb1). Chcete-li zjistit atributy zařízení z databáze udev, použijte příkaz info.

udevadm info /dev/sdb1

Jak pracovat s pravidly Udev v Linuxu

V této části stručně probereme, jak psát pravidla udev. Pravidlo se skládá ze seznamu jednoho nebo více párů klíč–hodnota oddělených čárkami. Pravidla vám mimo jiné umožňují přejmenovat uzel zařízení z výchozího názvu, upravit oprávnění a vlastnictví uzlu zařízení, spustit provádění programu nebo skriptu, když je uzel zařízení vytvořen nebo odstraněn.

Napíšeme jednoduché pravidlo pro spuštění skriptu při přidání USB zařízení a při jeho odebrání z běžícího systému.

Začněme vytvořením dvou skriptů:

sudo vim /bin/device_added.sh

Přidejte následující řádky do skriptu device_added.sh.

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

Otevřete druhý skript.

sudo vim /bin/device_removed.sh

Poté přidejte následující řádky do skriptu device_removed.sh.

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

Uložte soubory, zavřete a udělejte oba skripty spustitelnými.

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

Dále vytvoříme pravidlo, které spustí provádění výše uvedených skriptů, nazvané /etc/udev/rules.d/80-test.rules.

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

Přidejte do něj tato dvě následující pravidla.

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"

kde:

  • "==": je operátor pro porovnání rovnosti.
  • "+=": je operátor pro přidání hodnoty do klíče, který obsahuje seznam položek.
  • SUBSYSTÉM: odpovídá podsystému zařízení události.
  • AKCE: odpovídá názvu akce události.
  • ENV{DEVTYPE}: odpovídá hodnotě vlastnosti zařízení, v tomto případě typu zařízení.
  • RUN: Určuje program nebo skript, který se má spustit jako součást zpracování události.

Uložte soubor a zavřete jej. Poté jako root řekněte systemd-udevd, aby znovu načetl soubory pravidel (také znovu načte další databáze, jako je index modulu jádra), spuštěním.

sudo udevadm control --reload

Nyní připojte USB disk k počítači a zkontrolujte, zda byl spuštěn skript device_added.sh. Nejprve by měl být vytvořen soubor scripts.log pod /tmp.

ls -l /tmp/scripts.log

Soubor by pak měl obsahovat záznam jako „Zařízení USB bylo odstraněno v date_time“, jak je znázorněno na snímku obrazovky.

cat /tmp/scripts.log

Další informace o psaní pravidel udev a správě udev naleznete v ručních položkách udev a udevadm spuštěním:

man udev
man udevadm
souhrn

Udev je pozoruhodný správce zařízení, který poskytuje dynamický způsob nastavení uzlů zařízení v adresáři /dev. Zajišťuje, že zařízení jsou nakonfigurována, jakmile jsou zapojena a objevena. Šíří informace o zpracovávaném zařízení nebo změnách jeho stavu do uživatelského prostoru.

Máte-li jakékoli dotazy nebo myšlenky, které byste k tomuto tématu mohli sdílet, použijte formulář pro zpětnou vazbu.