Upozornění :
Tento dokument již neplatí a není udržován.
|
Průvodce devfs
1.
Co je devfs?
Staré (dobré?) časy
Varování:
devfs je překonaný a byl ze stabilní větve 2.6 ve verzi 2.6.13
odstraněn. Uživatelům používajícím jádra 2.6 je tímto doporučeno, aby přešli na
udev. Pro další informace o udev si prosím přečtěte Gentoo průvodce udev.
|
Tradiční implementace Linuxu poskytují svým uživatelům abstraktní adresář
zařízení nazývaný /dev. Uvnitř tohoto adresáře může uživatel
nalézt soubory zařízení (device nodes), speciální soubory, které
reprezentují různá zařízení uvnitř systému, například /dev/hda
představující první IDE zařízení. Tento přístup umožňuje uživatelům vytvářet
programy, které pracují s hardwarem tak, jako by to byl běžný soubor,
místo aby museli využívat speciální API.
Soubory zařízení jsou rozděleny do dvou skupin, na znaková a
bloková. První skupinu tvoří zařízení, na nichž nejsou čtení ani zápis
bufferovány, kde se nepoužívá vyrovnávací paměť. Druhá skupina je přirozeně
tvořena hardwarem, jehož čtení a zápis bufferovány jsou. Z obou typů
zařízení může čtení probíhat po znacích nebo blocích. Označení může tedy znít
zmateně a, popravdě řečeno, je nesprávné.
Podíváte-li se na určitý soubor zařízení, můžete vidět něco takového:
Výpis kódu 1.1: Zobrazení informací o souboru zařízení |
# ls -l /dev/hda
brw-rw---- 1 root disk 3, 0 Jul 5 2000 /dev/hda
|
V předchozím příkladu jsme viděli, že /dev/hda je blokové
zařízení. Důležitější však je, že má přiřazena dvě čísla: 3, 0.
Tento pár čísel je nazýván major-minor pár, hlavní a vedlejší číslo. Je
využíván kernelem k mapování souboru zařízení na skutečný hardware. Major
odpovídá určitému zařízení, minor jeho části nebo dílčímu celku. Vypadá to
nejasně? Není.
Jako příklad můžeme uvést /dev/hda4 nebo /dev/tty5.
První soubor zařízení odpovídá čtvrtému oddílu na prvním IDE zařízení. Jeho
major-minor pár je 3, 4. Jinými slovy, minor odpovídá oddílu,
zatímco major odpovídá zařízení. Druhý příklad má major-minor pár 4,
5. V tomto případě major odpovídá ovladači terminálu a minor číslu
terminálu (zde pátého).
Problémy
Pokud si takový /dev zběžně prohlédnete, zjistíte, že v něm
nejsou uvedena pouze vaše zařízení, nýbrž všechna možná, která si lze
představit. Jinak řečeno, máte soubory i pro zařízení, která nemáte. Správa
takovéto skupiny zařízení je přinejmenším nešikovná. Představte si například,
že potřebujete změnit přístupová práva u všech souborů, ke kterým existuje
ve vašem systému odpovídající zařízení, a ostatní ponechat beze změny.
Když do svého systému přidáte nový hardware, pro který dosud nemáte soubor
zařízení, budete si takový soubor muset vytvořit. Zkušení uživatelé vědí, že je
to možné provést pomocí ./MAKEDEV uvnitř stromu /dev, ale
víte okamžitě, jaký soubor zařízení přesně vytvořit?
Máte-li programy pracující s hardwarem přes soubory zařízení, nemůžete mít
root oddíl připojený pouze pro čtení, přestože není žádný jiný důvod mít jej
připojený i pro zápis. Zároveň nelze mít /dev umístěný na
samostatném oddílu, protože mount potřebuje /dev
k připojování oddílů.
Řešení
Jak si dovedete představit, "kerneloví" hackeři vymysleli nejedno řešení těchto
problémů. Mnoho z nich má však jiné trhliny, jak je uvedeno
v http://www.atnf.csiro.au/people/rgooch/linux/docs/devfs.html#faq-why.
My zde nebudeme hovořit o všech těchto implementacích, ale zaměříme se na jednu,
která pronikla do oficiálních zdrojových kódů jádra: devfs.
devfs jako absolutní vítěz?
devfs řeší všechny zmíněné problémy. Poskytuje uživateli pouze existující
zařízení, přidává soubory, jakmile jsou nová zařízení nalezena a umožňuje
připojit kořenový souborový systém jen pro čtení. Řeší i mnoho dalších problémů,
které zde nejsou uvedeny, protože jsou pro uživatele méně zajímavé.
Například se s devfs nemusíte trápit s major-minor páry. Jsou sice
stále podporovány kvůli zpětné kompatibilitě, ale nejsou zapotřebí. To Linuxu
umožňuje podporovat ještě více zařízení, jelikož teď už neexistují žádné limity
(čísla mají vždy své meze :).
Jenže devfs přichází se svými vlastními problémy, které sice nejsou pro koncové
uživatele příliš viditelné, ale pro vývojáře kernelu jsou natolik závažné, aby
devfs označili za obsolete (zastaralý a překonaný) podporou udev, který Gentoo podporuje a používá jako
výchozí na většině architektur od verze 2005.0 s jádrem řady 2.6.
Více o tom, proč je devfs označen jako obsolete, se dozvíte v udev
FAQ a udev
versus devfs.
2.
Orientace ve stromu zařízení
Adresáře
Jedna z prvních věcí, kterých si můžete všimnout, je, že devfs používá
k seskupování zařízení adresáře, což zlepšuje čitelnost.
Například všechna zařízení související s IDE naleznete v adresáři
/dev/ide/ a SCSI zařízení v /dev/scsi/. SCSI a
IDE disky jsou zobrazeny stejným způsobem, tedy obojí mají stejnou strukturu
podadresářů.
IDE a SCSI disky jsou řízeny adaptérem (integrovaným nebo samostatnou kartou),
nazývaným host. Každý adaptér má několik kanálů. Kanálu se říká
bus (sběrnice). Na každém kanálu můžete být několik ID. Takové ID
identifikuje disk a říká se mu target (cíl). Některá SCSI zařízení mají
více tzv. LUN (Logical Unit Numbers), například zařízení obsluhující
najednou několik médií (rychlé hi-end páskové jednotky). Většina zařízení má
většinou jeden LUN, lun0/.
Takže, tam kde byl předtím /dev/hda4, máme nyní
/dev/ide/host0/bus0/target0/lun0/part4. To je mnohem jednodušší...
ne, nehádejte se se mnou... to je jednodušší... a basta! :)
Poznámka:
Můžete také použít unixovatější označení souborů zařízení, jako třeba
c0b0t0u0p2. Tyto jsou k nalezení
v /dev/ide/hd, /dev/scsi/hd atd.
|
Pro představu, toto je výpis adresářů z mého notebooku:
Výpis kódu 2.1: Adresáře uvnitř /dev |
cdroms/ cpu/ discs/ floppy/
ide/ input/ loop/ misc/
netlink/ printers/ pts/ pty/
scsi/ sg/ shm/ sound/
sr/ usb/ vc/ vcc/
|
Zpětná kompatibilita při používání devfs
Používání tohoto nového způsobu značení zní pěkně, ale některé nástroje a
programy používají předchozí, starý způsob. Pro zajištění funkčnosti systému je
k dispozici devfsd. Tento démon vytváří symbolické linky se starými
názvy ukazující na nové soubory zařízení.
Výpis kódu 2.2: Vytvořené symbolické odkazy |
$ ls -l /dev/hda4
lr-xr-xr-x 1 root root 33 Aug 25 12:08 /dev/hda4 -> ide/host0/bus0/target0/lun0/part4
|
S devfsd můžete také nastavit přístupová práva, vytvářet nové
soubory zařízení, definovat akce a podobně. To vše je popsáno
v následující kapitole.
3.
Správa stromu zařízení
Restart devfsd
Pokud změníte soubor /etc/devfsd.conf a chcete, aby se změny ihned
promítly do systému, nemusíte restartovat. V závislosti na tom, co chcete,
můžete použít následující signály:
SIGHUP přiměje devfsd znovu načíst konfigurační soubor, načíst
sdílené objekty a vygenerovat události REGISTER pro každý listový uzel stromu
zařízení.
SIGUSR1 udělá totéž, avšak bez generování událostí REGISTER.
K zaslání signálu použijte kill nebo killall:
Výpis kódu 3.1: Zaslání signálu SIGHUP devfsd |
# kill -s SIGHUP `pidof devfsd`
# killall -s SIGHUP devfsd
|
Odstranění zpětně kompatibilních symbolických linků
Varování:
V současné době Gentoo nemůže bez těchto linků fungovat.
|
Jestliže chcete zpětně kompatibilní linky znečisťující /dev
odstranit ze svého Gentoo (Gentoo je implicitně aktivuje), otevřete soubor
/etc/devfsd.conf a odstraňte z něj následující řádky:
Výpis kódu 3.2: /etc/devfsd.conf pro zpětnou kompatibilitu |
REGISTER .* MKOLDCOMPAT
UNREGISTER .* RMOLDCOMPAT
|
Aby se změny projevily, musíte restartovat (počítač :-) ).
Zakázání funkce autoload
Jestliže zavedete modul, devfs automaticky vytvoří soubory zařízení. Pokud Vám
toto chování nevyhovuje, odstraňte následující řádek
z /etc/devfsd.conf:
Výpis kódu 3.3: /etc/devfsd.conf, funkce autoload |
LOOKUP .* MODLOAD
|
4.
Položky vztahující se k přístupovým právům
Nastavení/změna přístupových práv pomocí devfsd
Poznámka:
Tyto instrukce platí, pokud je v souboru
/etc/pam.d/system-auth zakázána pam_console. Pokud ji povolíte, má
poslední slovo ve věcech přístupových práv PAM.
|
Chcete-li nastavit přístupová práva pomocí /etc/devfsd.conf,
použijte syntaxi z následujícího příkladu:
Výpis kódu 4.1: Přístupová práva v /etc/devfsd.conf |
REGISTER ^cdroms/.* PERMISSIONS root.cdrom 0660
|
Druhé pole je skupina zařízení, začínající z /dev. Jde o
regulární výraz, takže můžete jedním pravidlem vybrat několik souborů zařízení.
Čtvrté pole určuje vlastnictví souboru a páté obsahuje přístupová práva.
Jak manuálně nastavit přístupová práva a nechat je devfsd uložit
Výchozí chování Gentoo je toto: provedete-li chown (změnu vlastníka) nebo
chmod (změnu práv) u některého ze souborů zařízení, devfsd
tyto změny uloží, takže zůstanou platné i po restartu. To díky tomu, že soubor
/etc/devfsd.conf obsahuje následující řádky:
Výpis kódu 4.2: /etc/devfsd.conf pro ukládání přístupových práv |
REGISTER ^pt[sy]/.* IGNORE
CHANGE ^pt[sy]/.* IGNORE
CREATE ^pt[sy]/.* IGNORE
DELETE ^pt[sy] IGNORE
REGISTER ^log IGNORE
CHANGE ^log IGNORE
CREATE ^log IGNORE
DELETE ^log IGNORE
REGISTER .* COPY /lib/dev-state/$devname $devpath
CHANGE .* COPY $devpath /lib/dev-state/$devname
CREATE .* COPY $devpath /lib/dev-state/$devname
DELETE .* CFUNCTION GLOBAL unlink
/lib/dev-state/$devname
RESTORE /lib/dev-state
|
Jinak řečeno, změněné soubory zařízení jsou, jakmile ke změně dojde,
překopírovány do /lib/dev-state odkud jsou při každém restartu
kopírovány zpět do /dev.
Jinou možností je připojit /lib/dev-state do /dev při
startu systému. Aby to bylo možné, musíte se ujistit, že devfs není připojován
automaticky (to znamená, že budete možná muset přeložit jádro) a že existuje
/dev/console. Potom někam na začátek startovacích skriptů vložte
následující:
Výpis kódu 4.3: Připojení /lib/dev-state do /dev |
mount --bind /dev /lib/dev-state
mount -t devfs none /dev
devfsd /dev
|
5.
Další zdroje
Chcete-li se o devfs dozvědět více, prohlédněte si následující zdroje.
Manuálová stránka devfsd.conf vysvětluje syntaxi souboru
/etc/devfsd.conf. Pro její zobrazení spusťte příkaz man
devfsd.conf.
devfs
často kladené otázky vysvětlí "všechno", co se týká devfs. Obsahuje také
popis vnitřní struktury devfs a způsobů, jak podporovat devfs v ovladačích.
Na LinuxJournal je zajímavý
článek o devfs pro
řízení a správu.
Daniel Robbins napsal soubor článků pro IBM's DeveloperWorks o vyspělých
souborových systémech. Tři z nich jsou o devfs:
Obsah tohoto dokumentu je licencován pod licencí Creative Commons -
Attribution / Share Alike.
|