sasha75 (sasha75) wrote in programmer_il,
sasha75
sasha75
programmer_il

CAN под Linux:

CAN под Linux:
Прошу совета: имеется плата на которой бежит Linux и управляет кучей подключенных устройств через CAN. CAN реализован при помощи SocketCAN, то есть как network device. Предлагают перевести все на другую, более мощную Linux платформу, но там CAN реализован как character device. Какие могут быть подводные камни в таком переходе? Linux-приложение - большое, многопоточное, написано давно и не мной - рефакторинг кода проблематичен.
Tags: development
  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

  • 8 comments
А что собственно мешает убрать character device driver и скомпилировать и установить драйвер SocketCAN ?
Не знаю, изготовитель утверждает, что так ничем не хуже
Какой драйвер они используют ? Документация есть ?
Сколько программ используют шину одновременно (с файлом это может быть проблематично, я не уверен что несколько программ одновременно могут его открыть)?
драйвер от производителя платы, документацию можно получить, используется одновременно 2-3 программами с от пары до десятка тредов каждая
По моему у тебя проблема, замена вовсе не равнозначная.

0 - Тебе придется писать прокси, который возьмет на себя всю работу с этом девайсом (или решать проблему очередности обращения к файлу этого устройства другим способом - несколько программ сразу этот файл не откроют, а если и откроют - нарушится синхронизация запрос/ответ)
1 - тебе придется решать проблему с буфферингом полученных данных (character device не дает таких возможностей by default).
2 - фильтров там опять же нет, что тащит за собой необходимость заменять весь механизм фильтров (и, как результат, распределения полученных сообщений) на что-то велосипедное.

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


Спасибо. Перекину задачи 0 и 1 на автора новой платы.
И как именно используется SocketCAN ? Используется ли его procfs ? используются ли фильтры, бродкаст, какие типы сокетов используются ?
используется броадкаст и фильтры, сокет PF_CAN