LINUX.ORG.RU

Проблема при установке *.ko

 , ,


0

1

Добрый день!

Использую систему Ubuntu 18.04LTS. Версия ядра 4.15.0-111-generic. Возникла необходимость поработать с CAN адаптером. Смотрел наличие адаптера через gmesg там адаптер отображается /dev/ttyADC0.

Скомпилировал модуль через make. Полученный файлик *.ko был добавлен по пути /lib/modules/$(uname -r)/kernel/drivers/net/can

Подгружен модуль следующим скриптом:

sudo cp emuc2socketcan.ko /lib/modules/$(uname -r)/kernel/drivers/net/can
sudo depmod -a
sudo modprobe emuc2socketcan
sudo ifconfig can0 txqueuelen 1000
sudo ifconfig can1 txqueuelen 1000
sudo tc qdisc add dev can0 root handle 1: pfifo
sudo tc qdisc add dev can1 root handle 1: pfifo
sudo ifconfig can0 up
sudo ifconfig can1 up

Если смотреть через lsmod то модуль подгрузился(присутствует в списке).

По записям gmesg:

[ 7232.289471] emuc: EMUC-B202 SocketCAN interface driver
[ 7232.289472] emuc: 10 dynamic interface channels.
[ 7233.648450] ----------> INNO_XMIT_DELAY_CMD ioctl(), xmit_delay = 100
[ 7233.648641] can0: renamed from emuccan0
[ 7233.663408] can1: renamed from emuccan1
[ 7233.744298] emuc: Device will become active status.
[ 7233.744438] emuc: Device set "active" successfully.
[ 7279.491292] free_netdev: free info
[ 7280.002682] emuc: EMUC-B202 SocketCAN interface driver
[ 7280.002683] emuc: 10 dynamic interface channels.
[ 7281.361861] ----------> INNO_XMIT_DELAY_CMD ioctl(), xmit_delay = 100
[ 7281.362045] can0: renamed from emuccan0
[ 7281.379639] can1: renamed from emuccan1
[ 7281.442766] emuc: Device will become active status.
[ 7281.442914] emuc: Device set "active" successfully.

Адаптер готов к работе(насколько я понял), но при обращении к адаптеру не получается забрать какие либо данные с него и отправить. Программно(тестовая программка от производителя) я данный адаптер вообще не вижу.

Если смотреть через ifconfig can0 и can1 отображаются.

С чем может быть связано такое поведение адаптера или подключаемого модуля, и правильно ли я подключил модуль?

Спасибо заранее.

Модуль скомпилировался, загрузился и устройства появились, значит его код выполняется. Других вариантов загрузки нет. Возможно, что модуль работает не корректно с данной версий ядра, но это проблема в его коде, а не в правильности подключения. Это по поводу модуля вобще, конкретно про emuc2socketcan.ko ничего не знаю.

mky ★★★★★ ()
Ответ на: комментарий от mky

Еще в руководстве есть примечание что возможно потребуется в ручную добавить конфигурацию к cdc-acm. Но я не понял как добавить конфигурацию, если дословно

Note: Linux kernel 2.6 and above have native CDC-ACM kernel driver. Some Linux OS may need to add CDC-ACM configuration manually in building process. In different Linux OS may have different tty name.
anonymous ()

адаптер отображается /dev/ttyADC0

это какой-то говонодрайвер не используй его. В Linux для CAN есть сетевой стек на основе сокетов socketcan

https://www.kernel.org/doc/Documentation/networking/can.txt

Программно(тестовая программка от производителя) я данный адаптер вообще не вижу.

и не надо, используй стандартные средства

https://elinux.org/Can-utils

anonymous ()
Ответ на: комментарий от anonymous

ИМХО, это про конфигурацию ядра, что типа там нужно, в некоторых дистрибутивах, включть поддержку CDC ACM (CONFIG_USB_ACM) и пересобрать ядро (модули).

Если у вас в dmesg есть строки про usb Microchip Technology, и про то, что этому устройству назначен ttyACM0, как показано в руководстве, то тут вам конфигурить нечего.

Там же написано, что проверять сначала нужно их утилитой emuc. Ещё там написано, что в ядре должна быть поддержка socketcan. Если не путаю, то это ″CAN Bus subsystem support″ и далее. Если она собрана модулями, то модули ″can″, ″can-dev″, ″can-raw″.

mky ★★★★★ ()