7.4. Ovládání zařízení a modulů v systému LFS

V Chapter 6, jsme nainstalovali balíček Udev.Předtím,než se budeme zabývat jak v detailech pracuje,si ukážeme předchozí metody ovládání zařízení.

Systémy Linux hlavně tradičně používají metodu statické tvorby zařízení,ve které je vytvořeno pod /dev mnoho uzlů zařízení(někdy až tisíce zařízení),bez ohledu na to,jestli odpovídající hardware doopravdy existuje.Toto typicky provádí skript MAKEDEV,který obsahuje mnoho volání programu mknod s odpovídajícímí majoritními a minoritními číly zařízení,pro každé zařízení,které na světě existuje.Použitím metody Udev,jsou vytvořeny uzly zařízení,pouze pro ty zařízení,které detekovali jádro.Protože tyto uzly zařízení jsou vytvářené pro každém bootování systému,jsou uložené na systému souborů tmpfs (virtuální systém souborů,který se celý nachází v sysétmové paměti).Uzly zařízení nevyžadují mnoho místa a proto je množství použité paměti zanedbatelné.

7.4.1. Historie

V únoru 2000 byl přidán do jádra 2.3.46 nový systém souborů nazvaný devfs a byl k dispozici ve stabilních jádrech série 2.4.Ačkoliv se nacházel ve zdrojových kódech jádra,tato metoda dynamické tvorby zařízení,nikdy se nedočkala velké podpory jaderných vývojařů.

Hlavní problém s přístupem přijatém devfs byl způsob jakým ovládal detekci,tvorbu a pojmenovávání zařízení.Pozdější problém a pojmenováváním uzlů zařízení byl nejvížnější.Bylo přijato,že pokud názvy zařízení umožňují konfiguraci,potom pravidla pojmenovávání zařízení může určit pouze systémový administrátor.Systém souborů devfs také trpěl souběhem v základním návrhu a jeho návrh nemohl být opraven,bez značné revize jádra.Byl také označen zastaralým díky nedostatku podpory.

S vývojem nestabilního jádra 2.5 později vydaného jako stabilní série 2.6,přišel nový vitruální systém souborů sysfs.Úloha sysfs je exportovat pohled na systémovou hardwarovou konfiguraci do procesů v uživateslkém prostoru.S reprezentací v uživatelském prostoru,začala být možnost náhrady devfs realističtější.

7.4.2. Implementace Udev

Systém souborů sysfs byl v krátkostí zmíněn výše.Někoho může zajímat jak sysfs ví o zařízeních,které se v systému nacházejí a která čísla mají pro ně být použita.Ovladače,které jsou zakompilovány do jádra, registrují objekty v sysfs jak jsou detekován jádrem.Pro ovladače zkompilované jako moduly,se registrace provede jak je modul načten.Po té co je systém souborů sysfs připojen (na /sys),data která zakompilované ovladače zaregistrují s sysfs se zpřístupní do uživatelských procesů a udevu,který vytvoří uzly zařízení.

Initskript S10udev se stará o tvoření těchto uzlů zařízení,poté co Linux nabootuje.Tento skript začíná registrací /sbin/udevsend jako ovladače událostí hotplugu.Události hotplugu (popsané níže) nejsou obvykle generovány v této fázi,ale udev je registrován pouze v případě,že se objeví.Program udevstart poté prochází systém souborů /sys a vytváří zařízení pod /dev,které odpovídají popisu.Na příklad /sys/class/tty/vcs/dev obsahuje řetězec “7:0” Tento řetězec je použit udevstartem k vytvoření /dev/vcs s hlavním číslem 7 a vedlejším číslem 0.Jména a oprávnění uzlů vytvořených v adresáři /dev jsou konfiguravány podle pravidel specifikovaných v souborech nacházejících se v adresáři /etc/udev/rules.d/.Jsou číslovány pdobných způsobem jako balíček LFS-Bootscripts.Pokdu udev nemůže najít pravidlo pro vytvoření zařízení,vytvoří zařízení s výchozímioprávněními 660 a vlastníkem root:root.

