Device Filesystem
Z Wikipedii
Device Filesystem, w skrócie devfs, to wirtualny system plików stworzony dla Linuksa, zajmujący się tzw. plikami urządzeń znajdującymi się - jak w każdym Uniksie - w katalogu /dev.
Głównym powodem wprowadzenia devfs było ograniczenie ilości urządzeń w poprzednich wersjach jądra, a także uporządkowanie spraw związanych z nazewnictwem, położeniem itd.
Devfs umożliwia dynamiczne tworzenie plików urządzeń - plik jest tworzony wtedy, kiedy moduł je obsługujący sobie tego zażyczy. Oprócz tego autor kodu może ustalić z góry uprawnienia i nazwę dla pliku swego urządzenia. Dodatkowym plusem jest pogrupowanie plików w podkatalogach /dev oraz tworzenie symbolicznych linków, aczkolwiek tym dokładnie zajmuje się Devfsd.
Devfs jest używany od jąder 2.4 i nowszych, aczkowiek istnieją backporty dla linii 2.2. Devfs od jąder serii 2.6 został oznaczony jako przestarzały, zastąpił go udev.
Aby włączyć obsługę devfs w używanym jądrze, należy dodać do linii argumentów jądra następujący fragment:
devfs=mount
By wyłączyć:
devfs=nomount
Autorzy kodu jądra powinni w następujący sposób "zamawiać" urządzenia w swych modułach, w tym przykładzie dla modułu o prozaicznej nazwie pustak:
#include <linux/fs.h> #include <linux/devfs_fs_kernel.h> devfs_handle_t pustak_devfs_dir; /* nasz własny katalog */ devfs_handle_t pustak_devfs_entry; /* dla pliku naszego urządzenia */ int pustak_major; /* zmienna przechowująca główny numer urządzenia */ pustak_devfs_dir = devfs_mk_dir(NULL, "pustak", NULL); if (!pustak_devfs_dir) return -EBUSY; /* Houston, mamy problem */ pustak_devfs_entry = devfs_register(pustak_devfs_dir, "pustak", DEVFS_FL_AUTO_DEVNUM, pustak_major, 0, S_IFCHR | S_IRUGO | S_IWUGO, &pustak_fops, "pustak"); /* Ok! */
Przy założeniu, że pustak_fops to otagowana struktura zawierająca odnośniki do operacji plikowych na danych przychodzących do/z urządzenia. A tak się go "wyzbywamy":
devfs_unregister(pustak_devfs_entry); devfs_unregister(pustak_devfs_dir);
Zobacz też: udev, Kod na Wikipedii.
Konfiguracja i arkana devfs są opisane w dokumentacji Linuksa, w katalogu /usr/src/linux/Documentation/filesystems/devfs.