南岭实验室的项目总体结构图,这是我问曲师兄后自己总结的结构,在这里面,client是每一个操作自己车辆的用户,通过个人电脑向自己的车辆发送信息,先通过server判断请求是否正确,是否可靠,然后通过CDMA发送给车载网关,车载网关有CDMA的接收端,接收到消息后将其交给CDMA的驱动,驱动扔给linux网络协议堆栈,然后packet截包程序从总截获数据包,然后根据IPV6地址判断是扔给can_module还是GPS_module。
因为从上层server传过来的数据包是加密的,在网关中不能对其进行解密,但是在can_controler(GPS中心导航)中却可以将其解密,这样,传过来的数据包还要通过以太网传给can_controller让其经行解密,解密完成后再传回给can_module。这样,在can_module中就要把传给哪个can_node的IPV6地址经行保存(放在数据段的最后)。这样才能在从can_controller返回数据包后还能知道是传给哪个can_node结点。
(GPS的还没有看,所以这里没有写)
Can_module程序中通过对文件的处理来和can驱动经行数据传输,can总线在接到一个数据包后会有一个返回值,这个值现在我们的程序只能一次的读取,也就是说,我们只能从上层控制can_node,而不能从can_node主动的向上层发送数据。最终的目的是希望实现can_node和车载网关之间能经行交互传输数据。所以,这也是我主要研究的方向。
所以还要去了解的东西就是can驱动,有两种方法可能能实现数据的上通下达
1. 把我们can_module中的can_interrupte函数extend出来,这样在can驱动中的代码就能调用到这个函数,当有数据包到达时就可以调用这个函数将数据包传输到车载网关。但这种方法可能会遇到一些问题,就是在程序在读写文件的时候会发生中断,而如果交给can_interrupte后就可能在中断问题上发生数据问题(具体什么问题还要研究)。
2. 第二种方法实现起来可能有一些难度(相比第一种方法),就是把can驱动的代码和can_module经行整合,这样把他们放到一起编译,就成了一个整体,这样第一种方法所遇到的一些问题也就得到了解决。