- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写一个 CAN 记录器程序。我记录数据的方式类似于 candump
-tool 在调用 candump
时执行此操作喜欢 candump any
:
https://github.com/linux-can/can-utils/blob/master/candump.ccandump any
使candump
绑定(bind)到任何设备,即 addr.can_ifindex = 0;
然后它使用 recvmsg
获取 CAN 帧,然后获取 struct msghdr msg;
附加时间戳将其写入日志文件或屏幕上。
我的问题是,内核是否确保以下 assert
总是有效的?
struct msghdr msg;
// init stuff
// ...
s[0] = _skt_1; // can0
s[1] = _skt_2; // can1
// configure and bind sockets
// ...
select(s[1]+1, &rdfs, NULL, NULL, NULL));
recvmsg(s[0], &msg, 0); // https://linux.die.net/man/2/recvmsg
timestamp_1 = getTimestamp(msg);
recvmsg(s[1], &msg, 0); // https://linux.die.net/man/2/recvmsg
timestamp_2 = getTimestamp(msg);
// Always valid?
assert(timestamp_1 < timestamp_2);
对 SocketCAN 驱动程序中的源代码位置的提示也会有所帮助。
最佳答案
简短的回答是肯定的,除非你的司机做了一些很奇怪的事情。 CAN 使用与其他网络设备相同的 netif 子系统。 SKB 有几种方法可以获取时间戳。
硬件时间戳:
如果您的驱动程序使用硬件时间戳,则时间戳基于硬件提供的任何内容。
软件时间戳:
如果 netdev_tstamp_prequeue启用,则在您的驱动程序将 skb 提交到 netif_receive_skb 后不久就会有一个时间戳
https://elixir.bootlin.com/linux/v4.14.202/source/net/core/dev.c#L4554
如果 netdev_tstamp_prequeue未启用,则在更多处理后应用时间戳,但仍在同一个 NAPI 接收线程中。
https://elixir.bootlin.com/linux/v4.14.202/source/net/core/dev.c#L4352
这是模糊部分:
有一些特殊模式 (RSP/RFP) 允许内核使用 SMP 对 skb 处理进行负载平衡。内核不是在 napi 接收线程中处理 skb,而是将 skb 放入每个 cpu 队列中。现在如果 netdev_tstamp_prequeue未启用时,时间戳会在一段时间后从每个 CPU 队列中退出时添加。但是,文档说接收顺序没有修改,因此时间戳也应该保持顺序。
关于c - recvmsg 的 Linux SocketCAN 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63266390/
我在我的系统上使用 SocketCAN。有没有办法以编程方式而不是从命令行设置 CAN 接口(interface)比特率。举个例子会有帮助。 谢谢。 最佳答案 是的,这是可能的。使用 NETLIN
我对socketCAN和制造商的CAN驱动程序有什么区别感到有些困惑。 我的 Ubuntu 机器上有一张来自 Kvaser 的 mPCIE CAN 卡。它带有自己的驱动程序,这些驱动程序显然基于 so
我在 RaspberryPi 上使用带有“socketcan”npm 包的 Meteor。为了定义我的 CAN 网络,我使用皮划艇文件“canDefinition.kcd”。这是我在服务器文件夹中的启
我将尝试简要解释我们的场景。 我们想为我们在 Ubuntu 上运行的系统设置一个模拟环境,以便我们可以将它与我们基于 Windows 的模拟工具套件一起使用。目前我们在 Windows 主机上使用 V
我对单声道和 C# 真的很陌生,但我想使用套接字通过 CAN 打开通信。问题是实现了许多协议(protocol)地址系列,但目前单声道不支持 CAN。系统内核支持它,但我无法以这种方式修补文件以降低到
我正在为 Linux 上的设备编写软件,它应该可以与 CAN 接口(interface)一起使用。理想情况下,我希望在不连接来自 c++ 的第三方库的情况下使用该接口(interface)。可能吗?
我们想使用 SocketCan在用 C++ 编写的 Linux 应用程序中。有谁知道 SocketCan 的一个不错的 C++ 包装器?否则我会写点东西。 最佳答案 到目前为止,我还没有看到 Sock
是否可以使用 SocketCAN 发送“一次性”CAN 消息?这基本上是一条不期望接收方返回确认的消息。协议(protocol)允许不设置此 ACK 位。 最佳答案 我不确定你所说的“一次性”是什么意
我使用带有嵌入式Linux的ARM板,但它非常有限。不知怎的,我设法安装了node.js和npm。这个想法是通过 CAN 总线在网页上的按钮单击事件上发送数据。我只找到一个名为“socketcan”的
我正在使用带有两个 CAN 接口(interface)的 Beaglebone Black 作为 SocketCAN。如何将接口(interface) can0 链接到我的硬件 DCAN0?我需要
我是 SocketCan 的新手。我正在使用虚拟 jar ,我想知道 SocketCAN 是否根据 CAN ID 进行优先级排序。我的问题是,因为我使用的是虚拟 jar ,所以我发送数据,然后立即收到
我想确认我的消息已经通过 socketCAN 库保存在 CAN 总线上。socketCAN 文档描述了使用 recvmsg() 函数时的这种可能性,我对其实现有疑问。 我要实现的功能是确认我的消息在仲
我正在考虑使用 Boost Asio从 Socket CAN 中读取数据. linux/can.h 没什么特别的,并且设备应该表现得像环回接口(interface),并与原始套接字一起使用。 查看 b
我已经从 SVN 下载了实用程序。因为默认情况下 can utitlities 不在内核中。 svn checkout svn://svn.berlios.de/socketcan/trunk/can
我正在尝试过滤具有特定 ID 的 CAN 帧,如下所述:https://landlock.io/linux-doc/landlock-v8/networking/can.html#raw-protoc
我正在编写一个 CAN 记录器程序。我记录数据的方式类似于 candump -tool 在调用 candump 时执行此操作喜欢 candump any : https://github.com/li
我的问题如下。我在 Linux 上使用 Tiny-CAN I-XL CAN-USB 适配器和 socketCAN。我通过以下方式配置 CAN 适配器: sudo slcan_attach /dev/t
我正在使用 SocketCAN 测试嵌入式设备(SOC/ARM 内核/Linux)上的 CAN 接口(interface),我想使用高效代码尽快发送数据进行测试。 我可以将 CAN 设备(“can0”
简而言之,我希望 candump 仅向我显示 ID 为 0x00200200 或 0x255 的帧。 所以我这样做: candump can0,00200200:0,255:0 但这给出了所有帧,并且
我希望使用 python3 上的模块 python-can 在 MacOS 上使用 socketCAN 协议(protocol)无线连接到汽车。我不知道如何在 MacOS 上安装 socketCAN
我是一名优秀的程序员,十分优秀!