Ununtu14.04安装Apollo2.5-内核及CAN卡驱动

Ununtu14.04安装Apollo2.5

  • 从安装系统开始
    • 1 安装Ubuntu14.04
    • 2 一些小的准备工作
      • 2.1 切换镜像源
      • 2.2 安装vim
      • 2.3 更改hosts文件
      • 2.4 如果遇到输入法错误
    • 3 安装Apollo内核、CAN卡驱动和N卡驱动
      • 3.1 下载apollo-kernel
      • 3.2 下载Linux内核
      • 3.3 打esdcan的补丁
      • 3.4 编译
      • 3.5 安装
      • 3.6 安装Nvidia GPU驱动
    • 4 ESD-PCIe 402 CAN卡驱动安装及测试
      • 4.1 打开CAN卡驱动包
      • 4.2 编译驱动包
      • 4.3 复制ntcan.h头文件
      • 4.4 加载动态链接库
      • 4.5 编译esdcan-pcie402.ko
      • 4.6 创建CAN卡节点/编写.rules文件
      • 4.7 确认CAN卡驱动加载
      • 4.8 编译及测试
    • 5 安装ROS INDIGO
    • 6 安装Apollo2.5
  • 安装其他车载传感器等
    • 参考文献

从安装系统开始

学习用到Apollo的小车,要给工控机安装Apollo2.5,记录一下安装过程,以便系统崩了之后可以快速返工。

1 安装Ubuntu14.04

下载Ubuntu14.04系统镜像,下载Ubuntu系统镜像,例如ubuntu-14.04.4-desktop-amd64.iso,用Universal USB Installer制作成系统盘。
先插入系统盘,开机按 F2 进入 BIOS 设置菜单,选择优盘启动,之后按步骤安装系统。
安装完毕,重启系统后,在终端执行以下命令完成更新。

sudo apt-get update; 
sudo apt-get upgrade

在终端输入以下命令,安装Linux 4.4 内核:

sudo apt-get install linux-generic-lts-xenial

2 一些小的准备工作

2.1 切换镜像源

为方便下载文件及更新,System Settings-Software&Updates-Ubuntu Software-Download from-选择合适的镜像源。清华源比较常用,不过我之后用的是阿里云。

2.2 安装vim

在刚安装好Ubuntu14.04时系统中应该没有安装vim,在终端中输入vim然后按照提示安装vim即可。方便之后修改编辑文件。

2.3 更改hosts文件

【据同学说该步骤可能引起后续问题,所以可先不做】
为了加快从github下载文件速度,按照以下步骤更改hosts文件。
输入以下指令进行编辑修改:

 vim /etc/hosts

修改内容如下:(具体ip可能不同)
192.30.253.113 github.com
151.101.185.194 github.global.ssl.fastly.net
140.82.114.10 codeload.github.com
利用https://www.ipaddress.com/ 来获得以上GitHub域名的IP地址。
修改hosts文件后,刷新DNS。具体指令我忘了=-=所以我选择reboot。

2.4 如果遇到输入法错误

Ubuntu14.04自带的输入法有时会遇到自动切换到双拼模式且无法更改的bug,这时可以选择在输入法设置中安装其他输入法,或者尝试以下方法,在终端中输入以下指令然后重启。

sudo apt-get install ibus-libpinyin pinyin-database

3 安装Apollo内核、CAN卡驱动和N卡驱动

Apollo硬件安装
Apollo软件安装
这里需要安装带ESD CAN的内核。
有两种方法,一是安装预编译的Apollo kernel,然后根据ESDCAN-README.md编译ESD CAN驱动器源代码;二是编译带ESD-CAN的Apollo-RT-Kernel。
我之前采用方法一的时候不太顺利,有的步骤找不到相应目录,于是采取了方法二,但之后参考了软件安装指南,可以采用方法一。

ESD-Can安装调试
方法二是将原生的Linux内核(linux-4.4.32)打上esdcan的补丁(esdcan_patch),然后使用apollo提供的build.sh 脚本编译成实时内核。下面具体介绍操作步骤。

3.1 下载apollo-kernel

git clone https://github.com/ApolloAuto/apollo-kernel.git

3.2 下载Linux内核

Linux Kernel 4.4.32

tar zxvf linux-4.4.32.tar.gz

将解压后目录下的所有文件copy到 apollo-kernel/linux路径下。此时在linux/drivers/路径中没有esdcan的目录。所有的内核驱动都是在其根目录drivers下的,esdcan驱动不是linux支持的,因此没有其源代码。

3.3 打esdcan的补丁

在 ~/apollo-kernel/linux/patches路径下,将文件esdcan.patch复制到linux目录中。
在linux目录下,执行如下命令进行打补丁操作:

patch -p1 < esdcan.patch

此时查看./linux/drivers/路径 ,发现esdcan目录已经存在。
根据选用的ESD-CAN卡型号,在附赠光盘中选取对应的驱动,我这里的版本是ESD-PCIe 402,解压,将 src/路径下除Makefile之外的所有文件copy到 ~/apollo-kernel/linux/drivers/esdcan/ 路径下。
执行如下命令

cd drivers/esdcan/;ln -s Makefile.esd Makefile;ln -s Kconfig.esd Kconfig
cd ../.. 

如果链接不成功,删掉 Makefile或 Kconfig重新进行进行即可

3.4 编译

成功执行完上述操作,当前的路径应该是
~/apollo-kernel/linux/
在该路径下执行apollo官方提供的脚本进行编译:

sudo ./build.sh rt

rt参数表示只编译实时(RT)内核,其他参数可用"./build help"查看

3.5 安装

编译内核时间可能较长,编译完毕后,可以在~/apollo-kernel/linux/install/rt/路径下看到install.tgz文件,这就是内核安装包。tar zxvf install.tgz解压,执行install路径下的脚本进行安装。

3.6 安装Nvidia GPU驱动

在~/apollo-kernel/linux/install/rt/路径有一个装N卡驱动的脚本,可以直接运行安装N卡驱动。
Or
车辆中的Apollo运行需要NVIDIA GPU 驱动,必须安装具有特定选项的NVIDIA GPU驱动程序。

wget http://us.download.nvidia.com/XFree86/Linux-x86_64/375.39/NVIDIA-Linux-x86_64-375.39.run
sudo bash ./NVIDIA-Linux-x86_64-375.39.run --no-x-check -a -s --no-kernel-module

4 ESD-PCIe 402 CAN卡驱动安装及测试

4.1 打开CAN卡驱动包

从产品自带的光盘里得到一个驱动包,esdcan-pcie402-linux-2.6.x-x86_64-3.10.4, 解压后,进入esdcan-pcie402-linux-2.6.x-x86_64-3.10.4目录中,

cd esdcan-pcie402-linux-2.6.x-x86_64-3.10.4

4.2 编译驱动包

进入到esdcan-pcie402-linux-2.6.x-x86_64-3.10.4目录后,会发现有一个Makefile文件,在该目录下执行命令

make

src文件夹中很多文件被编译了,其中有一个文件esdcan-pcie402.ko,之后会用到。

4.3 复制ntcan.h头文件

在目录"esdcan-pcie402-linux-2.6.x-x86_64-3.10.4/include"下,有一个叫"ntcan.h"的头文件,后期程序在调用CAN接口时都要包含这个头文件。需要将其复制到/usr/local/include目录下,在"esdcan-pcie402-linux-2.6.x-x86_64-3.10.4/include"目录下执行命令

sudo cp ntcan.h /usr/local/include

打开/usr/local/include查看,确认"ntcan.h"在该目录下。

4.4 加载动态链接库

在目录"esdcan-pcie402-linux-2.6.x-x86_64-3.10.4/lib64"下,有一个叫"libntcan.so.4.0.1"的动态链接库;
需要将其copy到/usr/local/lib目录下,在"esdcan-pcie402-linux-2.6.x-x86_64-3.10.4/lib"目录下,执行命令

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

确认"libntcan.so.4.0.1"在/usr/local/lib文件夹中后,接下来进入/usr/local/lib目录,执行以下命令生成"libntcan.so.4"文件。

sudo ldconfig -v -n /usr/local/lib

确认"libntcan.so.4"在/usr/local/lib文件夹中后,接下来进入/usr/local/lib目录,执行以下命令生成"libntcan.so"文件。

sudo ln -sfv libntcan.so.4 libntcan.so

之后进行加载动态链接库,在任意目录下执行

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

至此,动态链接库加载完成

4.5 编译esdcan-pcie402.ko

在目录"esdcan-pcie402-linux-2.6.x-x86_64-3.10.4/src"下,能看到一个叫"esdcan-pcie402.ko"的文件,这个文件是由之前所述的make命令生成的,需要将其copy到/lib/modules/$(uname -r)/kernel/drivers/pci目录下。在"esdcan-pcie402-linux-2.6.x-x86_64-3.10.4/src"目录下执行命令如下

sudo cp esdcan-pcie402.ko /lib/modules/$(uname -r)/kernel/drivers/pci

打开/lib/modules/$(uname -r)/kernel/drivers/pci查看,确认"esdcan-pcie402.ko"在该目录下;
接下来编译"esdcan-pcie402.ko"文件,打开一个新终端,执行

sudo depmod -a

通过后执行

sudo modprobe esdcan-pcie402

