изменения в названии драйвера последовательного порта с ядром 6.8 и позже

Вопрос или проблема

До ядра 6.8 путь к драйверу для фиксированных последовательных портов (ttySxx) разрешался к /sys/bus/platform/drivers/serial8250, и простая проверка, что имя было “serial8250“, была достаточной для определения, является ли устройство фиксированным или съемным (USB) – если имя драйвера не было “serial8250“, то можно было предположить, что это (а) съемное устройство и (б) нет необходимости в дальнейшей проверке, чтобы убедиться, что это настоящее устройство (т.е. не просто заполнитель).

Это использовалось в решении для проверки портов, предложенном Сореном Холмом здесь:
https://stackoverflow.com/questions/2530096/how-to-find-all-serial-devices-ttys-ttyusb-on-linux-without-opening-them
Я использовал паскальский перевод кода Сорена в своем программном обеспечении в течение нескольких лет без каких-либо проблем или жалоб.

Но начиная с ядра 6.8 (Ubuntu 24.04LTS) путь к драйверу изменился. Теперь он разрешается к /sys/bus/serial-base/drivers/port, и имя “port” слишком общее, чтобы использовать его в качестве основы для принятия решений – ядро 6.8 ломает код Сорена. Пока я не смог найти никакой полезной информации в интернете о данном изменении в ядре.

Мой вопрос: с ядром 6.8 и позднее, есть ли какой-либо надежный альтернативный способ проверки, чтобы определить, связан ли последовательный порт с тем, что было драйвером “serial8250“? Есть ли эксперты, которые знают об изменениях в драйверах последовательных портов, почему они были сделаны, и обходных путях для последствий?

С наилучшими пожеланиями,
Роб 🙂

Ответ или решение

Изменения в названии драйвера последовательного порта в ядре 6.8 и позднее

С выходом ядра Linux 6.8, которое поставляется с Ubuntu 24.04 LTS, произошли значительные изменения в механизме работы с последовательными портами. В частности, путь к драйверу для фиксированных последовательных портов (ttySxx) был изменен с /sys/bus/platform/drivers/serial8250 на /sys/bus/serial-base/drivers/port. Это изменение создало определенные трудности для разработчиков, которые использовали предыдущую логику для определения типа последовательного устройства, так как название нового драйвера — "port" — слишком общее, чтобы служить надежным критерием для этого.

Причины изменения

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

Альтернативные способы идентификации драйвера

Для определения, связано ли устройство последовательного порта с драйвером serial8250, можно использовать несколько альтернативных подходов:

  1. Проверка на уровне устройств: Используйте команду dmesg | grep -i serial для получения журналов сообщений ядра, которые могут обеспечить информацию о том, какой именно драйвер инициализировался для конкретного устройства. Можно фильтровать вывод по имени устройства, чтобы сосредоточиться на интересующих портах.

  2. Файлы и атрибуты устройств: В каталоге /sys/class/tty можно найти символические ссылки на tty устройства. Каждое tty устройство имеет подкаталог, который может содержать атрибуты, такие как driver, что может указать на драйвер, используемый для управления портом.

  3. Использование udevadm: Запустите команду udevadm info --query=all --name=/dev/ttyS0 (или другой tty), чтобы получить полную информацию об устройстве. В выводе ищите строку, указывающую на драйвер. Если это serial8250, значит, устройство действительно связано с данным драйвером.

  4. Обработка событий udev: Возможно, имеет смысл настроить правила udev, чтобы при подключении устройства осуществлялась автоматическая передача информации через системные логи или скрипты.

Заключение

Понимание изменений в реализации драйверов последовательных портов в ядре 6.8 и более поздних версиях требует немного больше усилий, однако альтернативные методы определения типа устройства могут помочь в сохранении функциональности вашего ПО. Постоянный анализ и использование новых возможностей, предлагаемых ядром, позволят создать более надежные и адаптивные системы управления устройствами.

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

Оцените материал
Добавить комментарий

Капча загружается...