linux - RAW CAN 套接字和广播管理器 CAN 套接字有什么区别以及如何使用它们?
问题描述
我是 CAN 协议的新手,我正在尝试通过 Linux 的 SocketCAN 来使用它。但是,我对可用的 2 个不同的 CAN 套接字感到困惑,即 RAW 和广播管理器 (BCM)。
文档指出 BCM 套接字不适用于发送单个 CAN 帧。直觉上我猜 BCM 更适合单主多从配置,但这似乎有些错误。
BCM 的用途是什么?或者更确切地说,它们之间在功能方面有什么区别?在什么样的情况下我选择使用广播管理器而不是原始套接字?
解决方案
我建议查看官方文档: https ://www.kernel.org/doc/html/latest/networking/can.html
简而言之:
- RAW 套接字用于接收和发送 CAN 帧。
- BCM socket 用于特殊操作,当您想将一些与 CAN 消息传递相关的任务卸载到 Linux 内核而不是手动实现它时。
例如:您可以使用 RAW 套接字和一些计时器从您的代码中定期发送消息。
或者您可以通过适当的配置在 BCM 套接字上发送一条消息,然后 Linux 内核会定期为您发送 CAN 消息。要停止这种情况,您可以使用不同的配置再次在 BCM 套接字上发送消息。
BCM 套接字也可用于自动监控接收到的消息。在这种情况下,您指定希望接收每条消息的频率和数据掩码,向 BCM 套接字发送消息以进行配置,然后瞧。仅当触发接收预期消息的超时并且消息根据您提供的数据掩码更改内容时,您才能从 BCM 套接字读取。
推荐阅读
- angular - 如何在 Angular 下拉列表中添加自动完成功能?
- python - 如何在matplotlib中设置轴和标签之间的空间
- python - 如何将Django常规结构导入新项目
- android - 无法使用匕首刀柄创建 ViewModel 类的实例
- spring-boot - 如何从 Redis JMS onMessage() 取回域对象
- javascript - 在 laravel 的刀片文件中调用 js 函数
- javascript - CSS 元素在不同网站中的显示方式不同。如何防止这种情况?
- python - 如何仅使用 python 中的统计测试来查找我的时间序列是加法还是乘法?
- numpy - 带有单个颜色条的几行的 LineCollections
- python - readlines() 函数在单行文本中的行为方式与 read() 不同