Linux-CAN Bus

Linux下 CAN Bus协议的实现,有一部分是由硬件来实现,有一部分是软件实现。

CAN总线基础和在linux下使用实战

CAN的硬件部分需要   CAN控制器  和  CAN收发器 

像TX2、Xavier,以及STM32F103,都是只带CAN控制器,所以还需要外加 CAN收发器

Linux内核 

 

动态内核:Linux 还是一个动态内核,支持动态添加或删除软件组件。被称为动态可加载内核模块,它们可以在引导时根据需要(当前特定设备需要这个模块)或在任何时候由用户插入。(百度百科)

 

你为什么学习 Linux 内核? - 嵌入式Linux的回答 - 知乎    感觉很有意思,对计算机运行又有了更深入的理解。

内核管理应用程序,也管理硬件(包含很多硬件驱动代码) 

 

Linux Socket CAN——驱动开发

Socket CAN是Linux内核的一部分

 

Linux内核Socket CAN中文文档 

动机--为什么使用socket API接口?

在Socket CAN之前Linux中已经有了一些CAN的实现方法,那为什么还要启动Socket CAN这个项目呢?大多数已经存在的实现方法仅仅作为某个具体硬件的设备驱动,它们往往基于字符设备并且提供的功能很少。那些方案通常是由一个针对具体硬件的设备驱动提供的字符设备接口来实现原始can帧的发送和接收,并且直接和控制器硬件打交道。帧队列和ISO-TP这样的高层协议必须在用户空间来实现。就像串口设备接口一样,大多数基于字符设备的实现在同一时刻仅仅支持一个进程的访问。如果更换了CAN控制器,那么同时也要更换另一个设备驱动,并且需要大多数应用程序重新调整以适应新驱动的API。

Socket CAN被设计用来克服以上种种不足。这种新的协议族实现了用户空间的socket接口,它构建于Linux网络层之上,因此可以直接使用已有的队列功能。CAN控制器的设备驱动将自己作为一个网络设备注册进Linux的网络层,CAN控制器收到的CAN帧可以传输给高层的网络协议和CAN协议族,反之,发送的帧也会通过高层给CAN控制器。