2016-01-19 2 views
4

Моя задача - реализовать пользовательский слой с фиксированными именами для таких вещей, как Ethernet и светодиоды.Как справиться с фрагментацией платформы, является ли дерево устройства ответом?

Он должен быть таким же на устройствах x86 и ARM. Таким образом, Индикатор питания и eth1 всегда одинаковый для приложений, но не подключен к одним и тем же аппаратным выводам. С моей точки зрения, я могу сделать это на ARM с назначениями Tree Tree. Но могу ли я использовать дерево устройств на досках на основе x86 для этого? Это хорошая практика?

Справочная информация: Цели: широкий спектр встраиваемых Linux платы, Buildsystem: Buildroot, Исполнения на заказ ядра Linux, ни один дистрибутив Linux, Busybox не работает на верхней

+0

Один пункт, который говорит против дерева устройств, заключается в том, что у меня есть доски, на которых запущено старое ядро ​​Версии, такие как 3.2, я знаю, что можно использовать его, тем не менее. Но с изменениями в загрузчике и ядре. – Rotesmofa

ответ

2

TL; DR - Дерево устройств - это не тот ответ, который вы ищите. Есть много способов сделать это в зависимости от ваших конечных потребностей.


Дерево устройств наследуется от PowerPC. Это не интерфейс для пользовательского пространства. Он предназначен для обеспечения персонализации карт, основанных на данных, для данного семейства CPU/SOC. Например, существует много TI OMAP devicesСм. Устройства в таблицах, каждый из которых имеет различные чипы, подключенные к ЦП (различные Ethernet MII/RMII и т. Д.) С различными конфигурациями контактов, часов, мощности и т. Д. Каждый из них имеет одинаковый TI OMAP SOC, поэтому код для его настройки известен для всех. Device Tree - это вход для платы для настройки SOC для использования аппаратного обеспечения. Драйверы устройств могут иметь крючки для изменения поведения при обнаружении определенного SOC (или платы).

Дерево устройств - это способ загрузки загрузчиком, чтобы сообщить ядру, какое оборудование присутствует и должно быть настроено.


Существуют различные методы, которые можно использовать для беседы с пользовательским пространством. Некоторые из них являются одной и той же основной вещью с различными вариантами использования ...

  1. Сделайте новый вызов системы.
  2. NetLink
  3. файловой системы (файл устройства)
  4. PROCFS
  5. sysfs
  6. debugfs
  7. Сигналы
  8. Udev/mdev
  9. пространства пользователя GPIO
  10. 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?

+0

Большое спасибо за то, что разделили это. – Rotesmofa

+0

8) udev/mdev не имеют вопросов, так как у меня уже было много проблем с созданием согласованных правил с различными задействованными устройствами (может быть, вызвано также аппаратным обеспечением). Ваш последний момент - это то, что мне нужно, разработчикам нужен Debug_Ethernet_Interface, который находится в Hardware, связанном с чем-либо из eth0/1/2, usb0 или чем-то виртуальным, а также абстракцией чего-то вроде светодиода состояния. Я не уверен, могу ли я покрыть все что-то вроде sysfs. – Rotesmofa

2

Использование sysfs.

Например, вы можете получить информацию о сетевой информации через /sys/class/net/eth0/. Для конкретного периферийного устройства вы можете предоставить свои собственные объекты ядра, которые обеспечивают стабильное имя.

Это уже сохраняет разницу в x86/ARM до минимума для приложений. Я думаю, например, wpa_supplicant или большинство скриптов инициализации уровня инициализации.

+0

Этот ответ остается коротким, но имеет смысл. Я бы принял это, но бесхитростный шум задумался над его/ее ответом. – Rotesmofa

Смежные вопросы