Как сделать драйвер устройства связи с аппаратным обеспечением?

Это вполне возможно. Все зависит от того, какой DNS вы используете или кто его размещает. Ниже (очень) сокращенная версия моей зоны.

                IN      MX      100     mx.bromosapien.net.
mailer          IN      A       69.7.19.205
healer          IN      A       69.7.19.204

Вы можете видеть, что "healer" и "mx" (мой почтовый сервер) имеют две разные A-записи. Моя запись MX указывает на мою запись A. Моя пустая этикетка означает последнюю этикетку или происхождение. В данном случае мое происхождение - bromosapien.net. Я предлагаю использовать пустую метку для записи MX, если вы используете привязку.

Для всего нужна пластинка. Это не «невозможно» иметь две разные записи A.

0
31.01.2019, 21:26
1 ответ

Шина PCI/PCIe поддерживает аппаратную автоматическую настройку, поэтому ядро ​​Linux включает драйвер шины PCI, который может считывать идентификаторы оборудования всех устройств PCI/PCIe. С помощью lspci -nnвы можете сами увидеть эти идентификаторы.

Если на данный момент драйвер для оборудования еще не загружен, ядро ​​сгенерирует запрос на загрузку модуля драйвера, что эквивалентно:

modprobe pci:v0000<PCI vendor ID>d000<PCI device ID>sv<subvendor ID>sd<subdevice ID>bc<base class ID>sc<subclass ID>i<programming interface ID>

Предполагается, что модули драйвера включают в себя соответствующую информацию о модалиях , которая используется modprobeдля поиска соответствующего модуля. Если вы запустите modprobe -c | grep pci:, вы увидите модальные строки для всех установленных на данный момент -модулей драйверов.

После загрузки драйвера (и/или при наличии каких-либо событий уровня ядра -PCI (e )горячего -подключения в оборудовании, поддерживающем горячее -подключение ), драйвер ищет оборудование, о котором знает драйвер. Если драйвер находит устройство, которое он может запустить, он обычно инициирует событие udev hot -plug для автоматического создания необходимого файла устройства.

Вы можете использовать правила udev для изменения пути, имени, владельца и прав доступа к файлу устройства и/или для выполнения произвольных действий сценария, если значения по умолчанию не подходят для вашего варианта использования. Руководство mknodне требуется в большинстве случаев, и, поскольку Linux использует непостоянную -файловую систему /devустройства, начиная с версии ядра 2.6, эффект любых ручных команд mknodв любом случае будет потерян при следующей перезагрузке..

Драйвер может предпринять дальнейшие шаги для опроса/инициализации устройства, как только устройство будет обнаружено, или драйвер может просто настроить инфраструктуру на стороне ядра -, соответствующую узлу устройства, и ожидать для ввода из пользовательского пространства.

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

Но карта PCI (e )UART, скорее всего, будет обнаружена как просто устройство последовательного порта (, то есть /dev/ttyS*устройство ). Поскольку технология последовательного порта очень старая, нет гарантированного способа проверить последовательный порт, чтобы определить, что к нему подключено; существуют некоторые схемы обнаружения, но в Linux они обычно реализуются в пользовательском пространстве, например gpsdдля приемных устройств GPS и ModemManagerдля беспроводных модемов 3G/4G. Эти сервисы будут искать последовательные порты, проверять состояние линий квитирования порта (с )и, если будет похоже, что что-то подключено (, т.е. входящая линия DSR последовательного порта активна ), они будут искать входящие данные и/или отправлять стандартные строки запроса.

Например, ModemManager может отправить ATна новый последовательный порт :, если устройство ответит OK, устройство на другом конце, похоже, понимает классические AT-команды Hayes, поэтому это может быть модем какая-то; затем ModemManager отправит дальнейшие команды для более точной идентификации.

Такое активное зондирование может мешать некоторым видам использования устройств UART. При необходимости вы можете использовать правила udev, чтобы указать ModemManager, что он должен полностью игнорировать конкретное устройство UART.

Например, у меня есть система с картой последовательного порта PCIe:

# lspci -nn
...
04:00.0 Serial controller [0700]: Oxford Semiconductor Ltd OXPCIe952 Dual 16C950 UART [1415:c158]
...

У него два порта, и запуск udevadm info -q all -a -n /dev/ttyS<number>для всех моих /dev/ttyS*устройств позволяет мне их идентифицировать. Первый порт имеет атрибут udev ATTR{line}=="1", а второй — ATTR{line}=="2".

Теперь я могу подключить свое специальное последовательное устройство к порту #1 этой карты и записать такое правило udev, например,файл/etc/udev/rules.d/99-my-uart-device.rules:

SUBSYSTEM=="tty", DRIVERS=="serial", ATTRS{vendor}=="0x1415", ATTRS{device}=="0xc158", ATTRS{line}=="1", ALIAS="my_serial_device", ENV{ID_MM_DEVICE_IGNORE}="1"

Это правило приведет к созданию псевдонима (символической ссылки )/dev/my_serial_device, чтобы всегда ссылаться на порт #1 этой карты последовательного порта, независимо от того, какие другие устройства, подобные UART -, могут быть добавлены. к системе и в каком порядке они были обнаружены. Это также сообщит ModemManager, чтобы он не исследовал этот порт (часть ENV{ID_MM_DEVICE_IGNORE}="1"часть ).

Теперь я мог настроить приложение для использования /dev/my_serial_deviceвместо, например,. /dev/ttyS1и быть уверенным, что он всегда будет использовать правильный физический последовательный порт для связи с устройством.

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

1
28.01.2020, 02:41

Теги

Похожие вопросы