设想一下,您正在开发一款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功能。