[Devel] Драйверы canbus4linux, can4linux и advcan. Was: [Задача 5496] Поддержка 512 PDO библиотекой UCan2
Evgeny Sinelnikov
sin на etersoft.ru
Вт Фев 8 15:28:12 MSK 2011
Здравствуйте,
хочу вынести вопрос обсуждения адаптации драйверов из баги сюда.
8 февраля 2011 г. 0:15 пользователь <bugs на lists.etersoft.ru> написал:
> http://bugs.etersoft.ru/show_bug.cgi?id=5496
>
> Pavel Vainerman <pv на etersoft.ru> changed:
>
> What |Removed |Added
> ----------------------------------------------------------------------------
> Hours Worked| |0.23
>
> --- Comment #22 from Pavel Vainerman <pv на etersoft.ru> 2011-02-08 00:15:49 MSK ---
>> Ну, во-первых, не ясно почему они раздельные. А, во-вторых, можно договориться
>> оставить какой-то один из методов, как обёртку над другим, или более точно
>> определиться с семантикой.
> Ну так в было canbus... Я к сожалению не могу щаз тебе привести пример..
> но собственно можешь увидеть в /proc/canbus у них это как-бы рездеделно
> mode и протокол...
>
>> > > > ...мы используем везде где можно "canbus".
>> > > А старый драйвер pci1680 из canbus4linux? У меня он не пошёл. canbus тоже не
>> > > пошёл (слишком универсальный наверное).
>> > Где не пошёл? На 2.6.32-el-smp у меня работает.
>>
>> 2.6.32-el-smp-alt12, возможно, я неправильно его готовил. Вот сборка под
>> последний релиз.
>> /var/ftp/pub/Etersoft/LINUX на Etersoft/Sisyphus/i586/RPMS.addon/kernel-modules-canbus4linux-el-smp-0.4-alt8.132640.13.i586.rpm
> Т.е. проблема не в сборке? Могу если надо дать свою..
Нет, проблема не в сборке, твои тесты работают. Но только с протоколом CAN 2.B:
http://bugs.etersoft.ru/show_bug.cgi?id=5496#c25
А мою сборку можно теперь из репозиториев установить для ядра el-smp.
Для std-def и всех новых ядер canbus4linux надо фиксить.
>> > > Я адаптировал новый advcan-2.10 для
>> > > canbus4linux. Драйвер собран сюда:
>> > > /var/ftp/pub/Etersoft/LINUX на Etersoft/Sisyphus/files/i586/RPMS/kernel-modules-advcan-el-smp-2.10-eter3.132640.13.i586.rpm
>> > Зря.. потому-что canbus всё-таки универсальное решение типа comedi...
>>
>> Почему же зря?
> Я видимо плохо прочитал и не заметил "адаптировал для canbus".
> Так что если ты просто в рамках canbus сделал новый драйвер. То хорошо.
Нет, сначала ты всё верно понял. Я адаптировал UCan2 для нового
драйвера advcan-2.10 в объекте SimpleCanDevicePCI_1680, вместо старого
который не работал.
Стоит ли внести эти изменения в основную ветку UCan2? Я так понимаю,
что поддержка старого драйвера всё равно не интересна, а поддержка
нового ничему не помешает, но даст возможность сравнить
производительность при уточнении внутренней архитектуры canbus во
время модификации под новые ядра.
>
>> - canbus4linux на новых ядрах не собирается - его нужно переделывать под новый
>> интерфейс ядра:
> Думаю всё-равно это лучше будет сделать.. Щаз как раз проводу подобную работу
> в нашем comedi..
>
Тогда вот бага:
http://bugs.etersoft.ru/show_bug.cgi?id=6896
> canbus - хорошо тем, что (главное) обладает модульной архитектурой с единым
> интерфейсом (для пользователя) и позволяет делать "модули" на разные платы
> (как comedi).
> И ещё обладает "полезностями" типа:
> 1. Возможность создать вирутальное устройство
> Очень нужная вещь для наладки в отсутствии железа.
> Хотя сейчас мы пока не использовали этого, но просто потому-что не работали на
> UCan2..
Я не пробовал. У нас есть документация на этот счёт?
> 2. Управление через /proc
> Тоже мы пока не используем всех преимуществ.. Хотя обмен можно написать,
> чуть-ли не на баше..
>
Это архитектурное решение (/proc интерфейс) имеет преимущества (доступ
к управление и состоянию из скриптов) и недостатки (отсутствие
стандартного программного управления)
Если управление доступно через ioctl(), то достаточно создать суидную
утилиту, которой можно назначить права, в отличие от
proc-интерфейса...
8 февраля 2011 г. 0:32 пользователь <bugs на lists.etersoft.ru> написал:
> http://bugs.etersoft.ru/show_bug.cgi?id=5496
>
> Pavel Vainerman <pv на etersoft.ru> changed:
>
> What |Removed |Added
> ----------------------------------------------------------------------------
> Hours Worked| |0.05
>
> --- Comment #24 from Pavel Vainerman <pv на etersoft.ru> 2011-02-08 00:32:10 MSK ---
> пропустил ещё одно..
> Что это http://www.port.de/pages/misc/can4linux.php?
> Я не совсем понял.. Если ты предлагаешь как замену canbus4linux..
> это обсуждаемо..
Я заметил, что в can4linux подобная архитектура, что и в нашем
canbus4linux. Забавно, что в Advantech решили сохранить внешний
интерфейс can4linux (семантику read/write и номера ioctl), но сам
драйвер переработали под свои драйвера.
Вместе модуля can появился модуль advcan. Вместе с нашим драйвером
canbus, это получается три вида can-драйверов.
Мне кажется разумным, после правки canbus4linux для новых ядер,
адаптировать его интерфейс под общий can4linux интерфейс.
Существенные отличия, которые я заметил:
- чтение и запись проводятся с помощью вызовов read и write, при этом
указывается не число читаемых и записываемых байт, а число структур
вида:
/**
* The CAN message structure.
* Used for all data transfers between the application and the driver
* using read() or write().
*/
typedef struct.
{
/** flags, indicating or controlling special message properties */
int flags;
int cob; /**< CAN object number, used in
Full CAN */
unsigned long id; /**< CAN message ID, 4 bytes */
struct timeval timestamp; /**< time stamp for received messages */
short int length; /**< number of bytes in the CAN message */
unsigned char data[CAN_MSG_LENGTH]; /**< data, 0...8 bytes */
} canmsg_t;
- режим CAN 2.A или CAN 2.B определяются флагом MSG_EXT в теле
структуры. Он же означает тип фрейма соответственно.
- есть некоторое количество ioctl-вызовов для управления состоянием устройства:
# define CONF_ACC 0 /* mask and code */
# define CONF_ACCM 1 /* mask only */
# define CONF_ACCC 2 /* code only */
# define CONF_TIMING 3 /* bit timing */
# define CONF_OMODE 4 /* output control register */
# define CONF_FILTER 5
# define CONF_FENABLE 6
# define CONF_FDISABLE 7
# define CONF_LISTEN_ONLY_MODE 8 /* for SJA1000 PeliCAN */
# define CONF_SELF_RECEPTION 9
# define CONF_BTR 10 /* set direct bit timing
registers(SJA1000) */
# define CONF_TIMESTAMP 11 /* use TS in received messages */
# define CONF_WAKEUP 12 /* wake up processes */
--
Sin (Sinelnikov Evgeny)
Подробная информация о списке рассылки Devel