В общем, видимо проблема в некотором непонимании CAN...
Отправляю пакет и тут же получае его обратно на том же интерфейсе. Все кто висит на шине его тоже получают.
Сокет открываю вот так...
s[i] = socket(PF_CAN, SOCK_RAW, CAN_RAW);
Отправляю и принимаю через select.
select ( maxDescriptor + 1, &RxSockSet, &TxSockSet, NULL, &selTimeout )
Манипуляции с CAN_RAW_LOOPBACK и CAN_RAW_RECV_OWN_MSGS как то не помогли...
Вопрос.
1. Это нормально что я получаю этот пакет?
2. Как сделать так что бы я его не получал (не фильтрами).
вероятно у вас что-то самописное - поищите исходники can-utils.. если у вас buildroot, то они должны быть в его пакетах в исходных кодах..
думаю, что там можно посмотреть - как формируются пакеты и как работать с can сетью..
я совсем чутка коснулся этого типа интерфейса - проверка между интерфейсами на одной плате стандартными утилитами:
Надо посмотреть доки - 2.6.35 староватое ядро, может там и не работает. Если не нужна мультимедиа ( GPU и VPU) лучше взять ванильное ядро - в фрискейловском ядре драйвер flexcan написан отвратно, я делал бэкпорт драйвера из ванильного ядра 2.6.38 - этот драйвер интегрирован в этом ядре http://starterkit-org.googlecode.com/files/linux-2.6.35.3-11.09.01-sk.tar.bz2
но с CAN плотно не работал - не могу сказать насколько там все хорошо
Ядро у меня от starterkit для i.mx53 OEM...
canutils я естественно изучил.
ядро у меня
# uname -a
Linux buildroot 2.6.35.3-1129-g691c08a #452 PREEMPT Wed Oct 23 16:25:31 MSK 2013 armv7l GNU/Linux
to Jury093: Если не затруднит запустите candump на передающем интерфейсе (одновременно с передачей. can1 в первом случае). Возможно результат вас удивит... =)
Заодно и повторяемость посмотрим.
чего то никто никуда не трансферит..
чешу в затылке - а как оно тогда взлетело..
ни dm8148, ни imx535 даже "му" не сказали в интерфейсы..
не раньше выходных сделаю еще подход (если хардвара не навалится)
попинал can и запустил..
не очень понял. как сделать и в чем физический смысл одновременного старта утилит..
в одном окошке candump
во втором cansend
результат не зависит, куда посылать - напрямую в порт can0 или через шлейф в can1
вам уже подсказали, видимо надо эхо выключать или еще что-то в своей софтине..
если сорц не секретный и не очень сложный для сборки, то выложите куда-нить нужный кусок (на Си надеюсь) - могу попробовать запустить на своем железе..
подтверждаю. я тоже пользуюсь ядром из комплекта и тоже не смог отключить loopback штатными средствами. из-за этого были даже некоторые проблемы с canfestival (обработчик приема посылки SYNC вызывался по 2 раза).
Делаю проверку:
Первое окно:
# cansend can0 123#DEADBEEF
# ifconfig
can0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
UP NOARP MTU:16 Metric:1
RX packets:2 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:10
RX bytes:16 (16.0 B) TX bytes:0 (0.0 B)
Interrupt:33
Второе окно:
# candump can0
То есть во втором тишина, хотя 16 байт вроде ушло.
Пробовал и с замкнутыми оконечниками и с разомкнутыми.
Что- то я не доделал?
По виду интерфейс нормально поднялся.