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

Re: DevFS и прочие




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

Не совсем 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: