ESD-CAN装置的安装与调试实录
方法一 编译带ESD-CAN的Apollo-RT-Kernel
该方法是将原生的Linux内核(linux-4.4.32)打上esdcan的补丁(esdcan_patch),然后使用apollo提供的build.sh 脚本编译成实时内核。下面具体介绍操作步骤。
下载apollo-kernel,命令如下:
git clone https://github.com/ApolloAuto/apollo-kernel.git
内核文件准备工作
-
下载Linux内核
点击该链接即可下载:
Linux Kernel 4.4.32tar zxvf linux-4.4.32.tar.gz
将解压后目录下的所有文件copy到 apollo-kernel/linux路径下。你会发现在linux/drivers/路径中没有esdcan的目录。所有的内核驱动都是在其根目录drivers下的,esdcan驱动不是linux支持的,因此没有其源代码。
-
打esdcan的补丁
在 ~/apollo-kernel/linux/patches路径下,将文件esdcan.patch复制到linux目录中。在linux目录下,执行如下命令进行打补丁操作:
patch -p1 < esdcan.patch
此时查看./drivers/路径 ,发现esdcan目录已经存在。
-
根据你选用的ESD-CAN卡型号,在附赠光盘中选取对应的驱动,解压,将 src/路径下除Makefile之外的所有文件copy到 ~/apollo-kernel/linux/drivers/esdcan/ 路径下。命令为:
cd ~/apollo-kernel/linux/drivers/esdcan/ cp -ri ./src/* . #请将源路径替换成自己驱动src目录所在的路径
-
执行如下命令
cd drivers/esdcan/;ln -s Makefile.esd Makefile;ln -s Kconfig.esd Kconfig;cd ../.. #如果链接不成功,删掉 Makefile或 Kconfig重新进行进行即可
编译
成功执行完上述操作,你当前的路径应该是 ~/apollo-kernel/linux/$
在该路径下执行apollo官方提供的脚本进行编译:
./build.sh rt #rt参数表示只编译实时(RT)内核,其他参数参数请用"./build help"查看,或者直接打开该脚本一饱眼福,哈哈
编译整个内核啊,这是一个漫长的过程,在我新嘎嘎的 Nuvo-6108GGC E3-1275-V5 八核处理器上,编译了半个多小时呢。编译刚开始时,你可以看看前面输出的信息,说是编译的RT内核,ESD-CAN支持 ,blablabla...... 蓦然回首,一个编译好的鲜活生动的内核已经出炉!你可以在 ~/apollo-kernel/linux/install/rt/
路径下看到install.tgz文件,这就是内核安装包。解压,执行install路径下的脚本进行安装。如果你多看一眼,你会发现还有一个装N卡驱动的脚本,在本人的机器上,亲测可用。
内核默认启动选项修改
至此,带有ESD-CAN支持的apollo-rt-kernel的编译安装工作已经结束。但是你reboot会发现,启动的还是之前的内核。此时,你需要在grub.cfg中修改默认启动内核选项啦,具体做法,不会的请自行 百度一下。
方法二 Build & Install Out-of-Tree ESD Kernel Driver
这个比较快,操作也简单,请参考apollo官方文档 方法一
操作那么复杂,存在意义是什么呢,我简单唠叨两句:
- 编译好的内核,你可以保存下来,以后直接安装就行(ESD-CAN的型号一致的话)。
- 艺多不压身啊,有些时候你不得不编译内核
ESD-CAN调试
折腾这么久,你肯定想看看这个CAN能不能正常工作喽。然而当你按照APOLLO官方文档进行测试时,并不能顺利进行。下面我总结一下正确的测试过程,希望对大家有帮助。额,测试之前,首先看看你启动的内核是不是那个带着ESD-CAN的。
用bazel编译esdcan_test_app
在目录 apollo/modules/monitor/hardware/can/esdcan_tools/
下,有一个ESD-CAN卡的测试文件: esdcan_test_app.cpp
你需要在docker中用bazel编译。步骤如下:
- 开一个新的终端(不要进入docker),在路径
apollo/third_party/can_card_library/esd_can
下,新建两个目录:lib 和 include - 按照apollo官方文档中步骤2操作,即:
#Copy ntcan.h to include/
#Copy 64-bit libntcan.so.4.0.1 to lib/
#Do the following to add the necessary symbolic links:
cd ./lib/;
ln -s libntcan.so.4.0.1 libntcan.so.4;
ln -s libntcan.so.4.0.1 libntcan.so.4.0
- 用下面的命令进行编译
cd modules/monitor/hardware/can/esdcan_tools/#注意:在docker内 bazel build //modules/monitor/hardware/can/esdcan/esdcan_tools:esdcan_test_app # 这是一个完整的命令,双斜杠不是注释!
- 编译成功,在目录
apollo/bazel-bin/modules/monitor/hardware/can/esdcan_tools/
下有可执行文件:esdcan_test_app
在该路径下输入以下命令对ESD-CAN进行测试:./esdcan_test_app --details=true
ATTENTION: 入行不深,疏漏难免,欢迎批评&&指正,不胜感激!
References:[1] https://github.com/ApolloAuto/apollo-kernel/blob/master/linux/ESDCAN-README.md
[2]https://github.com/ApolloAuto/apollo-kernel
[3]https://github.com/ApolloAuto/apollo/blob/master/docs/howto/how_to_troubleshoot_esdcan.md
[4]https://github.com/ApolloAuto/apollo/tree/master/third_party/can_card_library/esd_can
推荐阅读
-
计算机毕业设计 基于 Flask + vue 的博客系统设计与实现 Python 毕业设计 Python 毕业设计题目 Flask 框架 Vue [含源代码 + 安装与调试]。
-
一步一步详解:轻松掌握VScode的下载安装、环境配置、编写与执行、调试教程
-
简易教程:ADB的安装与应用调试
-
ESD-CAN装置的安装与调试实录
-
前端搭建指南:调试本地开发环境的实用技巧 - 在CLI脚手架项目里,别忘了添加库文件及其版本依赖 1. 实时联动与修改: a) 首先确保在当前CLI脚手架项目的`package.json`依赖中加入所用库文件及其正确版本。 b) 通过npm link在本地创建硬连接,使得库与项目能实时修改、同步。运行如下命令: ``` $ cd your-lib-dir $ npm link $ cd your-cli-dir $ npm link your-lib ``` 2. 模拟部署环境: 当需测试线上环境时,解除本地软链接。回到库文件目录并执行: ``` $ cd your-lib-dir $ npm unlink ``` 同样,在CLI项目目录执行: ``` $ cd your-cli-dir $ npm uninstall your-lib --save ``` 注意此时可能会出现因缺少库文件依赖导致的错误,但可暂且忽略,这样能避免将来遗漏或重复安装的问题。 3. 发布后的操作: 如果库已上线,可先清空CLI项目的`node_modules`目录(`rm -rf node_modules`),然后重新安装所有依赖: ``` $ npm install ``` 通过以上步骤,您就能顺畅地调试和部署您的脚手架项目了。 总结 `link` & `unlink` 命令的运用: 1. `npm link`:在本地创建硬连接,便于实时协作与同步。 2. `npm unlink`:模拟线上环境并解除软链接,为正式部署做准备。