技术博客

12/06/2023 作者 Adam Raymer

如何正确理解和选择SocketCAN与LinuxCAN?

设想一下,您正在开发一款CAN系统。您需要在CAN节点和计算机之间建立连接,来控制CAN节点的收发。并且,您使用的是Kvaser硬件设备,该项目要求您使用Linux电脑(例如Raspberry Pi或Ubuntu)。那么该如何将Kvaser设备连接到PC?

为了达到此目的,您需要安装驱动程序。鉴于您正在使用Linux,可以选择LinuxCAN驱动程序或SocketCAN驱动程序。那么这两者有什么区别吗?这取决于您的目的。

什么是LinuxCAN?

LinuxCAN是Kvaser为Linux量身定制的一套驱动程序。该驱动程序包含在Kvaser CANlib SDK软件开发包中,并通过我们的API进行定制编程。也就是一次安装就能涵盖所有设备(不包括以太网设备)的驱动程序。

什么是SocketCAN?

SocketCAN是一组开源的CAN驱动程序和网络堆栈,多个Linux发布版本中都包含它们。换句话说,SocketCAN是预装的,您只需配置SocketCAN即可。不止是Kvaser硬件产品,SocketCAN还支持其他设备。SocketCAN使用Berkeley socket API、Linux网络堆栈,并将CAN设备驱动程序作为网络接口。点击此处,获取适用于SocketCAN的Kvaser相关产品完整列表。

Kvaser持续为SocketCAN提供驱动程序更新,但不对SocketCAN进行维护。您可以在Kvaser官网上查询SocketCAN的测试版驱动程序。这些驱动程序用于更新Linux内核的SocketCAN驱动,但可能会出现尚未获批或整合进最新版本内核的情况Kvaser硬件的支持取决于Linux内核版本,因为我们需等SocketCAN工作组将支持新硬件的更新加进去。

两者的差异在哪里?

SocketCAN和LinuxCAN均支持在Linux设备上使用Kvaser。接下来我将列出一些软件关键区别,以便帮助您选择:

  • SocketCAN是一组基于网络套接字的驱动程序。类似于通用驱动程序。您可以这样理解:当您插上一个新鼠标,其即被注册为“通用鼠标”。SocketCAN提供访问CAN总线的功能。SocketCAN允许按需更换设备,包含来自其他公司的设备。此外,还可以通过bash命令提示执行SocketCAN命令,这意味着您可以从命令终端设置基本发送、接收功能。
  • LinuxCAN与Kvaser Windows API适配。该API专用于Kvaser,驱动程序专用于Kvaser设备。基于此,您就可以访问更多基于LinuxCAN SDK编程的功能。这些功能包括:对装置上的LED进行编程,以及添加Kvaser Memorator提取命令。LinuxCAN还支持LIN功能,SocketCAN则不支持。但LinuxCAN不支持在终端窗口中通过bash提示符运行命令。

可以同时使用SocketCAN和LinuxCAN吗?

这个取决于您的应用情况。首先,在为Kvaser产品安装LinuxCAN时,安装程序会将SocketCAN驱动程序列入黑名单。这是为了防止驱动程序冲突。这意味着Kvaser设备只能使用LinuxCAN驱动程序。虽然如此,您仍然可以使用其他公司的SocketCAN驱动程序。Kvaser API命令仍然仅适用于Kvaser设备,SocketCAN命令仅适用于使用SocketCAN驱动程序的设备。

什么情况下应该只选择其中之一?

这取决于项目的性质。如果您有一个项目,它所使用的功能特定于Kvaser设备,那么LinuxCAN将是更好的选择。如果在您的应用中所用的CAN通讯仪可能被替换,或者要它们具有类似的功能,那么可以考虑选择SocketCAN。

总结:
SocketCAN:

  • 为Kvaser以及其他公司的硬件提供驱动程序。
  • 可通过Linux内核获得,无需安装。
  • 可通过bash提示符运行命令。
  • 无LIN功能。

LinuxCAN:

  • 特定于Kvaser设备,支持高级功能。
  • 将Kvaser产品中的SocketCAN驱动程序列入黑名单,以避免冲突。
  • 无法通过bash提示符运行命令。
  • 具有LIN功能。
Author Image

Adam Raymer

Adam Raymer是Kvaser AB公司的一名现场应用工程师,位于美国底特律附近。Adam定期与客户保持良好沟通,是我们全球支持团队中的活跃成员之一。