Pokud je předchozí fáze hotová,všechny zařízení,které se v sytému nacházejí a mají zkompilované ovladače jsou k dipozici.Toto nás vede k zařízením,které mají modulární ovladače.

Dříve jsme zmínili koncept “ovladače událostí hotplugu.”Pokud je jádrem detekováno připojení nového zařízení,jádto vygeneruje udílost hotplugu a podíví se do souboru /proc/sys/kernel/hotplug,aby poznalo uživatelský program,který ovládá připojení zařízení.Bootskript udev registroval jako tento ovladač udevsend.Při generaci těchto událostí hotplugu,jádro řekne udevu,aby zkontroloval v systému souborů /sys informace patříci tomoto novému zařízení a vytvořil pro něj v /dev záznam.

Toto nám přináší jeden problém,který s udevem existuje,stejně jako s devfs dříve.Obvykle se nazývá jako problém “kuřete a vejce”.Hodně Linuxových distribucí ovládá načítání modulů pomocí záznamu v /etc/modules.conf.Přístup k uzlu zařízení způsobuje,že se načte odpovídající modul jádra.S udevem tato metoda nepracuje,protože uzly zařízení neexistují,dokud není modul načten.Aby se to vyřešilo bylo do balíčku LFS-Bootscipts přidán bootskript S05modules společně se souborem /etc/sysconfig/modules.Pokud přidáte jmena modulů do souboru modules,budou načteny když se počítač zapíná.Toto umožňuje udevu detekovat zařízení a vytvořit odpovídající uzly zařízení.

Všimněte si,že na pomalejších počítačích,nebo ovladačům,které vytvářejí mnoho uzlů zařízení,může zabrat proces tvorby zařízení několik sekund.Toto znamená,že některé uzly zařízení nebudou ihned k dospozici.

7.4.3. Ovládání hotplugových/dynamických zařízení

Když připojíte zařízení jako Universal Serial Bus (USB) MP3 přehrávač,jádro rozpozná,že zařízení je nyní připojeno a vygeneruje událost hotplugu.Pokud je ovladač již načten(jestli je zakompilován pro jádra,nebo pokud byl načten pomocí bootscriptu S05modules),udev bude volán,aby vytvořil odpovídající uzel(uzly) zařízení podle dat sysfs přístupných v /sys.

Pokud ovladač pro již připojené zařízení je přístupný jako modul,které ještě není načten,balíček Hotplug načte odpovídající moduly a zpřístupní toto zařízení vytvořením uzlu(ů) zařízení.

7.4.4. Problems with Creating Devices

Dále se nachází několik známých problémů s automatickou tvorbou uzlů zařízení:

1) Ovladač jádra neexportuje data do sysfs.

Toto je nejobvyklejší o ovladačů třetách stran z vnějšího stromu jádra.Udev nedokáže automaticky vytvořit uzly zařízení pro tyto ovladače.Použijte konfigurační soubor /etc/sysconfig/createfiles,abyste manuálně vytrvořili tyto zařízení.Podívejte se do souboru devices.txt v dokumentaci jádra,nebo dokumentaci tohoto ovladače,abyste nalezli zprávná majoritní a minoritní čásla.

2) Je vyžadováno nehardwarové zařízení.Toto je nejobyklejší s modulem kompatibility Open Sound System (OSS) projektu Advanced Linux Sound Architecture (ALSA).Tyto typy zařízení můžou být ovládáný dvěmi cestami:

  • Přidáním jmen modulů do /etc/sysconfig/modules

  • Použití řádku “install” v /etc/modprobe.conf.Toto říká příkazu modprobeže pokud načítá tento modul,má zároveň načíst ještě jiný modul.”Na příklad:

    install snd-pcm modprobe -i snd-pcm ; modprobe \
        snd-pcm-oss ; true

    Toto způsobí,že systém načte moduly snd-pcm a snd-pcm-oss,když je zachycen požadavek k načtení ovladače snd-pcm.

7.4.5. Užitečná četba

Další užitečná četva je k dispozici na následujících sídlech: