Apollo学习笔记1-ESD_CAN调试

适配 ESD CAN

CANBUS模块是Apollo需要根据底盘协议写底盘控制和反馈代码的地方,感觉也是Apollo最难调试的部分。这部分首先要选好CAN卡,因为不是Apollo推荐的CAN卡,驱动程序和对应接口,可能都需要自己调整,Apollo推荐的是ESD CAN。
在这里插入图片描述

**注:**1.购买IPC时需要注意主板上是否有PICe插槽, ESDCAN卡是要插在这个槽上的。同时注意在你的CAN网络中是否存在120欧姆的匹配电阻,如果没有,ESDCAN上的JX300上的跳线拿下来插到JX400上,如果有,不用动。

​ 2.Apollo给的文档中可以找到安装ESD CAN的安装方式(https://github.com/ApolloAuto/apollo-kernel/blob/master/linux/ESDCAN-README.md),提供了两种方式:第一种方式在编译Apollo的时候同时编译,第二种方式在build Apollo之后安装。本文采用第二种方式,Apollo也推荐采用第二种方式。

​ 3.Apollo的消息传递全部是由google的Protocol Buffers来实现,建议搭建先看一下相关的教程:https://developers.google.com/protocol-buffers/及http://www.ibm.com/developerworks/cn/linux/l-cn-gpb/。.proto生成的文件都是写保护的,不可以修改。

1. ESD CAN卡安装

首先把跳线帽安到CAN卡相应的位置,之后把CAN卡插到工控机(IPC)的插槽里。
在这里插入图片描述

2.ESD CAN驱动安装

  • 驱动下载

    官网下载驱动包esdcan-pcie402-linux-x86_64-4.1.1.tgz,由于使用Ubuntu18.04,且内核版本为5.4.0-58,目前ESD CAN官网只有此驱动支持系统内核5.0以上。

    下载完毕后,解压,解压后的文件目录如下:

在这里插入图片描述

  • 驱动安装

    (1) 将目录esdcan-pcie402-linux-x86_64-4.1.1/include下的ntcan.h复制到目录/usr/local/include 下,程序在调用CAN接口时都需要包含该头文件

    cd esdcan-pcie402-linux-x86_64-4.1.1/include
    sudo cp ntcan.h /usr/local/include"
    

    (2)将目录esdcan-pcie402-linux-x86_64-4.1.1/lib64下的动态链接库libntcan.so.4.2.3复制到目录/usr/local/lib

    sudo cp libntcan.so.4.2.3 /usr/local/lib
    

    进入/usr/local/lib,执行以下命令

    cd /usr/local/lib
    sudo ldconfig -v -n /usr/local/lib   #会生成"libntcan.so.4"文件
    sudo ln -sfv libntcan.so.4 libntcan.so  #会生成"libntcan.so"文件。
    

    (3)确认/etc/udev/rules.d中是否有esdcan-pcie402-dev.rules,如果没有从esdcan-pcie402-linux-x86_64-4.1.1/udev目录拷贝。

    sudo cp esdcan-pcie402-dev.rules /etc/udev/rules.d/
    sudo service udev restart
    

    (4)建立动态链接库

    $ ldconfig -p | grep ntcan
    $ cat /etc/ld.so.conf | grep /usr/local/lib
    $ sudo sh -c "echo /usr/local/lib >> /etc/ld.so.conf"
    $ sudo ldconfig
    

    动态链接库建立完成

    (5)测试CAN卡工作。请接入您的CAN分析仪,如果没有,也可以接入一个能发送CAN帧设备(比如单片机、ARM等),设置波特率为500k,并能发送数据到ESD CAN。

    $ cantest 3 0 0x00 0xffff 1 10 100 1000 5000 2 -1
    

    每个参数的含义为:

    3 – canRead

    0 – net0

    0x00 – first-id 0x00

    0xffff – last-id 0xffff

    1 – count of CMSG-packets

    10 – txbuf (useless here)

    100 – rxbuf

    1000 – tx timeout every 1 second (useless here)

    5000 – rx timeout every 5 seconds

    2 – baud rate 500k bit/s

    -1 – count of ntcan-API-Calls, -1 is forever canRead the bus.

    如果ESD CAN接收到了数据,那么CAN卡驱动调试完毕。

    下图为使用cantest发送数据,ESD CAN接收到的数据
    在这里插入图片描述

  • Apollo安装ESD CAN内核驱动

    在目录"esdcan-pcie402-linux-x86_64-4.1.1/src"下,参考apollo安装esdcan驱动方式,生成esdcan-pcie402.ko文件

在这里插入图片描述

执行命令如下

make -C /lib/modules/`uname -r`/build M=`pwd`  #生成esdcan-pcie402.ko文件
sudo make -C /lib/modules/`uname -r`/build M=`pwd` modules_install  #加载ko文件
sudo install -p -v -g root -o root -m u=rw,g=r,o=r esdcan-pcie402.ko /lib/modules/$(uname -r)/kernel/drivers/pci/ #同时把ko文件拷贝到/lib/modules/$(uname -r)/kernel/drivers/pci/目录

3.Apollo ESD CAN 库添加

参考Apollo官方文档: Apollo ESDCAN 库添加.

(1)拷贝esdcan-pcie402-linux-x86_64-4.1.1/include到apollo/third_party/can_card_library/esd_can/目标下

sudo cp -r include/ sudo cp -r include/ ~/apps/apollo/third_party/can_card_library/esd_can/

(2)拷贝esdcan-pcie402-linux-x86_64-4.1.1/lib64到apollo/third_party/can_card_library/esd_can/目标下,并重命名lib

sudo cp -r include/ sudo cp -r include/ ~/apps/apollo/third_party/can_card_library/esd_can/
sudo mv lib64 lib

(3)添加esdcan库软链接

sudo ln -s libntcan.so.4.0.1 libntcan.so.4;
sudo ln -s libntcan.so.4.0.1 libntcan.so.4.0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值