GNU/Linux >> Znalost Linux >  >> Linux

Linux – Sysfs a Devtmpfs?

Ulrich Dangel velmi dobře vysvětluje rozdíl mezi devtmpfs a udev.

A co sysfs?

Chápu, že jádro používá sysfs k exportu uzlů zařízení do uživatelského prostoru, který má používat udev. Takže devtmpfs a sysfs jsou stejné? Pokud ano, proč používají různá jména? Pokud ne, jaký je skutečný rozdíl mezi sysfs a devtmpfs?

Přijatá odpověď:

jádro používá sysfs k exportu uzlů zařízení do uživatelského prostoru, který bude používat udev

Ne. Sysfs neobsahuje uzly zařízení. Sysfs obsahuje hlavně soubory, které poskytují informace o zařízeních, a také některé soubory, které umožňují procesům řídit, jak zařízení fungují. Zařízení však většinou nelze používat prostřednictvím toho, co poskytuje sysfs.

Vezměme si například pevný disk. Někde pod /sys/devices je pro to adresář , s cestou, která závisí na tom, jak je připojen k počítači (např. /sys/devices/pci0000:00/… pro disk připojený k řadiči, který je připojen k primární sběrnici PCI počítače). V tomto adresáři můžete najít různé informace, jako je jeho velikost, zda je vyjímatelný, stav napájení atd. Existují také podadresáře pro oddíly. Ale není tam nic, co by umožňovalo přístup k obsahu disku. Jinde v /sys , jsou zde symbolické odkazy na adresář odpovídající danému disku:v /sys/block , v /sys/class/block , atd. Ale stále nic pro přístup k obsahu disku.

V /dev , záznam pro disk je speciální soubor – blokové zařízení. Tento soubor umožňuje procesům číst a zapisovat obsah disku. (Ačkoli u disku k tomu obvykle nedochází; místo toho je připojen obsah disku – nebo oddílu –, takže jádro přistupuje k zařízení, procesy nikoli.)

Soubory zařízení umožňují provádět některé operace jiné než čtení a zápis obsahu prostřednictvím ioctl. Bylo by možné poskytnout všechny informace a ovládací rozhraní, která poskytuje sysfs prostřednictvím ioctl v souboru zařízení. To by však bylo méně výhodné z několika důvodů:

  • Se samostatnými soubory v /sys , oprávnění lze nastavit na jemnozrnném základě. S jedním souborem na zařízení v /dev , je to všechno nebo nic.
  • Aplikace mohou snadno číst a zapisovat samostatné soubory. Stačí použít cat nebo echo . S ioctl je to mnohem těžší:neexistuje žádné rozhraní shellu, často žádné rozhraní v jiných vyšších jazycích.
  • U ioctl musí být příkaz zakódován do čísla, nikoli do názvu, a formát argumentů musí být definován na binární úrovni. Použití názvů a jednoduchých textových formátů usnadňuje psaní softwaru.

V opačném směru by bylo možné poskytnout přístup k obsahu zařízení prostřednictvím souboru v sysfs. To by ale vyžadovalo další práci v jádře:sysfs je navržen primárně pro obsluhu malých souborů a symbolických odkazů a bez ioctl podporu, kterou stávající aplikace očekávají. Nemyslím si, že by rozšíření sysfs tak, aby podporovalo stávající typy zařízení, mělo významný přínos, a proto by soubory zařízení nadále existovaly.

Související:Linux – Jak zjistit, jaké pevné disky jsou v systému?

Sysfs je automaticky naplněn jádrem, což odráží aktuálně dostupná zařízení v reálném čase. Význam souboru v sysfs vychází z jeho cesty, kterou volí ovladač, který daný soubor poskytuje. /dev funguje jinak:význam souboru vychází z typu souboru zařízení (blok nebo znak) a jeho hlavních a vedlejších čísel (to je to, co ls -l seznamy místo velikosti souboru pro zařízení). Tradičně /dev byl statický, se soubory zařízení vytvořenými během instalace systému; ale to nefunguje tak dobře, když lze zařízení připojit za provozu, proto je potřeba dynamický /dev který odráží připojená zařízení v reálném čase.

Linux prošel několika iteracemi dynamického /dev . Linux 2.4 má devfs, kde jádro automaticky vytvořilo položky, které odrážejí připojená zařízení. Ale to nebylo tak hezké, protože to do jádra pevně zakódovalo zásady pro pojmenování zařízení a povolení, takže to bylo nahrazeno uživatelským programem udev pro správu zásad a /dev na jednoduchém souborovém systému tmpfs (systém souborů v paměti bez zvláštního významu pro jádro). A pak se devfs částečně vrátilo s devtmpfs, což je instance tmpfs, kde položky pro dostupná zařízení automaticky vytváří jádro, ale udev navíc dělá veškerou správu, kterou chce.


Linux
  1. Jak nainstalovat ovladač zařízení v systému Linux

  2. Jaký je rozdíl mezi ovladačem platformy Linux a normálním ovladačem zařízení?

  3. Jak připojit zařízení v Linuxu?

  1. Linuxové příkazy:jobs, bg a fg

  2. Linux Odstraňte soubory a adresáře

  3. Konzistentní výčet zařízení Linux

  1. Jak programově získat informace o dodavateli USB a produktu v systému Linux?

  2. Odpojte a znovu připojte ttyUSB0 programově v Linuxu

  3. linuxové použití zástupných znaků v cp a mv