【问题标题】:python socket protocol not supportpython套接字协议不支持
【发布时间】:2018-09-19 12:12:01
【问题描述】:

我在 RaspberryPi3 上使用了 python-can-isotp,并使用示例代码对其进行了测试,但出现错误。

我的简单代码:

import isotp

s = isotp.socket()
s2 = isotp.socket()
# Configuring the sockets.
s.set_fc_opts(stmin=5, bs=10)
#s.set_general_opts(...)
#s.set_ll_opts(...)

s.bind("vcan0" rxid=0x123 txid=0x456)  # We love named parameters!
s2.bind("vcan0", rxid=0x456, txid=0x123)
s2.send(b"Hello, this is a long payload sent in small chunks of 8 bytes.")
print(s.recv())

错误:

File "/usr/local/opt/python-3.7.0/lib/python3.7/socket.py", line 151, in __init__ _socket.socket.__init__(self, family, type, proto, fileno) OSError: [Errno 93] Protocol not supported

有人可以帮我找到问题的解决方案吗?

【问题讨论】:

  • 您是否阅读了该模块的安装/故障排除说明?必须安装一个内核模块才能使其工作。
  • 谢谢,我确实忽略了故障排除。
  • 当我'sudo insmod ./net/can/can-isotp.ko'时,发生另一个错误'insmod: ERROR: could not insert module ./net/can/can-isotp.ko:模块中的未知符号',但不知道哪个符号是未知的,如何解决这个问题,非常感谢。
  • 必须为您尝试插入它的内核版本显式构建模块(可能的失败原因#1)。此外,通常应该使用modprobe 来插入内核模块,因为与insmod 不同,它还处理模块依赖关系(可能的原因#2)。我相信dmesg 命令(转储内核消息缓冲区)会显示导致insmod 失败的符号。
  • 非常感谢您的建议,我解决了这个问题。

标签: python sockets can-bus


【解决方案1】:

我按照这些instructions(稍作修改)使isotp 在具有最新Raspbian Stretch 的Raspberry Pi 3B+ 上工作。

这是我执行的命令的确切顺序:

sudo apt update
sudo apt upgrade
git clone https://github.com/hartkopp/can-isotp.git
cd can-isotp
sudo apt install build-essential raspberrypi-kernel-headers
make install
sudo make modules_install
modprobe can
sudo insmod ./net/can/can-isotp.ko

但是,我不在 Python 中使用它。我只是测试了提供用于isotp 的工具,例如isotpsendisotprecv

【讨论】:

  • 嗨,我还有一个问题,当我sudo apt install build-essential raspberrypi-kernel-headers 时,内核头文件版本在/lib/modules/(kernel-headers-version)$(uname -r) 之间是不同的
  • 据我所知,安装后/usr/src 中应该有适当版本的内核头文件。从uname -r 那里安装的头文件是否不适合您的内核?就我而言,两者都适合:4.14.69-v7+
  • 非常感谢您的建议,我解决了python-can-isotp的问题,接下来我会重点解决headers版本的问题。
猜你喜欢
  • 2013-11-12
  • 1970-01-01
  • 2013-02-04
  • 1970-01-01
  • 1970-01-01
  • 2020-04-23
  • 2013-11-21
  • 1970-01-01
  • 2014-11-23
相关资源
最近更新 更多