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.