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內核
tar zxvf linux-4.4.32.tar.gz 將解壓后目錄下的所有文件copy到 apollo-kernel/linux路徑下。你會發現在linux/drivers/路徑中沒有esdcan的目錄。所有的內核驅動都是在其根目錄drivers下的,esdcan驅動不是linux支持的,因此沒有其源代碼。
點擊該鏈接即可下載:
Linux Kernel 4.4.32 -
打esdcan的補丁
在linux目錄下,執行如下命令進行打補丁操作:
在 ~/apollo-kernel/linux/patches路徑下,將文件esdcan.patch復制到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官方提供的腳本進行編譯:
編譯整個內核啊,這是一個漫長的過程,在我新嘎嘎的 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操作,即:
- 用下面的命令進行編譯
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](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
總結
以上是生活随笔為你收集整理的ESD-CAN安装调试笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 从DQN到Double DQN和Duel
- 下一篇: C++多线程同步效率对比之临界区和原子锁