Ígéretemhez híven folytatom a könyvtárszerkezet bemutatását, azon belül is nézzük meg a /dev könyvtárat. Ahogy a neve is jelzi, itt helyezkednek el az eszközkezelők (device). Pontosabban minden eszközhöz hozzá van rendelve egy fájl, amin keresztül elérhető az eszköz, legyen az akár videókártya, hangkártya, tv-kártya, egér, háttértároló, stb.
Lássunk példát device fájlokra:
bash$ ls –lak /dev brw-rw---- 1 root disk 8, 0 2009-03-03 17:13 sda brw-rw---- 1 root disk 8, 1 2009-03-03 16:14 sda1 brw-rw---- 1 root disk 8, 2 2009-03-03 17:13 sda2 brw-rw---- 1 root disk 8, 3 2009-03-03 17:13 sda3 brw-rw---- 1 root disk 8, 4 2009-03-03 17:13 sda4 brw-rw---- 1 root disk 8, 5 2009-03-03 16:14 sda5 ... crw-rw-rw- 1 root root 1, 3 2008-04-22 20:39 null ... crw-rw---- 1 root video 195, 0 2009-03-03 16:14 nvidia0 crw-rw---- 1 root video 195, 255 2009-03-03 16:14 nvidiactl ... crw-rw-rw- 1 root root 1, 5 2009-03-03 17:13 zero bash$
Most az egyéb számoktól és betűktől vonatkoztassunk el, csak nézzük az első oszlop első betűjét: b és c. Kétféle eszközfájl létezik: a karakteres (c) és a blokk (b) típusú. A másik érdekesség egy normális könyvtárlistához képest, az 5. és a 6. oszlop megléte. Ugyanis az eszközöket 2 rétegű struktúrába csoportosítjuk. Az első (ami jelen esetünkben 8, 1, 195) a főcsoport azonosítója, ami eszközönként más és más, de eszközön belül nem változik (például: háttértároló azonosítója). A másik az alcsoport-azonosító, ami az eszközön belüli alegységek saját számai (például: háttértárolón belüli partíciók azonosítója).
Belátható, hogy az így előre megszabott számozás mennyiségi korlátokat szab. Megszületett hát a devfs, amely az eszközt azonosító fő- és alcsoportot dinamikusan változtathatóvá tette. De leálltak a fejlesztésével, így a következő kernel széria (2.6.x) megjelenésével leváltotta az udev, ami a sysfs-t és a hotplug-ot használ a működése során. A probléma elő jön itt is, miszerint nem kompatibilis az előző megoldással, így idő kellett, amíg a programfejlesztők átálltak a használatára.
Talán érdemes megemlíteni még az uSDE-st is, ami az udev-hez hasonló felépítésű volt és az udev-vel egyidőben kezdték el írni. A készítése kezdetben titokban történt, és ez okozta a vesztét, nagy felháborodást váltott ki ezzel, el is halt a fejlesztés és az udev került ki győztesen.
udev-ről pár szóban
A /etc/udev/ könyvtárban találhatóak meg az udev beállító fájljai a rules.d könyvtár társaságában. Utóbbi könyvtár tartalmazza a különböző szabályokat magukban foglaló fájlokat. E szabályfájlok írják elő, hogy a különböző eszközökhöz milyen eszközfájlok tartoznak és ezekre milyen jogosultságok, információk (tulajdonos, csoport, jogosultság, stb…stb.) vonatkoznak.
Példaként nézzük meg a /etc/udev/rules.d/70-persistent-net.rules fájlt:
# PCI device 0x8086:0x104d (e1000) SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:...:55", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0" # PCI device 0x8086:0x4230 (iwl4965) SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="66:...:bb", ATTR{type}=="1", KERNEL=="wlan*", NAME="wlan0"
A két eszköz a net alrendszerhez tartozik, ATTR{address} tartalmazza a hálókártya MAC címét, valamint, hogy az eszköz hozzáadása után eth0/wlan0 néven legyen elérhető. Látható, hogy a hardware address használatával tudjuk nevesíteni a hálózati eszközöket, azaz ha később újabb hálókártyát rakunk a gépbe, ne kell aggódni, hogy a meglevő lan kártyáink címe megváltozik (ez fontos lehet például tűzfal szabályoknál). Érdemes észben tartani, hogy hálókártya cseréje (alaplapi hálókártya esetén alaplapcsere) esetén módosítanunk kell az adott eszközhöz (pl: eth0) tartozó ATTR{address} értékét. A módosítást a rendszer újraindításáva vagy a “/etc/init.d/udev restart” parancs kiadásával tudjuk érvényesíteni.
- Filesystem Hierarchy Standard (angol)
- Writing udev rules (angolul)