4.6 创建CAN卡节点/编写.rules文件

方法一(不推荐):打开一个新终端执行“sudo mknod --mode=a+rw /dev/can0 c 52 0”,其中52代表402号CAN卡的major值,不同的CAN卡请根据型号自行更改值,Read me文件中有说明。此时在dev目录下会看到一个节点can0,但是采用这种方法有一个缺点,每次重启can0节点会被消除,这样CAN卡就启动不了,需要重新创建一个can0节点才能启动CAN卡,
原因是dev文件夹的全称其实是device,里面有鼠标、键盘等各种设备的节点,是装系统时自带的,我们后期不能随意添加节点,即使你添加了,开机重启后系统还是会删除。

方法二:创建一个名为"98-esdcanpci.rules"的文件,前面名称可以自己改,后缀为".rules"即可,文件里面的内容如下:
SUBSYSTEM==“pci”, ACTION==“add”, ATTR{subsystem_vendor}==“0x12fe”, ATTR{subsystem_device}==“0x0402” , RUN+="/bin/sh -c ‘mknod --mode=a+rw /dev/can0 c 52 0’"
其含义为:ATTR{subsystem_vendor}==“0x12fe” is the registered ID of esd in PCI(PnP), ATTR{subsystem_device}==“0x0402” is the ID of CAN-PCIe402,52是CAN卡的major值。
注意,每一块CAN卡的subsystem_vendor值和subsystem_device值不一样,可以通过以下命令来查找:
首先在一个新终端,执行:

lspci

可以看到所有的pci设备,其中就会有一个叫CANBUS的,CANBUS前面对应有一个值,例如"02:00.0";
接下来执行:

lspci -n |grep 02:00.0

可以看到设备的subsystem_vendor和subsystem_device,执行后得到例如"02:00.0 0c09: 12fe:0402 (rev 01)",其中12fe为subsystem_vendor,0402为subsystem_device;
接下来98-esdcanpci.rules文件写完后,将其copy至"/etc/udev/rules.d"目录下,在该目录下对98-esdcanpci.rules执行

chmod 777 98-esdcanpci.rules

接下来重启ubantu系统,让rules文件生效。

4.7 确认CAN卡驱动加载

确保CAN驱动已经加载,运行命令

lsmod |grep can

下一步确认CAN设备可见,并且已具备合适的权限,运行命令

ls -l /dev/can0

若以上两个命令运行均成功,则说明已经驱上了,但并未完全确定成功。

4.8 编译及测试

至此,CAN卡驱动操作均已完成,接下来进行编译及测试。
在目录“esdcan-pcie402-linux-2.6.x-x86_64-3.10.4/example”下,能看到一个叫cantest.c的文件,
在目录“esdcan-pcie402-linux-2.6.x-x86_64-3.10.4/example”下执行

gcc -o cantest cantest.c -lntcan

若编译通过则说明CAN驱动已经安装成功,在该目录下,会看到一个"cantest"的可执行文件,运行该文件时候要带上参数

sudo ./cantest 3 0 0x00 0xff 1 10 100 1000 5000 2 -1

各项参数解释如下:
3 – canRead
0 – net0
0x00 – first-id 0x00
0xff – last-id 0xff
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.

cantest 3 0 0x00 0xff 1 10 100 1000 5000 2 -1 可以接收网内canid 在0和ff之间的数据包,需要接受很大的id的数据包,将0xff改大为0xffff即可;

CAN卡自带120欧电阻,传感器输出端需要接一个120欧电阻(若不接则可能接收不到传感器数据),CAN卡接收端不需要外接120欧电阻。

5 安装ROS INDIGO

按官方教程安装即可。

6 安装Apollo2.5

参考安装apollo2.5安装Apollo2.5,其中,百度回复容器内不需要安装显卡驱动,另主机内显卡驱动已在前述步骤中使用脚本安装,故执行其他步骤即可。
注意,在进入容器时,尽量不要进行sudo操作,可能会使Apollo一些文件上锁从而影响传感器等的安装。当提示某个文件权限不足时采取赋权操作。

sudo chmod 777 /var/run/docker.sock
bash docker/scripts/dev_start.sh
bash docker/scripts/dev_into.sh

安装其他车载传感器等

正在安装摄像头、雷达等,待更新。

参考文献

  1. https://github.com/ApolloAuto/apollo/blob/master/docs/quickstart/apollo_2_5_hardware_system_installation_guide_v1_cn.md
  2. https://www.cnblogs.com/zhangtz/p/9385304.html
  3. https://blog.csdn.net/weixin_38198631/article/details/80895279
  4. https://blog.csdn.net/weixin_42232538/article/details/90274557

你可能感兴趣的:(学习笔记)