TL; DR - Дерево устройств - это не тот ответ, который вы ищите. Есть много способов сделать это в зависимости от ваших конечных потребностей.
Дерево устройств наследуется от PowerPC. Это не интерфейс для пользовательского пространства. Он предназначен для обеспечения персонализации карт, основанных на данных, для данного семейства CPU/SOC. Например, существует много TI OMAP devicesСм. Устройства в таблицах, каждый из которых имеет различные чипы, подключенные к ЦП (различные Ethernet MII/RMII и т. Д.) С различными конфигурациями контактов, часов, мощности и т. Д. Каждый из них имеет одинаковый TI OMAP SOC, поэтому код для его настройки известен для всех. Device Tree - это вход для платы для настройки SOC для использования аппаратного обеспечения. Драйверы устройств могут иметь крючки для изменения поведения при обнаружении определенного SOC (или платы).
Дерево устройств - это способ загрузки загрузчиком, чтобы сообщить ядру, какое оборудование присутствует и должно быть настроено.
Существуют различные методы, которые можно использовать для беседы с пользовательским пространством. Некоторые из них являются одной и той же основной вещью с различными вариантами использования ...
- Сделайте новый вызов системы.
- NetLink
- файловой системы (файл устройства)
- PROCFS
- sysfs
- debugfs
- Сигналы
- Udev/mdev
- пространства пользователя GPIO
select
(файл/сокет)
Пункты 3-6 все в основном то же самое. Как правило, файлы являются синхронными. То есть, если у вас есть PIN-выход, они прекрасны, поскольку вы можете просто написать им из пользовательского пространства. Однако, скажем, у вас есть входной контакт, как пользовательская карта (дочерняя плата), присутствующая/вставленная. Может быть, у вас есть какой-то кабель RS-232 или штырь для вставки головного телефона? С файловым интерфейсом вы должны их опросить (или вам нужно иметь inotify и т. Д. В вашем коде ядра). netlink - это способ предоставления сообщений от ядра к пользовательскому пространству. Имеет смысл, если ваш штырь может быть подключен к системному прерыванию (в любом случае).
mdev и Udev использования NetLink сказать в пространстве пользователя о PCI, USB и т.д. аппаратных подключены/отключены. Вы можете использовать аналогичную схему для GPIO. Вы только установили связь между /sys/class/output/led1 и /dev/my_company/power_led с скриптом mdev/udev.
Лично я хотел бы поместить именование в пространство пользователя, а не в ядро. Что такое eth1 например? Возможно, вам нужна диагностика и основная коммуникационный порт Ethernet? Аппаратное обеспечение может не заполнить диагностический порт в некоторый момент, чтобы сделать спецификацию дешевле. Тогда возможно eth1 is eth0?
Один пункт, который говорит против дерева устройств, заключается в том, что у меня есть доски, на которых запущено старое ядро Версии, такие как 3.2, я знаю, что можно использовать его, тем не менее. Но с изменениями в загрузчике и ядре. – Rotesmofa