[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: DevFS и прочие



Спасибо.


> Видимо это и есть ответ на ваш вопрос:)

Похоже, что да, и ответ полный: написано подробнее и точнее, чем мой текст.
Мне остаётся это только в "художественном стиле" переписать, и всё.


31.07.2022 20:03, IL Ka пишет:


Но это же делает набор правил уже *после* того, как устройство было
выставлено драйвером.
Или я что-то неправильно понимаю?


Не совсем imho: В devfs файлы устройств появлялись от вызова драйвером
devfs_register.
devfsd мог по ним сделать символические ссылки, но сами файлы он не трогал.
В случае же udev, драйвер создает специальную структуру (она видна в /sys),
и посылает uevent (через NETLINK), и udev уже создает нужную запись.

Кмк, дело было так:

До 2.4 все устройства создавались mkdev и драйвер привязывался к major
номеру.
Ненужные файлы забивали /dev, путали пользователя, имели проблемы с
безопасностью (решение о пермишенах принимал автор скрипта MAKEDEV) а еще и
major номера начали кончаться (их было-то всего 255).

В 2.4 проблему решили devfs, позволив драйверу самому создавать устройство
через devfs_register.
Подробнее погуглите главу "The Device Filesystem" второго (не третьего!)
издания Linux Driver Development.

Стало лучше: в dev не стало несуществующих устройств и драйвер смог
выбирать пермишены на файл.
Однако осталась проблемы, наример пользователь всё еще не мог выбирать как
назвать устройство оперируя его идентификатором.
У каждой шины (PCI, USB) у устройства есть уникальные ID, и хотелось бы
привязывать имена к ним.
Кроме того, все существующие имена приходилось хранить в памяти ядра
(невыгружаемой). Появилось желание вынести это в userspace.

Всё это привело к вот такому (там много жалоб на devfs):
http://www.kroah.com/linux/talks/ols_2003_udev_paper/Reprint-Kroah-Hartman-OLS2003.pdf

В 2.6 сделали sys, куда драйверы стали репортовать свои устройства, затем
посылать uevent, который забирал udev, и на основе рулов создавал нужное
устройство,
а еще он по D-Bus мог сообщить об этом вашему DE, чтобы тот нарисовал
красивый попап.

Почитать можно тут:
https://linux-kernel-labs.github.io/refs/heads/master/labs/device_model.html#sysfs

Часть людей была против, вот тут их переубеждают:
https://lwn.net/Articles/65197/

Затем udev смерджили с systemd:)

Но тут оказалось, что udev не нравится емебдщикам и не подходит для всяких
rescue mode, потому что требует нехилый userspace udev.

Тогда был создан devtmpfs (тут подробно написано)
https://lwn.net/Articles/330985/

Он просто брал имена (те, что драйверы репортуют в sys)и создавал для них
устройства. Файловая система была создана на основе tmpfs, так что она была
намного проще, и позволяла udevу работать поверх нее

Естественно, все тут же сказали "мы опять изобрели devfs!"
https://lwn.net/Articles/331818/

Но утверждается, что:
* devtmpfs проще (сделана на основе tmpfs)
* совместима с udev

Видимо это и есть ответ на ваш вопрос:)


Reply to: